From 68ddb2f89d898a2a52e44dac02d82383fa440455 Mon Sep 17 00:00:00 2001 From: Lucas Bajolet <105649352+lbajolet-hashicorp@users.noreply.github.com> Date: Thu, 27 Oct 2022 18:09:40 -0400 Subject: [PATCH] hcl2_upgrade: add share_image_gallery workaround (#12087) In azure templates, the shared_image_gallery was mistakenly considered an attribute while this is supposed to be a block. This is due to a heuristic we use for deciding whether a JSON object is to be translated to an attribute or a block that fell short as the shared_image_gallery does not contain complex types. This cannot be fixed trivially for the general case, so we add this entity to the list of workarounds until we can implement something more robust. --- command/exec_test.go | 1 + command/hcl2_upgrade.go | 2 +- command/hcl2_upgrade_test.go | 1 + .../hcl2_upgrade/azure_shg/expected.pkr.hcl | 11 +++++++++++ .../test-fixtures/hcl2_upgrade/azure_shg/input.json | 8 ++++++++ 5 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 command/test-fixtures/hcl2_upgrade/azure_shg/expected.pkr.hcl create mode 100644 command/test-fixtures/hcl2_upgrade/azure_shg/input.json diff --git a/command/exec_test.go b/command/exec_test.go index f85849d45..7a13201f3 100644 --- a/command/exec_test.go +++ b/command/exec_test.go @@ -121,6 +121,7 @@ func getBareComponentFinder() packer.ComponentFinder { "file": func() (packersdk.Builder, error) { return &file.Builder{}, nil }, "null": func() (packersdk.Builder, error) { return &null.Builder{}, nil }, "amazon-ebs": func() (packersdk.Builder, error) { return &ebs.Builder{}, nil }, + "azure-arm": func() (packersdk.Builder, error) { return &ebs.Builder{}, nil }, }, Provisioners: packer.MapOfProvisioner{ "shell-local": func() (packersdk.Provisioner, error) { return &shell_local.Provisioner{}, nil }, diff --git a/command/hcl2_upgrade.go b/command/hcl2_upgrade.go index 5856df8f7..2c04f01a0 100644 --- a/command/hcl2_upgrade.go +++ b/command/hcl2_upgrade.go @@ -637,7 +637,7 @@ func jsonBodyToHCL2Body(out *hclwrite.Body, kvs map[string]interface{}) { case map[string]interface{}: var mostComplexElem interface{} for _, randomElem := range value { - if k == "linux_options" || k == "network_interface" { + if k == "linux_options" || k == "network_interface" || k == "shared_image_gallery" { break } // HACK: we take the most complex element of that map because diff --git a/command/hcl2_upgrade_test.go b/command/hcl2_upgrade_test.go index 101b5b528..598ae4a3f 100644 --- a/command/hcl2_upgrade_test.go +++ b/command/hcl2_upgrade_test.go @@ -32,6 +32,7 @@ func Test_hcl2_upgrade(t *testing.T) { {folder: "nonexistent", flags: []string{}, exitCode: 1, exitEarly: true}, {folder: "placeholders", flags: []string{}, exitCode: 0}, {folder: "ami_test", flags: []string{}, exitCode: 0}, + {folder: "azure_shg", flags: []string{}, exitCode: 0}, } for _, tc := range tc { diff --git a/command/test-fixtures/hcl2_upgrade/azure_shg/expected.pkr.hcl b/command/test-fixtures/hcl2_upgrade/azure_shg/expected.pkr.hcl new file mode 100644 index 000000000..089ce80a7 --- /dev/null +++ b/command/test-fixtures/hcl2_upgrade/azure_shg/expected.pkr.hcl @@ -0,0 +1,11 @@ + +source "azure-arm" "autogenerated_1" { + shared_image_gallery { + gallery_name = "web_app" + } +} + +build { + sources = ["source.azure-arm.autogenerated_1"] + +} diff --git a/command/test-fixtures/hcl2_upgrade/azure_shg/input.json b/command/test-fixtures/hcl2_upgrade/azure_shg/input.json new file mode 100644 index 000000000..02f89bf95 --- /dev/null +++ b/command/test-fixtures/hcl2_upgrade/azure_shg/input.json @@ -0,0 +1,8 @@ +{ + "builders": [{ + "type": "azure-arm", + "shared_image_gallery": { + "gallery_name": "web_app" + } + }] +}