diff --git a/pkg/model/awsmodel/autoscalinggroup.go b/pkg/model/awsmodel/autoscalinggroup.go index 27a089dca3..8bba986947 100644 --- a/pkg/model/awsmodel/autoscalinggroup.go +++ b/pkg/model/awsmodel/autoscalinggroup.go @@ -135,8 +135,12 @@ func (b *AutoscalingGroupModelBuilder) Build(c *fi.ModelBuilderContext) error { if x.Type == "" { x.Type = DefaultVolumeType } - if x.Iops == nil && x.Type == ec2.VolumeTypeIo1 { - x.Iops = fi.Int64(DefaultVolumeIops) + if x.Type == ec2.VolumeTypeIo1 { + if x.Iops == nil { + x.Iops = fi.Int64(DefaultVolumeIops) + } + } else { + x.Iops = nil } t.BlockDeviceMappings = append(t.BlockDeviceMappings, &awstasks.BlockDeviceMapping{ DeviceName: fi.String(x.Device), diff --git a/upup/pkg/fi/cloudup/awstasks/block_device_mappings.go b/upup/pkg/fi/cloudup/awstasks/block_device_mappings.go index ad7b8844ce..8e518781cf 100644 --- a/upup/pkg/fi/cloudup/awstasks/block_device_mappings.go +++ b/upup/pkg/fi/cloudup/awstasks/block_device_mappings.go @@ -51,6 +51,7 @@ func BlockDeviceMappingFromEC2(i *ec2.BlockDeviceMapping) (string, *BlockDeviceM if i.Ebs != nil { o.EbsDeleteOnTermination = i.Ebs.DeleteOnTermination o.EbsEncrypted = i.Ebs.Encrypted + o.EbsVolumeIops = i.Ebs.Iops o.EbsVolumeSize = i.Ebs.VolumeSize o.EbsVolumeType = i.Ebs.VolumeType } @@ -64,13 +65,16 @@ func (i *BlockDeviceMapping) ToEC2(deviceName string) *ec2.BlockDeviceMapping { DeviceName: aws.String(deviceName), VirtualName: i.VirtualName, } - if i.EbsDeleteOnTermination != nil || i.EbsVolumeSize != nil || i.EbsVolumeType != nil { + if i.EbsDeleteOnTermination != nil || i.EbsVolumeSize != nil || i.EbsVolumeType != nil || i.EbsVolumeIops != nil { o.Ebs = &ec2.EbsBlockDevice{ DeleteOnTermination: i.EbsDeleteOnTermination, Encrypted: i.EbsEncrypted, VolumeSize: i.EbsVolumeSize, VolumeType: i.EbsVolumeType, } + if fi.StringValue(o.Ebs.VolumeType) == ec2.VolumeTypeIo1 { + o.Ebs.Iops = i.EbsVolumeIops + } } return o @@ -87,6 +91,10 @@ func BlockDeviceMappingFromAutoscaling(i *autoscaling.BlockDeviceMapping) (strin o.EbsEncrypted = i.Ebs.Encrypted o.EbsVolumeSize = i.Ebs.VolumeSize o.EbsVolumeType = i.Ebs.VolumeType + + if fi.StringValue(o.EbsVolumeType) == ec2.VolumeTypeIo1 { + o.EbsVolumeIops = i.Ebs.Iops + } } return aws.StringValue(i.DeviceName), o @@ -106,6 +114,9 @@ func (i *BlockDeviceMapping) ToAutoscaling(deviceName string) *autoscaling.Block VolumeType: i.EbsVolumeType, Iops: i.EbsVolumeIops, } + if fi.StringValue(o.Ebs.VolumeType) == ec2.VolumeTypeIo1 { + o.Ebs.Iops = i.EbsVolumeIops + } } return o