From 9989845ada6e1ab7c6ec043d35a448b24ebc0a6c Mon Sep 17 00:00:00 2001 From: Adrien Delorme Date: Tue, 18 Jun 2019 12:49:54 +0200 Subject: [PATCH] add BuildEC2BlockDeviceMapping func to the BlockDevice type --- builder/amazon/common/block_device.go | 87 ++++++++++--------- .../common/step_run_spot_instance_test.go | 2 +- 2 files changed, 48 insertions(+), 41 deletions(-) diff --git a/builder/amazon/common/block_device.go b/builder/amazon/common/block_device.go index 058b01935..1390c9891 100644 --- a/builder/amazon/common/block_device.go +++ b/builder/amazon/common/block_device.go @@ -62,50 +62,57 @@ func (bds BlockDevices) BuildEC2BlockDeviceMappings() []*ec2.BlockDeviceMapping var blockDevices []*ec2.BlockDeviceMapping for _, blockDevice := range bds { - mapping := &ec2.BlockDeviceMapping{ - DeviceName: aws.String(blockDevice.DeviceName), - } + blockDevices = append(blockDevices, blockDevice.BuildEC2BlockDeviceMapping()) + } + return blockDevices +} + +func (blockDevice BlockDevice) BuildEC2BlockDeviceMapping() *ec2.BlockDeviceMapping { - if blockDevice.NoDevice { - mapping.NoDevice = aws.String("") - } else if blockDevice.VirtualName != "" { - if strings.HasPrefix(blockDevice.VirtualName, "ephemeral") { - mapping.VirtualName = aws.String(blockDevice.VirtualName) - } - } else { - ebsBlockDevice := &ec2.EbsBlockDevice{ - DeleteOnTermination: aws.Bool(blockDevice.DeleteOnTermination), - } - - if blockDevice.VolumeType != "" { - ebsBlockDevice.VolumeType = aws.String(blockDevice.VolumeType) - } - - if blockDevice.VolumeSize > 0 { - ebsBlockDevice.VolumeSize = aws.Int64(blockDevice.VolumeSize) - } - - // IOPS is only valid for io1 type - if blockDevice.VolumeType == "io1" { - ebsBlockDevice.Iops = aws.Int64(blockDevice.IOPS) - } - - // You cannot specify Encrypted if you specify a Snapshot ID - if blockDevice.SnapshotId != "" { - ebsBlockDevice.SnapshotId = aws.String(blockDevice.SnapshotId) - } - ebsBlockDevice.Encrypted = blockDevice.Encrypted - - if blockDevice.KmsKeyId != "" { - ebsBlockDevice.KmsKeyId = aws.String(blockDevice.KmsKeyId) - } - - mapping.Ebs = ebsBlockDevice + mapping := &ec2.BlockDeviceMapping{ + DeviceName: aws.String(blockDevice.DeviceName), + } + + if blockDevice.NoDevice { + mapping.NoDevice = aws.String("") + return mapping + } else if blockDevice.VirtualName != "" { + if strings.HasPrefix(blockDevice.VirtualName, "ephemeral") { + mapping.VirtualName = aws.String(blockDevice.VirtualName) } + return mapping + } - blockDevices = append(blockDevices, mapping) + ebsBlockDevice := &ec2.EbsBlockDevice{ + DeleteOnTermination: aws.Bool(blockDevice.DeleteOnTermination), } - return blockDevices + + if blockDevice.VolumeType != "" { + ebsBlockDevice.VolumeType = aws.String(blockDevice.VolumeType) + } + + if blockDevice.VolumeSize > 0 { + ebsBlockDevice.VolumeSize = aws.Int64(blockDevice.VolumeSize) + } + + // IOPS is only valid for io1 type + if blockDevice.VolumeType == "io1" { + ebsBlockDevice.Iops = aws.Int64(blockDevice.IOPS) + } + + // You cannot specify Encrypted if you specify a Snapshot ID + if blockDevice.SnapshotId != "" { + ebsBlockDevice.SnapshotId = aws.String(blockDevice.SnapshotId) + } + ebsBlockDevice.Encrypted = blockDevice.Encrypted + + if blockDevice.KmsKeyId != "" { + ebsBlockDevice.KmsKeyId = aws.String(blockDevice.KmsKeyId) + } + + mapping.Ebs = ebsBlockDevice + + return mapping } func (b *BlockDevice) Prepare(ctx *interpolate.Context) error { diff --git a/builder/amazon/common/step_run_spot_instance_test.go b/builder/amazon/common/step_run_spot_instance_test.go index d95706347..72639a050 100644 --- a/builder/amazon/common/step_run_spot_instance_test.go +++ b/builder/amazon/common/step_run_spot_instance_test.go @@ -71,7 +71,7 @@ func tStateSpot() multistep.StateBag { state.Put("ui", &packer.BasicUi{ Reader: new(bytes.Buffer), Writer: new(bytes.Buffer), - }) + }) state.Put("availability_zone", "us-east-1c") state.Put("securityGroupIds", []string{"sg-0b8984db72f213dc3"}) state.Put("subnet_id", "subnet-077fde4e")