in internal/deployers/eksapi/infra.go [197:232]
func (m *InfrastructureManager) getInfrastructureStackResources() (*Infrastructure, error) {
stack, err := m.clients.CFN().DescribeStacks(context.TODO(), &cloudformation.DescribeStacksInput{
StackName: aws.String(m.resourceID),
})
if err != nil {
return nil, err
}
infra := Infrastructure{}
for _, output := range stack.Stacks[0].Outputs {
value := *output.OutputValue
switch *output.OutputKey {
case "VPC":
infra.vpc = value
case "SubnetsPublic":
infra.subnetsPublic = strings.Split(value, ",")
case "SubnetsPrivate":
infra.subnetsPrivate = strings.Split(value, ",")
case "ClusterRole":
arn, err := arn.Parse(value)
if err != nil {
return nil, fmt.Errorf("infrastructure stack ClusterRole output is not a valid ARN: '%s': %v", value, err)
}
infra.clusterRoleARN = arn.String()
case "NodeRole":
arn, err := arn.Parse(value)
if err != nil {
return nil, fmt.Errorf("infrastructure stack NodeRole output is not a valid ARN: '%s': %v", value, err)
}
infra.nodeRoleARN = arn.String()
// Resource looks like 'role:/MyRole'
resourceParts := strings.Split(arn.Resource, "/")
infra.nodeRoleName = resourceParts[len(resourceParts)-1]
}
}
return &infra, nil
}