in pkg/cloudprovider/aws/launchtemplate.go [88:131]
func (p *LaunchTemplateProvider) Get(ctx context.Context, constraints *v1alpha1.Constraints, instanceTypes []cloudprovider.InstanceType, additionalLabels map[string]string) (map[string][]cloudprovider.InstanceType, error) {
// If Launch Template is directly specified then just use it
if constraints.LaunchTemplate != nil {
return map[string][]cloudprovider.InstanceType{ptr.StringValue(constraints.LaunchTemplate): instanceTypes}, nil
}
instanceProfile, err := p.getInstanceProfile(ctx, constraints)
if err != nil {
return nil, err
}
// Get constrained security groups
securityGroupsIds, err := p.securityGroupProvider.Get(ctx, constraints)
if err != nil {
return nil, err
}
// Get constrained AMI ID
amis, err := p.amiProvider.Get(ctx, instanceTypes)
if err != nil {
return nil, err
}
// Construct launch templates
launchTemplates := map[string][]cloudprovider.InstanceType{}
for amiID, instanceTypes := range amis {
// Get userData for Node
userData, err := p.getUserData(ctx, constraints, instanceTypes, additionalLabels)
if err != nil {
return nil, err
}
// Ensure the launch template exists, or create it
launchTemplate, err := p.ensureLaunchTemplate(ctx, &launchTemplateOptions{
UserData: userData,
ClusterName: injection.GetOptions(ctx).ClusterName,
InstanceProfile: instanceProfile,
AMIID: amiID,
SecurityGroupsIds: securityGroupsIds,
Tags: constraints.Tags,
MetadataOptions: constraints.GetMetadataOptions(),
})
if err != nil {
return nil, err
}
launchTemplates[aws.StringValue(launchTemplate.LaunchTemplateName)] = instanceTypes
}
return launchTemplates, nil
}