Within a project like pulumi, I define and write YAML and GO files as shown below. For example, in ...
t
Within a project like pulumi, I define and write YAML and GO files as shown below. For example, in the file resource/network/firewall/main.go here, we're defining the I think I need to check if the network is created well first by lookup, but if I create the resource at the same time, I get an error when I lookup. How can I get the information about already created resources at the same time when I organize the project with the folder structure like below? cmd/main.go
Copy code
func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		if err := network.CreateNetworkManager(ctx); err != nil {
			return err
		}
		return nil
	})
}
resource/network/main.go
Copy code
func CreateNetworkManager(ctx *pulumi.Context) error {
	if err := vpc.CreateVPC(ctx); err != nil {
		return err
	}
	if err := subnet.CreateSubnet(ctx); err != nil {
		return err
	}
	if err := firewall.CreateFirewall(ctx); err != nil {
		return err
	}
	return nil
}
resource/network/firewall/main.go
Copy code
func CreateFirewall(ctx *pulumi.Context) error {
	cfg := config.New(ctx, "")
	var firewallList []GCPFirewallInterface

	if err := cfg.TryObject(utils.PulumiGCPResourceType.PulumiGCPFirewallList, &firewallList); err != nil {
		return err
	}

	firewallAllowArray := compute.FirewallAllowArray{}
	for _, firewallInfo := range firewallList {
		for _, allow := range *firewallInfo.Allows {
			portsArray := make(pulumi.StringArray, len(*allow.Ports))
			for i, ports := range *allow.Ports {
				portsArray[i] = pulumi.String(ports)
			}
			allowArgs := &compute.FirewallAllowArgs{
				Protocol: pulumi.String(allow.Protocol),
				Ports:    portsArray,
			}
			firewallAllowArray = append(firewallAllowArray, allowArgs)
		}
		sourceArangesArray := make(pulumi.StringArray, len(firewallInfo.SourceRanges))
		for i, sourceAranges := range firewallInfo.SourceRanges {
			sourceArangesArray[i] = pulumi.String(sourceAranges)
		}
		_, err := compute.NewFirewall(ctx, firewallInfo.Name, &compute.FirewallArgs{
			Name:         pulumi.String(firewallInfo.Name),
			Allows:       firewallAllowArray,
			Network:      pulumi.String(firewallInfo.Network),
			SourceRanges: sourceArangesArray,
		})
		if err != nil {
			return err
		}
	}
	return nil
}
resource/network/vpc/main.go
Copy code
func CreateVPC(ctx *pulumi.Context) error {
	cfg := config.New(ctx, "")
	var vpcList []GCPVPCType

	if err := cfg.TryObject(utils.PulumiGCPResourceType.PulumiGCPVPC, &vpcList); err != nil {
		return err
	}

	for _, vpcInfo := range vpcList {
		vpcResult, err := compute.NewNetwork(ctx, vpcInfo.Name, &compute.NetworkArgs{
			Name:                  pulumi.String(vpcInfo.Name),
			AutoCreateSubnetworks: pulumi.Bool(vpcInfo.AutoCreateSubnetworks),
			Mtu:                   <http://pulumi.Int|pulumi.Int>(vpcInfo.Mtu),
		})
	}
	return nil
}
pulumi.yaml
Copy code
CX-GCP:pulumiGCPFirewallList:
    - Name: poc-firewall-23
      Network: main-vpc
      Allows:
        - Protocol: tcp
          Ports:
            - "23"
      SourceRanges:
        - 192.168.0.0/24
  CX-GCP:pulumiGCPVPC:
    - AutoCreateSubnetworks: false
      Mtu: 1500
      Name: main-vpc
👀 1