From 135e0d0ff0225213883584e1f6c01184d37b7c83 Mon Sep 17 00:00:00 2001 From: Vladimir Lazarenko Date: Tue, 2 Mar 2021 10:52:33 +0100 Subject: [PATCH 1/5] dns_zone: Compute resourceId from the parser, add state migration --- .../services/dns/dns_zone_resource.go | 11 +- .../dns/migration/dns_zone_V0_to_V1.go | 137 ++++++++++++++++++ 2 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go diff --git a/azurerm/internal/services/dns/dns_zone_resource.go b/azurerm/internal/services/dns/dns_zone_resource.go index 1ef11f51ad4b..ba5e10c247ba 100644 --- a/azurerm/internal/services/dns/dns_zone_resource.go +++ b/azurerm/internal/services/dns/dns_zone_resource.go @@ -12,6 +12,7 @@ import ( "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/dns/migration" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/dns/parse" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/dns/validate" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tags" @@ -27,6 +28,11 @@ func resourceDnsZone() *schema.Resource { Update: resourceDnsZoneCreateUpdate, Delete: resourceDnsZoneDelete, + SchemaVersion: 1, + StateUpgraders: []schema.StateUpgrader{ + migration.DnsZoneV0ToV1(), + }, + Timeouts: &schema.ResourceTimeout{ Create: schema.DefaultTimeout(30 * time.Minute), Read: schema.DefaultTimeout(5 * time.Minute), @@ -144,12 +150,15 @@ func resourceDnsZone() *schema.Resource { func resourceDnsZoneCreateUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*clients.Client).Dns.ZonesClient recordSetsClient := meta.(*clients.Client).Dns.RecordSetsClient + subscriptionId := meta.(*clients.Client).Account.SubscriptionId ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) defer cancel() name := d.Get("name").(string) resGroup := d.Get("resource_group_name").(string) + resourceId := parse.NewDnsZoneID(subscriptionId, resGroup, name) + if d.IsNewResource() { existing, err := client.Get(ctx, resGroup, name) if err != nil { @@ -205,7 +214,7 @@ func resourceDnsZoneCreateUpdate(d *schema.ResourceData, meta interface{}) error return fmt.Errorf("Cannot read DNS Zone %q (Resource Group %q) ID", name, resGroup) } - d.SetId(*resp.ID) + d.SetId(resourceId.ID()) return resourceDnsZoneRead(d, meta) } diff --git a/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go b/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go new file mode 100644 index 000000000000..71ee0f8fbd48 --- /dev/null +++ b/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go @@ -0,0 +1,137 @@ +package migration + +import ( + "github.com/hashicorp/terraform-plugin-sdk/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/helper/validation" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/dns/parse" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/dns/validate" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tags" + "log" +) + +func DnsZoneV0ToV1() schema.StateUpgrader { + return schema.StateUpgrader{ + Version: 0, + Type: DnsZoneV0Schema().CoreConfigSchema().ImpliedType(), + Upgrade: DnsZoneUpgradeV0ToV1, + } +} + +func DnsZoneV0Schema() *schema.Resource { + return &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + + "resource_group_name": azure.SchemaResourceGroupNameDiffSuppress(), + + "number_of_record_sets": { + Type: schema.TypeInt, + Computed: true, + }, + + "max_number_of_record_sets": { + Type: schema.TypeInt, + Computed: true, + }, + + "name_servers": { + Type: schema.TypeSet, + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, + }, + + "soa_record": { + Type: schema.TypeList, + MaxItems: 1, + Optional: true, + Computed: true, + ForceNew: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "email": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validate.DnsZoneSOARecordEmail, + }, + + "host_name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "expire_time": { + Type: schema.TypeInt, + Optional: true, + Default: 2419200, + ValidateFunc: validation.IntAtLeast(0), + }, + + "minimum_ttl": { + Type: schema.TypeInt, + Optional: true, + Default: 300, + ValidateFunc: validation.IntAtLeast(0), + }, + + "refresh_time": { + Type: schema.TypeInt, + Optional: true, + Default: 3600, + ValidateFunc: validation.IntAtLeast(0), + }, + + "retry_time": { + Type: schema.TypeInt, + Optional: true, + Default: 300, + ValidateFunc: validation.IntAtLeast(0), + }, + + "serial_number": { + Type: schema.TypeInt, + Optional: true, + Default: 1, + ValidateFunc: validation.IntAtLeast(0), + }, + + "ttl": { + Type: schema.TypeInt, + Optional: true, + Default: 3600, + ValidateFunc: validation.IntBetween(0, 2147483647), + }, + + "tags": tags.Schema(), + + "fqdn": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + + "tags": tags.Schema(), + }, + } +} + +func DnsZoneUpgradeV0ToV1(rawState map[string]interface{}, meta interface{}) (map[string]interface{}, error) { + oldId := rawState["id"].(string) + id, err := parse.DnsZoneID(oldId) + if err != nil { + return rawState, err + } + + newId := id.ID() + log.Printf("Updating `id` from %q to %q", oldId, newId) + rawState["id"] = newId + return rawState, nil +} From 822d7a10f16919cedbd4b3ceb5f9764dd3a9151a Mon Sep 17 00:00:00 2001 From: Vladimir Lazarenko Date: Tue, 2 Mar 2021 11:14:55 +0100 Subject: [PATCH 2/5] dns_zone: Compute resourceId from the parser, add state migration --- azurerm/internal/services/dns/dns_zone_data_source.go | 6 +++++- .../internal/services/dns/migration/dns_zone_V0_to_V1.go | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/azurerm/internal/services/dns/dns_zone_data_source.go b/azurerm/internal/services/dns/dns_zone_data_source.go index a7b6ab6ad54a..6256f35fef14 100644 --- a/azurerm/internal/services/dns/dns_zone_data_source.go +++ b/azurerm/internal/services/dns/dns_zone_data_source.go @@ -93,7 +93,11 @@ func dataSourceDnsZoneRead(d *schema.ResourceData, meta interface{}) error { if resp.ID == nil || *resp.ID == "" { return fmt.Errorf("failed reading ID for DNS Zone %q (Resource Group %q)", name, resourceGroup) } - d.SetId(*resp.ID) + resourceId, err := parse.DnsZoneID(*resp.ID) + if err != nil { + return fmt.Errorf("Error parsing DNS Zone ID %q", *resp.ID) + } + d.SetId(resourceId.ID()) d.Set("name", name) d.Set("resource_group_name", resourceGroup) diff --git a/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go b/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go index 71ee0f8fbd48..a6a059e61eb6 100644 --- a/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go +++ b/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go @@ -130,7 +130,7 @@ func DnsZoneUpgradeV0ToV1(rawState map[string]interface{}, meta interface{}) (ma return rawState, err } - newId := id.ID() + newId := parse.NewDnsZoneID(id.SubscriptionId, rawState["resource_group_name"].(string), rawState["name"].(string)).ID() log.Printf("Updating `id` from %q to %q", oldId, newId) rawState["id"] = newId return rawState, nil From f0bfd6dbe677932de114971f45da9a046492fb0a Mon Sep 17 00:00:00 2001 From: Vladimir Lazarenko Date: Tue, 2 Mar 2021 11:46:54 +0100 Subject: [PATCH 3/5] dns_zone: fetch RG name from RG client in migration --- .../services/dns/migration/dns_zone_V0_to_V1.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go b/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go index a6a059e61eb6..787c8b7fcf9e 100644 --- a/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go +++ b/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go @@ -1,9 +1,12 @@ package migration import ( + "context" + "fmt" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/helper/validation" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/dns/parse" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/dns/validate" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tags" @@ -124,13 +127,23 @@ func DnsZoneV0Schema() *schema.Resource { } func DnsZoneUpgradeV0ToV1(rawState map[string]interface{}, meta interface{}) (map[string]interface{}, error) { + ctx := context.TODO() + groupsClient := meta.(*clients.Client).Resource.GroupsClient oldId := rawState["id"].(string) id, err := parse.DnsZoneID(oldId) if err != nil { return rawState, err } - - newId := parse.NewDnsZoneID(id.SubscriptionId, rawState["resource_group_name"].(string), rawState["name"].(string)).ID() + resGroup, err := groupsClient.Get(ctx, id.ResourceGroup) + if err != nil { + return rawState, err + } + if resGroup.Name == nil { + return rawState, fmt.Errorf("`name` was nil for Resource Group %q", id.ResourceGroup) + } + resourceGroup := *resGroup.Name + name := rawState["name"].(string) + newId := parse.NewDnsZoneID(id.SubscriptionId, resourceGroup, name).ID() log.Printf("Updating `id` from %q to %q", oldId, newId) rawState["id"] = newId return rawState, nil From 3f6684d5ad752e2e71bd45bdaa2e0bd4e5a45d9a Mon Sep 17 00:00:00 2001 From: Vladimir Lazarenko Date: Tue, 2 Mar 2021 12:13:44 +0100 Subject: [PATCH 4/5] Switch the rest of the resources to generated IDs in CreateUpdate --- .../internal/services/dns/dns_a_record_resource.go | 11 +++++------ .../internal/services/dns/dns_aaaa_record_resource.go | 11 +++++------ .../internal/services/dns/dns_caa_record_resource.go | 11 +++++------ .../services/dns/dns_cname_record_resource.go | 11 +++++------ .../internal/services/dns/dns_mx_record_resource.go | 11 +++++------ .../internal/services/dns/dns_ns_record_resource.go | 11 +++++------ .../internal/services/dns/dns_ptr_record_resource.go | 11 +++++------ .../internal/services/dns/dns_srv_record_resource.go | 11 +++++------ .../internal/services/dns/dns_txt_record_resource.go | 11 +++++------ azurerm/internal/services/dns/dns_zone_resource.go | 6 +----- .../services/dns/migration/dns_zone_V0_to_V1.go | 3 ++- 11 files changed, 48 insertions(+), 60 deletions(-) diff --git a/azurerm/internal/services/dns/dns_a_record_resource.go b/azurerm/internal/services/dns/dns_a_record_resource.go index 546d551cd8a3..1d4de06e7ec5 100644 --- a/azurerm/internal/services/dns/dns_a_record_resource.go +++ b/azurerm/internal/services/dns/dns_a_record_resource.go @@ -84,12 +84,15 @@ func resourceDnsARecord() *schema.Resource { func resourceDnsARecordCreateUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*clients.Client).Dns.RecordSetsClient ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) + subscriptionId := meta.(*clients.Client).Account.SubscriptionId defer cancel() name := d.Get("name").(string) resGroup := d.Get("resource_group_name").(string) zoneName := d.Get("zone_name").(string) + resourceId := parse.NewARecordID(subscriptionId, resGroup, zoneName, name) + if d.IsNewResource() { existing, err := client.Get(ctx, resGroup, zoneName, name, dns.A) if err != nil { @@ -133,16 +136,12 @@ func resourceDnsARecordCreateUpdate(d *schema.ResourceData, meta interface{}) er return fmt.Errorf("Error creating/updating DNS A Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - resp, err := client.Get(ctx, resGroup, zoneName, name, dns.A) + _, err := client.Get(ctx, resGroup, zoneName, name, dns.A) if err != nil { return fmt.Errorf("Error retrieving DNS A Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - if resp.ID == nil { - return fmt.Errorf("Error retrieving DNS A Record %q (Zone %q / Resource Group %q): ID was nil", name, zoneName, resGroup) - } - - d.SetId(*resp.ID) + d.SetId(resourceId.ID()) return resourceDnsARecordRead(d, meta) } diff --git a/azurerm/internal/services/dns/dns_aaaa_record_resource.go b/azurerm/internal/services/dns/dns_aaaa_record_resource.go index 54a805c9bd6c..eaa86d619942 100644 --- a/azurerm/internal/services/dns/dns_aaaa_record_resource.go +++ b/azurerm/internal/services/dns/dns_aaaa_record_resource.go @@ -88,12 +88,15 @@ func resourceDnsAAAARecord() *schema.Resource { func resourceDnsAaaaRecordCreateUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*clients.Client).Dns.RecordSetsClient ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) + subscriptionId := meta.(*clients.Client).Account.SubscriptionId defer cancel() name := d.Get("name").(string) resGroup := d.Get("resource_group_name").(string) zoneName := d.Get("zone_name").(string) + resourceId := parse.NewAaaaRecordID(subscriptionId, resGroup, zoneName, name) + if d.IsNewResource() { existing, err := client.Get(ctx, resGroup, zoneName, name, dns.AAAA) if err != nil { @@ -137,16 +140,12 @@ func resourceDnsAaaaRecordCreateUpdate(d *schema.ResourceData, meta interface{}) return fmt.Errorf("Error creating/updating DNS AAAA Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - resp, err := client.Get(ctx, resGroup, zoneName, name, dns.AAAA) + _, err := client.Get(ctx, resGroup, zoneName, name, dns.AAAA) if err != nil { return fmt.Errorf("Error retrieving DNS AAAA Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - if resp.ID == nil { - return fmt.Errorf("Error retrieving DNS AAAA Record %q (Zone %q / Resource Group %q): ID was nil", name, zoneName, resGroup) - } - - d.SetId(*resp.ID) + d.SetId(resourceId.ID()) return resourceDnsAaaaRecordRead(d, meta) } diff --git a/azurerm/internal/services/dns/dns_caa_record_resource.go b/azurerm/internal/services/dns/dns_caa_record_resource.go index 5ca34c7984ab..01f039c1668f 100644 --- a/azurerm/internal/services/dns/dns_caa_record_resource.go +++ b/azurerm/internal/services/dns/dns_caa_record_resource.go @@ -101,12 +101,15 @@ func resourceDnsCaaRecord() *schema.Resource { func resourceDnsCaaRecordCreateUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*clients.Client).Dns.RecordSetsClient ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) + subscriptionId := meta.(*clients.Client).Account.SubscriptionId defer cancel() name := d.Get("name").(string) resGroup := d.Get("resource_group_name").(string) zoneName := d.Get("zone_name").(string) + resourceId := parse.NewCaaRecordID(subscriptionId, resGroup, zoneName, name) + if d.IsNewResource() { existing, err := client.Get(ctx, resGroup, zoneName, name, dns.CAA) if err != nil { @@ -138,16 +141,12 @@ func resourceDnsCaaRecordCreateUpdate(d *schema.ResourceData, meta interface{}) return fmt.Errorf("Error creating/updating DNS CAA Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - resp, err := client.Get(ctx, resGroup, zoneName, name, dns.CAA) + _, err := client.Get(ctx, resGroup, zoneName, name, dns.CAA) if err != nil { return fmt.Errorf("Error retrieving DNS CAA Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - if resp.ID == nil { - return fmt.Errorf("Cannot read DNS CAA Record %s (resource group %s) ID", name, resGroup) - } - - d.SetId(*resp.ID) + d.SetId(resourceId.ID()) return resourceDnsCaaRecordRead(d, meta) } diff --git a/azurerm/internal/services/dns/dns_cname_record_resource.go b/azurerm/internal/services/dns/dns_cname_record_resource.go index e6c24c58ecce..b96ee27cdc82 100644 --- a/azurerm/internal/services/dns/dns_cname_record_resource.go +++ b/azurerm/internal/services/dns/dns_cname_record_resource.go @@ -81,12 +81,15 @@ func resourceDnsCNameRecord() *schema.Resource { func resourceDnsCNameRecordCreateUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*clients.Client).Dns.RecordSetsClient ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) + subscriptionId := meta.(*clients.Client).Account.SubscriptionId defer cancel() name := d.Get("name").(string) resGroup := d.Get("resource_group_name").(string) zoneName := d.Get("zone_name").(string) + resourceId := parse.NewCnameRecordID(subscriptionId, resGroup, zoneName, name) + if d.IsNewResource() { existing, err := client.Get(ctx, resGroup, zoneName, name, dns.CNAME) if err != nil { @@ -134,16 +137,12 @@ func resourceDnsCNameRecordCreateUpdate(d *schema.ResourceData, meta interface{} return fmt.Errorf("Error creating/updating CNAME Record %q (DNS Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - resp, err := client.Get(ctx, resGroup, zoneName, name, dns.CNAME) + _, err := client.Get(ctx, resGroup, zoneName, name, dns.CNAME) if err != nil { return fmt.Errorf("Error retrieving CNAME Record %q (DNS Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - if resp.ID == nil { - return fmt.Errorf("Error retrieving CNAME Record %q (DNS Zone %q / Resource Group %q): ID was nil", name, zoneName, resGroup) - } - - d.SetId(*resp.ID) + d.SetId(resourceId.ID()) return resourceDnsCNameRecordRead(d, meta) } diff --git a/azurerm/internal/services/dns/dns_mx_record_resource.go b/azurerm/internal/services/dns/dns_mx_record_resource.go index 9ab63fe24787..208002849c4d 100644 --- a/azurerm/internal/services/dns/dns_mx_record_resource.go +++ b/azurerm/internal/services/dns/dns_mx_record_resource.go @@ -91,12 +91,15 @@ func resourceDnsMxRecord() *schema.Resource { func resourceDnsMxRecordCreateUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*clients.Client).Dns.RecordSetsClient ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) + subscriptionId := meta.(*clients.Client).Account.SubscriptionId defer cancel() name := d.Get("name").(string) resGroup := d.Get("resource_group_name").(string) zoneName := d.Get("zone_name").(string) + resourceId := parse.NewMxRecordID(subscriptionId, resGroup, zoneName, name) + if d.IsNewResource() { existing, err := client.Get(ctx, resGroup, zoneName, name, dns.MX) if err != nil { @@ -126,16 +129,12 @@ func resourceDnsMxRecordCreateUpdate(d *schema.ResourceData, meta interface{}) e return fmt.Errorf("Error creating/updating DNS MX Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - resp, err := client.Get(ctx, resGroup, zoneName, name, dns.MX) + _, err := client.Get(ctx, resGroup, zoneName, name, dns.MX) if err != nil { return fmt.Errorf("Error retrieving DNS MX Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - if resp.ID == nil { - return fmt.Errorf("Cannot read DNS MX Record %s (resource group %s) ID", name, resGroup) - } - - d.SetId(*resp.ID) + d.SetId(resourceId.ID()) return resourceDnsMxRecordRead(d, meta) } diff --git a/azurerm/internal/services/dns/dns_ns_record_resource.go b/azurerm/internal/services/dns/dns_ns_record_resource.go index f8cc400022f1..9024d49d07dc 100644 --- a/azurerm/internal/services/dns/dns_ns_record_resource.go +++ b/azurerm/internal/services/dns/dns_ns_record_resource.go @@ -76,12 +76,15 @@ func resourceDnsNsRecord() *schema.Resource { func resourceDnsNsRecordCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*clients.Client).Dns.RecordSetsClient ctx, cancel := timeouts.ForCreate(meta.(*clients.Client).StopContext, d) + subscriptionId := meta.(*clients.Client).Account.SubscriptionId defer cancel() name := d.Get("name").(string) resGroup := d.Get("resource_group_name").(string) zoneName := d.Get("zone_name").(string) + resourceId := parse.NewNsRecordID(subscriptionId, resGroup, zoneName, name) + existing, err := client.Get(ctx, resGroup, zoneName, name, dns.NS) if err != nil { if !utils.ResponseWasNotFound(existing.Response) { @@ -114,16 +117,12 @@ func resourceDnsNsRecordCreate(d *schema.ResourceData, meta interface{}) error { return fmt.Errorf("Error creating DNS NS Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - resp, err := client.Get(ctx, resGroup, zoneName, name, dns.NS) + _, err = client.Get(ctx, resGroup, zoneName, name, dns.NS) if err != nil { return fmt.Errorf("Error retrieving DNS NS Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - if resp.ID == nil { - return fmt.Errorf("Cannot read DNS NS Record %s (resource group %s) ID", name, resGroup) - } - - d.SetId(*resp.ID) + d.SetId(resourceId.ID()) return resourceDnsNsRecordRead(d, meta) } diff --git a/azurerm/internal/services/dns/dns_ptr_record_resource.go b/azurerm/internal/services/dns/dns_ptr_record_resource.go index 2ed8106157ac..498f9f62001d 100644 --- a/azurerm/internal/services/dns/dns_ptr_record_resource.go +++ b/azurerm/internal/services/dns/dns_ptr_record_resource.go @@ -74,12 +74,15 @@ func resourceDnsPtrRecord() *schema.Resource { func resourceDnsPtrRecordCreateUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*clients.Client).Dns.RecordSetsClient ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) + subscriptionId := meta.(*clients.Client).Account.SubscriptionId defer cancel() name := d.Get("name").(string) resGroup := d.Get("resource_group_name").(string) zoneName := d.Get("zone_name").(string) + resourceId := parse.NewPtrRecordID(subscriptionId, resGroup, zoneName, name) + if d.IsNewResource() { existing, err := client.Get(ctx, resGroup, zoneName, name, dns.PTR) if err != nil { @@ -110,16 +113,12 @@ func resourceDnsPtrRecordCreateUpdate(d *schema.ResourceData, meta interface{}) return fmt.Errorf("Error creating/updating DNS PTR Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - resp, err := client.Get(ctx, resGroup, zoneName, name, dns.PTR) + _, err := client.Get(ctx, resGroup, zoneName, name, dns.PTR) if err != nil { return fmt.Errorf("Error retrieving DNS PTR Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - if resp.ID == nil { - return fmt.Errorf("Cannot read DNS PTR Record %s (resource group %s) ID", name, resGroup) - } - - d.SetId(*resp.ID) + d.SetId(resourceId.ID()) return resourceDnsPtrRecordRead(d, meta) } diff --git a/azurerm/internal/services/dns/dns_srv_record_resource.go b/azurerm/internal/services/dns/dns_srv_record_resource.go index d93891a87210..393c01a14d4f 100644 --- a/azurerm/internal/services/dns/dns_srv_record_resource.go +++ b/azurerm/internal/services/dns/dns_srv_record_resource.go @@ -96,12 +96,15 @@ func resourceDnsSrvRecord() *schema.Resource { func resourceDnsSrvRecordCreateUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*clients.Client).Dns.RecordSetsClient ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) + subscriptionId := meta.(*clients.Client).Account.SubscriptionId defer cancel() name := d.Get("name").(string) resGroup := d.Get("resource_group_name").(string) zoneName := d.Get("zone_name").(string) + resourceId := parse.NewSrvRecordID(subscriptionId, resGroup, zoneName, name) + if d.IsNewResource() { existing, err := client.Get(ctx, resGroup, zoneName, name, dns.SRV) if err != nil { @@ -133,16 +136,12 @@ func resourceDnsSrvRecordCreateUpdate(d *schema.ResourceData, meta interface{}) return fmt.Errorf("Error creating/updating DNS SRV Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - resp, err := client.Get(ctx, resGroup, zoneName, name, dns.SRV) + _, err := client.Get(ctx, resGroup, zoneName, name, dns.SRV) if err != nil { return fmt.Errorf("Error retrieving DNS SRV Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - if resp.ID == nil { - return fmt.Errorf("Cannot read DNS SRV Record %s (resource group %s) ID", name, resGroup) - } - - d.SetId(*resp.ID) + d.SetId(resourceId.ID()) return resourceDnsSrvRecordRead(d, meta) } diff --git a/azurerm/internal/services/dns/dns_txt_record_resource.go b/azurerm/internal/services/dns/dns_txt_record_resource.go index d84f04feb8aa..7682a0496832 100644 --- a/azurerm/internal/services/dns/dns_txt_record_resource.go +++ b/azurerm/internal/services/dns/dns_txt_record_resource.go @@ -82,12 +82,15 @@ func resourceDnsTxtRecord() *schema.Resource { func resourceDnsTxtRecordCreateUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*clients.Client).Dns.RecordSetsClient ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) + subscriptionId := meta.(*clients.Client).Account.SubscriptionId defer cancel() name := d.Get("name").(string) resGroup := d.Get("resource_group_name").(string) zoneName := d.Get("zone_name").(string) + resourceId := parse.NewTxtRecordID(subscriptionId, resGroup, zoneName, name) + if d.IsNewResource() { existing, err := client.Get(ctx, resGroup, zoneName, name, dns.TXT) if err != nil { @@ -119,16 +122,12 @@ func resourceDnsTxtRecordCreateUpdate(d *schema.ResourceData, meta interface{}) return fmt.Errorf("Error creating/updating DNS TXT Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - resp, err := client.Get(ctx, resGroup, zoneName, name, dns.TXT) + _, err := client.Get(ctx, resGroup, zoneName, name, dns.TXT) if err != nil { return fmt.Errorf("Error retrieving DNS TXT Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - if resp.ID == nil { - return fmt.Errorf("Cannot read DNS TXT Record %s (resource group %s) ID", name, resGroup) - } - - d.SetId(*resp.ID) + d.SetId(resourceId.ID()) return resourceDnsTxtRecordRead(d, meta) } diff --git a/azurerm/internal/services/dns/dns_zone_resource.go b/azurerm/internal/services/dns/dns_zone_resource.go index ba5e10c247ba..694947c0edb8 100644 --- a/azurerm/internal/services/dns/dns_zone_resource.go +++ b/azurerm/internal/services/dns/dns_zone_resource.go @@ -186,7 +186,7 @@ func resourceDnsZoneCreateUpdate(d *schema.ResourceData, meta interface{}) error return fmt.Errorf("Error creating/updating DNS Zone %q (Resource Group %q): %s", name, resGroup, err) } - resp, err := client.Get(ctx, resGroup, name) + _, err := client.Get(ctx, resGroup, name) if err != nil { return fmt.Errorf("Error retrieving DNS Zone %q (Resource Group %q): %s", name, resGroup, err) } @@ -210,10 +210,6 @@ func resourceDnsZoneCreateUpdate(d *schema.ResourceData, meta interface{}) error } } - if resp.ID == nil { - return fmt.Errorf("Cannot read DNS Zone %q (Resource Group %q) ID", name, resGroup) - } - d.SetId(resourceId.ID()) return resourceDnsZoneRead(d, meta) diff --git a/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go b/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go index 787c8b7fcf9e..f13edea9f0e0 100644 --- a/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go +++ b/azurerm/internal/services/dns/migration/dns_zone_V0_to_V1.go @@ -3,6 +3,8 @@ package migration import ( "context" "fmt" + "log" + "github.com/hashicorp/terraform-plugin-sdk/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/helper/validation" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure" @@ -10,7 +12,6 @@ import ( "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/dns/parse" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/dns/validate" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tags" - "log" ) func DnsZoneV0ToV1() schema.StateUpgrader { From fe41264a870ff12e19c2ce69f667d48005bb9668 Mon Sep 17 00:00:00 2001 From: Vladimir Lazarenko Date: Wed, 3 Mar 2021 09:55:04 +0100 Subject: [PATCH 5/5] Address feedback --- azurerm/internal/services/dns/dns_a_record_resource.go | 5 ----- .../internal/services/dns/dns_aaaa_record_resource.go | 5 ----- azurerm/internal/services/dns/dns_caa_record_resource.go | 5 ----- .../internal/services/dns/dns_cname_record_resource.go | 5 ----- azurerm/internal/services/dns/dns_mx_record_resource.go | 5 ----- azurerm/internal/services/dns/dns_ns_record_resource.go | 5 ----- azurerm/internal/services/dns/dns_ptr_record_resource.go | 5 ----- azurerm/internal/services/dns/dns_srv_record_resource.go | 5 ----- azurerm/internal/services/dns/dns_txt_record_resource.go | 5 ----- azurerm/internal/services/dns/dns_zone_data_source.go | 9 +++++---- azurerm/internal/services/dns/dns_zone_resource.go | 5 ----- 11 files changed, 5 insertions(+), 54 deletions(-) diff --git a/azurerm/internal/services/dns/dns_a_record_resource.go b/azurerm/internal/services/dns/dns_a_record_resource.go index 1d4de06e7ec5..e9008603b921 100644 --- a/azurerm/internal/services/dns/dns_a_record_resource.go +++ b/azurerm/internal/services/dns/dns_a_record_resource.go @@ -136,11 +136,6 @@ func resourceDnsARecordCreateUpdate(d *schema.ResourceData, meta interface{}) er return fmt.Errorf("Error creating/updating DNS A Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - _, err := client.Get(ctx, resGroup, zoneName, name, dns.A) - if err != nil { - return fmt.Errorf("Error retrieving DNS A Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) - } - d.SetId(resourceId.ID()) return resourceDnsARecordRead(d, meta) diff --git a/azurerm/internal/services/dns/dns_aaaa_record_resource.go b/azurerm/internal/services/dns/dns_aaaa_record_resource.go index eaa86d619942..37ddba19a8a6 100644 --- a/azurerm/internal/services/dns/dns_aaaa_record_resource.go +++ b/azurerm/internal/services/dns/dns_aaaa_record_resource.go @@ -140,11 +140,6 @@ func resourceDnsAaaaRecordCreateUpdate(d *schema.ResourceData, meta interface{}) return fmt.Errorf("Error creating/updating DNS AAAA Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - _, err := client.Get(ctx, resGroup, zoneName, name, dns.AAAA) - if err != nil { - return fmt.Errorf("Error retrieving DNS AAAA Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) - } - d.SetId(resourceId.ID()) return resourceDnsAaaaRecordRead(d, meta) diff --git a/azurerm/internal/services/dns/dns_caa_record_resource.go b/azurerm/internal/services/dns/dns_caa_record_resource.go index 01f039c1668f..b13f919031d6 100644 --- a/azurerm/internal/services/dns/dns_caa_record_resource.go +++ b/azurerm/internal/services/dns/dns_caa_record_resource.go @@ -141,11 +141,6 @@ func resourceDnsCaaRecordCreateUpdate(d *schema.ResourceData, meta interface{}) return fmt.Errorf("Error creating/updating DNS CAA Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - _, err := client.Get(ctx, resGroup, zoneName, name, dns.CAA) - if err != nil { - return fmt.Errorf("Error retrieving DNS CAA Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) - } - d.SetId(resourceId.ID()) return resourceDnsCaaRecordRead(d, meta) diff --git a/azurerm/internal/services/dns/dns_cname_record_resource.go b/azurerm/internal/services/dns/dns_cname_record_resource.go index b96ee27cdc82..b5af43259cc0 100644 --- a/azurerm/internal/services/dns/dns_cname_record_resource.go +++ b/azurerm/internal/services/dns/dns_cname_record_resource.go @@ -137,11 +137,6 @@ func resourceDnsCNameRecordCreateUpdate(d *schema.ResourceData, meta interface{} return fmt.Errorf("Error creating/updating CNAME Record %q (DNS Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - _, err := client.Get(ctx, resGroup, zoneName, name, dns.CNAME) - if err != nil { - return fmt.Errorf("Error retrieving CNAME Record %q (DNS Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) - } - d.SetId(resourceId.ID()) return resourceDnsCNameRecordRead(d, meta) diff --git a/azurerm/internal/services/dns/dns_mx_record_resource.go b/azurerm/internal/services/dns/dns_mx_record_resource.go index 208002849c4d..e4bc1d73a4a0 100644 --- a/azurerm/internal/services/dns/dns_mx_record_resource.go +++ b/azurerm/internal/services/dns/dns_mx_record_resource.go @@ -129,11 +129,6 @@ func resourceDnsMxRecordCreateUpdate(d *schema.ResourceData, meta interface{}) e return fmt.Errorf("Error creating/updating DNS MX Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - _, err := client.Get(ctx, resGroup, zoneName, name, dns.MX) - if err != nil { - return fmt.Errorf("Error retrieving DNS MX Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) - } - d.SetId(resourceId.ID()) return resourceDnsMxRecordRead(d, meta) diff --git a/azurerm/internal/services/dns/dns_ns_record_resource.go b/azurerm/internal/services/dns/dns_ns_record_resource.go index 9024d49d07dc..308e170f4688 100644 --- a/azurerm/internal/services/dns/dns_ns_record_resource.go +++ b/azurerm/internal/services/dns/dns_ns_record_resource.go @@ -117,11 +117,6 @@ func resourceDnsNsRecordCreate(d *schema.ResourceData, meta interface{}) error { return fmt.Errorf("Error creating DNS NS Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - _, err = client.Get(ctx, resGroup, zoneName, name, dns.NS) - if err != nil { - return fmt.Errorf("Error retrieving DNS NS Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) - } - d.SetId(resourceId.ID()) return resourceDnsNsRecordRead(d, meta) diff --git a/azurerm/internal/services/dns/dns_ptr_record_resource.go b/azurerm/internal/services/dns/dns_ptr_record_resource.go index 498f9f62001d..ee5790e69b24 100644 --- a/azurerm/internal/services/dns/dns_ptr_record_resource.go +++ b/azurerm/internal/services/dns/dns_ptr_record_resource.go @@ -113,11 +113,6 @@ func resourceDnsPtrRecordCreateUpdate(d *schema.ResourceData, meta interface{}) return fmt.Errorf("Error creating/updating DNS PTR Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - _, err := client.Get(ctx, resGroup, zoneName, name, dns.PTR) - if err != nil { - return fmt.Errorf("Error retrieving DNS PTR Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) - } - d.SetId(resourceId.ID()) return resourceDnsPtrRecordRead(d, meta) diff --git a/azurerm/internal/services/dns/dns_srv_record_resource.go b/azurerm/internal/services/dns/dns_srv_record_resource.go index 393c01a14d4f..6f051bae1f60 100644 --- a/azurerm/internal/services/dns/dns_srv_record_resource.go +++ b/azurerm/internal/services/dns/dns_srv_record_resource.go @@ -136,11 +136,6 @@ func resourceDnsSrvRecordCreateUpdate(d *schema.ResourceData, meta interface{}) return fmt.Errorf("Error creating/updating DNS SRV Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - _, err := client.Get(ctx, resGroup, zoneName, name, dns.SRV) - if err != nil { - return fmt.Errorf("Error retrieving DNS SRV Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) - } - d.SetId(resourceId.ID()) return resourceDnsSrvRecordRead(d, meta) diff --git a/azurerm/internal/services/dns/dns_txt_record_resource.go b/azurerm/internal/services/dns/dns_txt_record_resource.go index 7682a0496832..5c264565a81a 100644 --- a/azurerm/internal/services/dns/dns_txt_record_resource.go +++ b/azurerm/internal/services/dns/dns_txt_record_resource.go @@ -122,11 +122,6 @@ func resourceDnsTxtRecordCreateUpdate(d *schema.ResourceData, meta interface{}) return fmt.Errorf("Error creating/updating DNS TXT Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) } - _, err := client.Get(ctx, resGroup, zoneName, name, dns.TXT) - if err != nil { - return fmt.Errorf("Error retrieving DNS TXT Record %q (Zone %q / Resource Group %q): %s", name, zoneName, resGroup, err) - } - d.SetId(resourceId.ID()) return resourceDnsTxtRecordRead(d, meta) diff --git a/azurerm/internal/services/dns/dns_zone_data_source.go b/azurerm/internal/services/dns/dns_zone_data_source.go index 6256f35fef14..6f89b99ab594 100644 --- a/azurerm/internal/services/dns/dns_zone_data_source.go +++ b/azurerm/internal/services/dns/dns_zone_data_source.go @@ -59,11 +59,15 @@ func dataSourceDnsZone() *schema.Resource { func dataSourceDnsZoneRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*clients.Client).Dns.ZonesClient ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) + subscriptionId := meta.(*clients.Client).Account.SubscriptionId + defer cancel() name := d.Get("name").(string) resourceGroup := d.Get("resource_group_name").(string) + resourceId := parse.NewDnsZoneID(subscriptionId, resourceGroup, name) + var ( resp dns.Zone err error @@ -93,10 +97,7 @@ func dataSourceDnsZoneRead(d *schema.ResourceData, meta interface{}) error { if resp.ID == nil || *resp.ID == "" { return fmt.Errorf("failed reading ID for DNS Zone %q (Resource Group %q)", name, resourceGroup) } - resourceId, err := parse.DnsZoneID(*resp.ID) - if err != nil { - return fmt.Errorf("Error parsing DNS Zone ID %q", *resp.ID) - } + d.SetId(resourceId.ID()) d.Set("name", name) diff --git a/azurerm/internal/services/dns/dns_zone_resource.go b/azurerm/internal/services/dns/dns_zone_resource.go index 694947c0edb8..d3e21d468dd6 100644 --- a/azurerm/internal/services/dns/dns_zone_resource.go +++ b/azurerm/internal/services/dns/dns_zone_resource.go @@ -186,11 +186,6 @@ func resourceDnsZoneCreateUpdate(d *schema.ResourceData, meta interface{}) error return fmt.Errorf("Error creating/updating DNS Zone %q (Resource Group %q): %s", name, resGroup, err) } - _, err := client.Get(ctx, resGroup, name) - if err != nil { - return fmt.Errorf("Error retrieving DNS Zone %q (Resource Group %q): %s", name, resGroup, err) - } - if v, ok := d.GetOk("soa_record"); ok { soaRecord := v.([]interface{})[0].(map[string]interface{}) rsParameters := dns.RecordSet{