diff --git a/builder/amazon/chroot/block_device.go b/builder/amazon/chroot/block_device.go deleted file mode 100644 index 7920273e8..000000000 --- a/builder/amazon/chroot/block_device.go +++ /dev/null @@ -1,69 +0,0 @@ -//go:generate struct-markdown - -package chroot - -import ( - "fmt" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/ec2" - awscommon "github.com/hashicorp/packer/builder/amazon/common" - "github.com/hashicorp/packer/template/interpolate" -) - -type BlockDevice struct { - awscommon.BlockDevice `mapstructure:",squash"` - // ID, alias or ARN of the KMS key to use for boot volume encryption. This - // only applies to the main region, other regions where the AMI will be - // copied will be encrypted by the default EBS KMS key. For valid formats - // see KmsKeyId in the [AWS API docs - - // CopyImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CopyImage.html) - // This field is validated by Packer, when using an alias, you will have to - // prefix kms_key_id with alias/. - KmsKeyId string `mapstructure:"kms_key_id" required:"false"` -} - -type BlockDevices []BlockDevice - -func (bds BlockDevices) BuildEC2BlockDeviceMappings() []*ec2.BlockDeviceMapping { - var blockDevices []*ec2.BlockDeviceMapping - - for _, blockDevice := range bds { - blockDevices = append(blockDevices, blockDevice.BuildEC2BlockDeviceMapping()) - } - return blockDevices -} - -func (blockDevice BlockDevice) BuildEC2BlockDeviceMapping() *ec2.BlockDeviceMapping { - mapping := blockDevice.BlockDevice.BuildEC2BlockDeviceMapping() - - if blockDevice.KmsKeyId != "" { - mapping.Ebs.KmsKeyId = aws.String(blockDevice.KmsKeyId) - } - return mapping -} - -func (b *BlockDevice) Prepare(ctx *interpolate.Context) error { - err := b.BlockDevice.Prepare(ctx) - if err != nil { - return err - } - - // Warn that encrypted must be true when setting kms_key_id - if b.KmsKeyId != "" && b.Encrypted.True() { - return fmt.Errorf("The device %v, must also have `encrypted: "+ - "true` when setting a kms_key_id.", b.DeviceName) - } - - _, err = interpolate.RenderInterface(&b, ctx) - return err -} - -func (bds BlockDevices) Prepare(ctx *interpolate.Context) (errs []error) { - for _, block := range bds { - if err := block.Prepare(ctx); err != nil { - errs = append(errs, err) - } - } - return errs -} diff --git a/builder/amazon/chroot/builder.go b/builder/amazon/chroot/builder.go index f51ae9255..2277fa38c 100644 --- a/builder/amazon/chroot/builder.go +++ b/builder/amazon/chroot/builder.go @@ -1,4 +1,5 @@ //go:generate struct-markdown +//go:generate mapstructure-to-hcl2 -type Config,BlockDevices,BlockDevice // The chroot package is able to create an Amazon AMI without requiring the // launch of a new instance for every build. It does this by attaching and @@ -37,7 +38,7 @@ type Config struct { // entry for your root volume, `root_volume_size` and `root_device_name`. // See the [BlockDevices](#block-devices-configuration) documentation for // fields. - AMIMappings BlockDevices `mapstructure:"ami_block_device_mappings" required:"false"` + AMIMappings awscommon.BlockDevices `mapstructure:"ami_block_device_mappings" hcl2-schema-generator:"ami_block_device_mappings,direct" required:"false"` // This is a list of devices to mount into the chroot environment. This // configuration parameter requires some additional documentation which is // in the Chroot Mounts section. Please read that section for more diff --git a/builder/amazon/chroot/step_register_ami_test.go b/builder/amazon/chroot/step_register_ami_test.go index a6a64b8fc..72922c7e6 100644 --- a/builder/amazon/chroot/step_register_ami_test.go +++ b/builder/amazon/chroot/step_register_ami_test.go @@ -92,10 +92,10 @@ func TestStepRegisterAmi_buildRegisterOptsFromScratch(t *testing.T) { config := Config{ FromScratch: true, PackerConfig: common.PackerConfig{}, - AMIMappings: []BlockDevice{ - {BlockDevice: amazon.BlockDevice{ + AMIMappings: []amazon.BlockDevice{ + amazon.BlockDevice{ DeviceName: rootDeviceName, - }}, + }, }, RootDeviceName: rootDeviceName, } @@ -167,10 +167,10 @@ func TestStepRegisterAmi_buildRegisterOptFromExistingImageWithBlockDeviceMapping config := Config{ FromScratch: false, PackerConfig: common.PackerConfig{}, - AMIMappings: []BlockDevice{ - {BlockDevice: amazon.BlockDevice{ + AMIMappings: []amazon.BlockDevice{ + amazon.BlockDevice{ DeviceName: rootDeviceName, - }}, + }, }, RootDeviceName: rootDeviceName, }