From 01a55812ac3e1d75f0786e0839ae8b787d5b0c9b Mon Sep 17 00:00:00 2001 From: John Gardiner Myers Date: Tue, 11 May 2021 13:21:10 -0700 Subject: [PATCH] Refactor LaunchTemplate.RootVolumeType --- pkg/model/awsmodel/autoscalinggroup.go | 57 +++++++++++--------------- 1 file changed, 25 insertions(+), 32 deletions(-) diff --git a/pkg/model/awsmodel/autoscalinggroup.go b/pkg/model/awsmodel/autoscalinggroup.go index 51b492b7fa..a4b930bad0 100644 --- a/pkg/model/awsmodel/autoscalinggroup.go +++ b/pkg/model/awsmodel/autoscalinggroup.go @@ -36,8 +36,6 @@ import ( const ( // DefaultVolumeType is the default volume type DefaultVolumeType = ec2.VolumeTypeGp3 - // DefaultLegacyVolumeType is the default volume type when using LaunchConfigurations - DefaultLegacyVolumeType = ec2.VolumeTypeGp2 // DefaultVolumeIonIops is the default volume IOPS when volume type is io1 or io2 DefaultVolumeIonIops = 100 // DefaultVolumeGp3Iops is the default volume IOPS when volume type is gp3 @@ -141,6 +139,11 @@ func (b *AutoscalingGroupModelBuilder) buildLaunchTemplateTask(c *fi.ModelBuilde return nil, fmt.Errorf("unable to find IAM profile link for instance group %q: %w", ig.ObjectMeta.Name, err) } + rootVolumeType := fi.StringValue(ig.Spec.RootVolumeType) + if rootVolumeType == "" { + rootVolumeType = DefaultVolumeType + } + tags, err := b.CloudTagsForInstanceGroup(ig) if err != nil { return nil, fmt.Errorf("error building cloud tags: %v", err) @@ -160,7 +163,7 @@ func (b *AutoscalingGroupModelBuilder) buildLaunchTemplateTask(c *fi.ModelBuilde RootVolumeOptimization: lc.RootVolumeOptimization, RootVolumeSize: lc.RootVolumeSize, RootVolumeIops: lc.RootVolumeIops, - RootVolumeType: lc.RootVolumeType, + RootVolumeType: fi.String(rootVolumeType), RootVolumeEncryption: lc.RootVolumeEncryption, SSHKey: lc.SSHKey, SecurityGroups: lc.SecurityGroups, @@ -236,6 +239,25 @@ func (b *AutoscalingGroupModelBuilder) buildLaunchTemplateTask(c *fi.ModelBuilde lt.HTTPTokens = ig.Spec.InstanceMetadata.HTTPTokens } + if rootVolumeType == ec2.VolumeTypeIo1 || rootVolumeType == ec2.VolumeTypeIo2 { + if fi.Int32Value(ig.Spec.RootVolumeIops) < 100 { + lt.RootVolumeIops = fi.Int64(int64(DefaultVolumeIonIops)) + } else { + lt.RootVolumeIops = fi.Int64(int64(fi.Int32Value(ig.Spec.RootVolumeIops))) + } + } else if rootVolumeType == ec2.VolumeTypeGp3 { + if fi.Int32Value(ig.Spec.RootVolumeIops) < 3000 { + lt.RootVolumeIops = fi.Int64(int64(DefaultVolumeGp3Iops)) + } else { + lt.RootVolumeIops = fi.Int64(int64(fi.Int32Value(ig.Spec.RootVolumeIops))) + } + if fi.Int32Value(ig.Spec.RootVolumeThroughput) < 125 { + lt.RootVolumeThroughput = fi.Int64(int64(DefaultVolumeGp3Throughput)) + } else { + lt.RootVolumeThroughput = fi.Int64(int64(fi.Int32Value(ig.Spec.RootVolumeThroughput))) + } + } + // When using a MixedInstances ASG, AWS requires the SpotPrice be defined on the ASG // rather than the LaunchTemplate or else it returns this error: // You cannot use a launch template that is set to request Spot Instances (InstanceMarketOptions) @@ -253,21 +275,6 @@ func (b *AutoscalingGroupModelBuilder) buildLaunchTemplateTask(c *fi.ModelBuilde } else { lt.RootVolumeKmsKey = fi.String("") } - if fi.StringValue(ig.Spec.RootVolumeType) == "" { - lt.RootVolumeType = fi.String(DefaultVolumeType) - } - if fi.StringValue(lt.RootVolumeType) == ec2.VolumeTypeGp3 { - if fi.Int32Value(ig.Spec.RootVolumeIops) < 3000 { - lt.RootVolumeIops = fi.Int64(int64(DefaultVolumeGp3Iops)) - } else { - lt.RootVolumeIops = fi.Int64(int64(fi.Int32Value(ig.Spec.RootVolumeIops))) - } - if fi.Int32Value(ig.Spec.RootVolumeThroughput) < 125 { - lt.RootVolumeThroughput = fi.Int64(int64(DefaultVolumeGp3Throughput)) - } else { - lt.RootVolumeThroughput = fi.Int64(int64(fi.Int32Value(ig.Spec.RootVolumeThroughput))) - } - } return lt, nil } @@ -283,11 +290,6 @@ func (b *AutoscalingGroupModelBuilder) buildLaunchTemplateHelper(c *fi.ModelBuil volumeSize = fi.Int32Value(ig.Spec.RootVolumeSize) } - volumeType := fi.StringValue(ig.Spec.RootVolumeType) - if volumeType == "" { - volumeType = DefaultLegacyVolumeType - } - rootVolumeEncryption := DefaultVolumeEncryption if ig.Spec.RootVolumeEncryption != nil { rootVolumeEncryption = fi.BoolValue(ig.Spec.RootVolumeEncryption) @@ -309,7 +311,6 @@ func (b *AutoscalingGroupModelBuilder) buildLaunchTemplateHelper(c *fi.ModelBuil Lifecycle: b.Lifecycle, RootVolumeOptimization: ig.Spec.RootVolumeOptimization, RootVolumeSize: fi.Int64(int64(volumeSize)), - RootVolumeType: fi.String(volumeType), RootVolumeEncryption: fi.Bool(rootVolumeEncryption), SecurityGroups: []*awstasks.SecurityGroup{sgLink}, } @@ -330,14 +331,6 @@ func (b *AutoscalingGroupModelBuilder) buildLaunchTemplateHelper(c *fi.ModelBuil } } - if volumeType == ec2.VolumeTypeIo1 || volumeType == ec2.VolumeTypeIo2 { - if fi.Int32Value(ig.Spec.RootVolumeIops) < 100 { - t.RootVolumeIops = fi.Int64(int64(DefaultVolumeIonIops)) - } else { - t.RootVolumeIops = fi.Int64(int64(fi.Int32Value(ig.Spec.RootVolumeIops))) - } - } - if ig.Spec.Tenancy != "" { t.Tenancy = fi.String(ig.Spec.Tenancy) }