func()

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
}