diff --git a/assets/terraform/test/resource_addresses_test.go b/assets/terraform/test/resource_addresses_test.go index 60483b9a..8fb8d87c 100644 --- a/assets/terraform/test/resource_addresses_test.go +++ b/assets/terraform/test/resource_addresses_test.go @@ -367,3 +367,59 @@ func TestAccAddresses_Hierarchy(t *testing.T) { }, }) } + +const addresses_Multiple_Resources_Tmpl = ` +variable prefix { type = string } + +resource "panos_device_group" "parent" { + location = { panorama = {} } + + name = var.prefix +} + +resource "panos_addresses" "a" { + location = { device_group = { name = panos_device_group.parent.name } } + + addresses = { + "addr-1" = { + ip_netmask = "10.0.0.1/32" + }, + "addr-2" = { + ip_netmask = "10.1.0.1/32" + } + } +} + +resource "panos_addresses" "b" { + location = { device_group = { name = panos_device_group.parent.name } } + + addresses = { + "addr-3" = { + ip_netmask = "10.2.0.1/32" + }, + "addr-4" = { + ip_netmask = "10.3.0.1/32" + } + } +} +` + +func TestAccAddresses_MultipleResources(t *testing.T) { + t.Parallel() + + nameSuffix := acctest.RandStringFromCharSet(6, acctest.CharSetAlphaNum) + prefix := fmt.Sprintf("test-acc-%s", nameSuffix) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + ProtoV6ProviderFactories: testAccProviders, + Steps: []resource.TestStep{ + { + Config: addresses_Multiple_Resources_Tmpl, + ConfigVariables: map[string]config.Variable{ + "prefix": config.StringVariable(prefix), + }, + }, + }, + }) +} diff --git a/pkg/translate/terraform_provider/template.go b/pkg/translate/terraform_provider/template.go index 81b193a0..b9cb1750 100644 --- a/pkg/translate/terraform_provider/template.go +++ b/pkg/translate/terraform_provider/template.go @@ -830,6 +830,7 @@ for name, elt := range elements { entry.Name = name entries = append(entries, entry) } + {{- else if or (eq .PluralType "list") (eq .PluralType "set") }} var elements []{{ $resourceTFStructName }} resp.Diagnostics.Append(state.{{ .ListAttribute.CamelCase }}.ElementsAs(ctx, &elements, false)...) @@ -865,8 +866,17 @@ if err != nil { } {{- if eq .PluralType "map" }} +entriesByName := make(map[string]*{{ $resourceSDKStructName }}) +for _, elt := range entries { + entriesByName[elt.EntryName()] = elt +} + objects := make(map[string]{{ $resourceTFStructName }}) for _, elt := range readEntries { + if _, found := entriesByName[elt.EntryName()]; !found { + continue + } + var object {{ $resourceTFStructName }} object.name = elt.Name resp.Diagnostics.Append(object.CopyFromPango(ctx, o.client, nil, elt, ev)...)