https://pulumi.com logo
Title
f

fast-pager-93865

01/18/2022, 7:03 AM
Good morning, I am having a hard time passing my newly built subnet ids into my EKS cluster For example here is my subnet creation ( I actually create several of them in a loop)
privateSubnet, err := ec2.NewSubnet(ctx, fmt.Sprintf("eks-subnet-private-%d", i), &ec2.SubnetArgs{
                VpcId:               vpc.ID(),
                CidrBlock:           pulumi.String(fmt.Sprintf("%s.1%d.0/24", netWork, i)),
                AvailabilityZone:    pulumi.String(zone),
                MapPublicIpOnLaunch: pulumi.Bool(true),
                Tags:                GetTags(ctx, fmt.Sprintf("eks-%s-subnet-private-%d", environment, i)),
            })
            if err != nil {
                return err
            }
however i haven't quite mastered what should be passed into my EKS. I was assuming a list of private subnets retrieved by using the Apply, but I can't quite put together what that should look like. for example
eksCluster, err := eks.NewCluster(ctx, "eks-cluster", &eks.ClusterArgs{
    RoleArn: pulumi.StringInput(eksRole.Arn),
    VpcConfig: &eks.ClusterVpcConfigArgs{
        PublicAccessCidrs: pulumi.StringArray{
            pulumi.String("0.0.0.0/0"),
        },
        SecurityGroupIds: pulumi.StringArray{
            clusterSg.ID().ToStringOutput(),
        },
        SubnetIds: privateSubnets, << here is my issue
    },
})
if err != nil {
    return err
}
Any help most welcome! Thank you
b

bored-table-20691

01/18/2022, 5:03 PM
From the subnet you created, you can do something like:
privateSubnet.ID().ToStringOutput()
To get the subnet as a StringOutput, and then you can put it in an slice
[]pulumi.StringOutput
Once you have that slice, you can do something like:
PrivateSubnetIds: pulumi.ToStringArrayOutput(yourSliceOfSubnets)
Hope this helps!
f

fast-pager-93865

01/18/2022, 5:03 PM
it does indeed!
thankyou very much
b

bored-table-20691

01/18/2022, 5:07 PM
Excellent 🙂
f

fast-pager-93865

01/18/2022, 5:18 PM
my solution looks like this, very similar to your suggestion - I created a slice outside of the subnet creation loop
var privateSubnets pulumi.StringArray
        for i, zone := range zones.Names {
                privateSubnet, err := ec2.NewSubnet(ctx, fmt.Sprintf("eks-subnet-private-%d", i), &ec2.SubnetArgs{
                VpcId:               vpc.ID(),
                CidrBlock:           pulumi.String(fmt.Sprintf("%s.1%d.0/24", netWork, i)),
                AvailabilityZone:    pulumi.String(zone),
                MapPublicIpOnLaunch: pulumi.Bool(true),
                Tags:                GetTags(ctx, fmt.Sprintf("eks-%s-subnet-private-%d", environment, i)),
            })
            if err != nil {
                return err
            }

            privateSubnets = append(privateSubnets, privateSubnet.ID().ToStringOutput())

            ...
Then I can pass this slice to my EKS creation Statement
eksCluster, err := eks.NewCluster(ctx, "eks-cluster", &eks.ClusterArgs{
    RoleArn: pulumi.StringInput(eksRole.Arn),
    VpcConfig: &eks.ClusterVpcConfigArgs{
        PublicAccessCidrs: pulumi.StringArray{
            pulumi.String("0.0.0.0/0"),
        },
        SecurityGroupIds: pulumi.StringArray{
            clusterSg.ID().ToStringOutput(),
        },
        SubnetIds: privateSubnets, <<<
    },
})
thank you once again!
b

bored-table-20691

01/18/2022, 5:18 PM
My code looks nearly identical - nice!
😀 1
f

fast-pager-93865

01/18/2022, 5:21 PM
I don't think i am used to all this freedom and choice pulumi gives us 🙂
b

bored-table-20691

01/18/2022, 5:31 PM
It is a blessing and a curse.