|
|
|
|
@ -30,35 +30,40 @@ func buildBlockDevices(b []BlockDevice) []*ec2.BlockDeviceMapping {
|
|
|
|
|
var blockDevices []*ec2.BlockDeviceMapping
|
|
|
|
|
|
|
|
|
|
for _, blockDevice := range b {
|
|
|
|
|
ebsBlockDevice := &ec2.EbsBlockDevice{
|
|
|
|
|
VolumeType: aws.String(blockDevice.VolumeType),
|
|
|
|
|
VolumeSize: aws.Int64(blockDevice.VolumeSize),
|
|
|
|
|
DeleteOnTermination: aws.Bool(blockDevice.DeleteOnTermination),
|
|
|
|
|
mapping := &ec2.BlockDeviceMapping {
|
|
|
|
|
DeviceName: aws.String(blockDevice.DeviceName),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// IOPS is only valid for SSD Volumes
|
|
|
|
|
if blockDevice.VolumeType != "" && blockDevice.VolumeType != "standard" && blockDevice.VolumeType != "gp2" {
|
|
|
|
|
ebsBlockDevice.Iops = aws.Int64(blockDevice.IOPS)
|
|
|
|
|
}
|
|
|
|
|
if blockDevice.NoDevice {
|
|
|
|
|
mapping.NoDevice = aws.String("")
|
|
|
|
|
} else if strings.HasPrefix(blockDevice.VirtualName, "ephemeral") {
|
|
|
|
|
mapping.VirtualName = aws.String(blockDevice.VirtualName)
|
|
|
|
|
} else {
|
|
|
|
|
ebsBlockDevice := &ec2.EbsBlockDevice{
|
|
|
|
|
DeleteOnTermination: aws.Bool(blockDevice.DeleteOnTermination),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// You cannot specify Encrypted if you specify a Snapshot ID
|
|
|
|
|
if blockDevice.SnapshotId != "" {
|
|
|
|
|
ebsBlockDevice.SnapshotId = aws.String(blockDevice.SnapshotId)
|
|
|
|
|
} else if blockDevice.Encrypted {
|
|
|
|
|
ebsBlockDevice.Encrypted = aws.Bool(blockDevice.Encrypted)
|
|
|
|
|
}
|
|
|
|
|
if blockDevice.VolumeType != "" {
|
|
|
|
|
ebsBlockDevice.VolumeType = aws.String(blockDevice.VolumeType)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mapping := &ec2.BlockDeviceMapping{
|
|
|
|
|
DeviceName: aws.String(blockDevice.DeviceName),
|
|
|
|
|
VirtualName: aws.String(blockDevice.VirtualName),
|
|
|
|
|
}
|
|
|
|
|
if blockDevice.VolumeSize > 0 {
|
|
|
|
|
ebsBlockDevice.VolumeSize = aws.Int64(blockDevice.VolumeSize)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if !strings.HasPrefix(blockDevice.VirtualName, "ephemeral") {
|
|
|
|
|
mapping.Ebs = ebsBlockDevice
|
|
|
|
|
}
|
|
|
|
|
// IOPS is only valid for io1 type
|
|
|
|
|
if blockDevice.VolumeType == "io1" {
|
|
|
|
|
ebsBlockDevice.Iops = aws.Int64(blockDevice.IOPS)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if blockDevice.NoDevice {
|
|
|
|
|
mapping.NoDevice = aws.String("")
|
|
|
|
|
// You cannot specify Encrypted if you specify a Snapshot ID
|
|
|
|
|
if blockDevice.SnapshotId != "" {
|
|
|
|
|
ebsBlockDevice.SnapshotId = aws.String(blockDevice.SnapshotId)
|
|
|
|
|
} else if blockDevice.Encrypted {
|
|
|
|
|
ebsBlockDevice.Encrypted = aws.Bool(blockDevice.Encrypted)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mapping.Ebs = ebsBlockDevice
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
blockDevices = append(blockDevices, mapping)
|
|
|
|
|
|