diff --git a/builder/amazon/common/block_device.go b/builder/amazon/common/block_device.go index 482b876f6..fb14a66ae 100644 --- a/builder/amazon/common/block_device.go +++ b/builder/amazon/common/block_device.go @@ -1,6 +1,8 @@ package common import ( + "strings" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ec2" "github.com/mitchellh/packer/template/interpolate" @@ -47,11 +49,14 @@ func buildBlockDevices(b []BlockDevice) []*ec2.BlockDeviceMapping { } mapping := &ec2.BlockDeviceMapping{ - EBS: ebsBlockDevice, DeviceName: aws.String(blockDevice.DeviceName), VirtualName: aws.String(blockDevice.VirtualName), } + if !strings.HasPrefix(blockDevice.VirtualName, "ephemeral") { + mapping.EBS = ebsBlockDevice + } + if blockDevice.NoDevice { mapping.NoDevice = aws.String("") } diff --git a/builder/amazon/common/block_device_test.go b/builder/amazon/common/block_device_test.go index 063c480f1..c69ef2efb 100644 --- a/builder/amazon/common/block_device_test.go +++ b/builder/amazon/common/block_device_test.go @@ -17,17 +17,15 @@ func TestBlockDevice(t *testing.T) { { Config: &BlockDevice{ DeviceName: "/dev/sdb", - VirtualName: "ephemeral0", SnapshotId: "snap-1234", VolumeType: "standard", VolumeSize: 8, DeleteOnTermination: true, - IOPS: 1000, }, Result: &ec2.BlockDeviceMapping{ DeviceName: aws.String("/dev/sdb"), - VirtualName: aws.String("ephemeral0"), + VirtualName: aws.String(""), EBS: &ec2.EBSBlockDevice{ SnapshotID: aws.String("snap-1234"), VolumeType: aws.String("standard"), @@ -55,7 +53,6 @@ func TestBlockDevice(t *testing.T) { { Config: &BlockDevice{ DeviceName: "/dev/sdb", - VirtualName: "ephemeral0", VolumeType: "io1", VolumeSize: 8, DeleteOnTermination: true, @@ -64,7 +61,7 @@ func TestBlockDevice(t *testing.T) { Result: &ec2.BlockDeviceMapping{ DeviceName: aws.String("/dev/sdb"), - VirtualName: aws.String("ephemeral0"), + VirtualName: aws.String(""), EBS: &ec2.EBSBlockDevice{ VolumeType: aws.String("io1"), VolumeSize: aws.Long(8), @@ -73,6 +70,17 @@ func TestBlockDevice(t *testing.T) { }, }, }, + { + Config: &BlockDevice{ + DeviceName: "/dev/sdb", + VirtualName: "ephemeral0", + }, + + Result: &ec2.BlockDeviceMapping{ + DeviceName: aws.String("/dev/sdb"), + VirtualName: aws.String("ephemeral0"), + }, + }, } for _, tc := range cases { @@ -84,11 +92,14 @@ func TestBlockDevice(t *testing.T) { expected := []*ec2.BlockDeviceMapping{tc.Result} got := blockDevices.BuildAMIDevices() if !reflect.DeepEqual(expected, got) { - t.Fatalf("Bad block device, \nexpected: %s\n\ngot: %s", awsutil.StringValue(expected), awsutil.StringValue(got)) + t.Fatalf("Bad block device, \nexpected: %s\n\ngot: %s", + awsutil.StringValue(expected), awsutil.StringValue(got)) } if !reflect.DeepEqual(expected, blockDevices.BuildLaunchDevices()) { - t.Fatalf("Bad block device, \nexpected: %s\n\ngot: %s", awsutil.StringValue(expected), awsutil.StringValue(blockDevices.BuildLaunchDevices())) + t.Fatalf("Bad block device, \nexpected: %s\n\ngot: %s", + awsutil.StringValue(expected), + awsutil.StringValue(blockDevices.BuildLaunchDevices())) } } }