diff --git a/azurerm/resource_arm_private_dns_zone_virtual_network_link.go b/azurerm/resource_arm_private_dns_zone_virtual_network_link.go index d18ea74b65e9..f815d98c1399 100644 --- a/azurerm/resource_arm_private_dns_zone_virtual_network_link.go +++ b/azurerm/resource_arm_private_dns_zone_virtual_network_link.go @@ -2,14 +2,13 @@ package azurerm import ( "fmt" - "time" "github.com/Azure/azure-sdk-for-go/services/privatedns/mgmt/2018-09-01/privatedns" - "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/response" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf" + "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/validate" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils" ) @@ -25,21 +24,24 @@ func resourceArmPrivateDnsZoneVirtualNetworkLink() *schema.Resource { Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validate.NoEmptyStrings, }, "private_dns_zone_name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validate.NoEmptyStrings, }, "virtual_network_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: azure.ValidateResourceID, }, "registration_enabled": { @@ -48,7 +50,7 @@ func resourceArmPrivateDnsZoneVirtualNetworkLink() *schema.Resource { Default: false, }, - "resource_group_name": azure.SchemaResourceGroupNameDiffSuppress(), + "resource_group_name": azure.SchemaResourceGroupName(), "tags": tagsSchema(), }, @@ -95,13 +97,12 @@ func resourceArmPrivateDnsZoneVirtualNetworkLinkCreateUpdate(d *schema.ResourceD etag := "" ifNoneMatch := "" // set to empty to allow updates to records after creation - _, err := client.CreateOrUpdate(ctx, resGroup, dnsZoneName, name, parameters, etag, ifNoneMatch) + future, err := client.CreateOrUpdate(ctx, resGroup, dnsZoneName, name, parameters, etag, ifNoneMatch) if err != nil { return fmt.Errorf("error creating/updating Private DNS Zone Virtual network link %q (Resource Group %q): %s", name, resGroup, err) } - time.Sleep(time.Second * 20) // resource is slow to create / update, retry covers the create, sleeping to make update more reliable - if err := resource.Retry(120*time.Second, retryPrivateDnsZonesVirtualNetworkLinkClientGet(resGroup, dnsZoneName, name, meta)); err != nil { + if err = future.WaitForCompletionRef(ctx, client.Client); err != nil { return fmt.Errorf("error waiting for Private DNS Zone Virtual network link %q to become available: %+v", name, err) } @@ -119,19 +120,6 @@ func resourceArmPrivateDnsZoneVirtualNetworkLinkCreateUpdate(d *schema.ResourceD return resourceArmPrivateDnsZoneRead(d, meta) } -func retryPrivateDnsZonesVirtualNetworkLinkClientGet(resGroup string, dnsZoneName string, name string, meta interface{}) func() *resource.RetryError { - return func() *resource.RetryError { - client := meta.(*ArmClient).privateDns.VirtualNetworkLinksClient - ctx := meta.(*ArmClient).StopContext - - if _, err := client.Get(ctx, resGroup, dnsZoneName, name); err != nil { - return resource.RetryableError(err) - } - - return nil - } -} - func resourceArmPrivateDnsZoneVirtualNetworkLinkRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*ArmClient).privateDns.VirtualNetworkLinksClient ctx := meta.(*ArmClient).StopContext @@ -145,10 +133,6 @@ func resourceArmPrivateDnsZoneVirtualNetworkLinkRead(d *schema.ResourceData, met dnsZoneName := id.Path["privateDnsZones"] name := id.Path["virtualNetworkLinks"] - if err := resource.Retry(120*time.Second, retryPrivateDnsZonesVirtualNetworkLinkClientGet(resGroup, dnsZoneName, name, meta)); err != nil { - return fmt.Errorf("error waiting for Private DNS Zone Virtual network link %q to become available: %+v", name, err) - } - resp, err := client.Get(ctx, resGroup, dnsZoneName, name) if err != nil { if utils.ResponseWasNotFound(resp.Response) { @@ -161,8 +145,14 @@ func resourceArmPrivateDnsZoneVirtualNetworkLinkRead(d *schema.ResourceData, met d.Set("name", name) d.Set("resource_group_name", resGroup) d.Set("private_dns_zone_name", dnsZoneName) - d.Set("virtual_network_id", resp.VirtualNetwork.ID) - d.Set("registration_enabled", resp.VirtualNetworkLinkProperties.RegistrationEnabled) + + if props := resp.VirtualNetworkLinkProperties; props != nil { + d.Set("registration_enabled", props.RegistrationEnabled) + + if network := props.VirtualNetwork; network != nil { + d.Set("virtual_network_id", network.ID) + } + } flattenAndSetTags(d, resp.Tags) @@ -195,7 +185,7 @@ func resourceArmPrivateDnsZoneVirtualNetworkLinkDelete(d *schema.ResourceData, m if response.WasNotFound(future.Response()) { return nil } - return fmt.Errorf("error deleting Private DNS Zone Virtual network link %s (resource group %s): %+v", name, resGroup, err) + return fmt.Errorf("error waiting for deletion of Private DNS Zone Virtual network link %s (resource group %s): %+v", name, resGroup, err) } return nil diff --git a/azurerm/resource_arm_private_dns_zone_virtual_network_link_test.go b/azurerm/resource_arm_private_dns_zone_virtual_network_link_test.go index a998b59de7b8..785b5b7b63b6 100644 --- a/azurerm/resource_arm_private_dns_zone_virtual_network_link_test.go +++ b/azurerm/resource_arm_private_dns_zone_virtual_network_link_test.go @@ -4,7 +4,6 @@ import ( "fmt" "net/http" "testing" - "time" "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/terraform" @@ -119,8 +118,6 @@ func testCheckAzureRMPrivateDnsZoneVirtualNetworkLinkExists(resourceName string) client := testAccProvider.Meta().(*ArmClient).privateDns.VirtualNetworkLinksClient ctx := testAccProvider.Meta().(*ArmClient).StopContext - time.Sleep(time.Second * 20) // resource is slow to create / update, retry covers the create, sleeping to make update more reliable - resp, err := client.Get(ctx, resourceGroup, dnsZoneName, name) if err != nil { return fmt.Errorf("Bad: Get Private DNS zone virtual network link: %+v", err) @@ -187,9 +184,9 @@ resource "azurerm_private_dns_zone" "test" { } resource "azurerm_private_dns_zone_virtual_network_link" "test" { - name = "acctest%d" - private_dns_zone_name = "${azurerm_private_dns_zone.test.name}" - virtual_network_id = "${azurerm_virtual_network.test.id}" + name = "acctest%d" + private_dns_zone_name = "${azurerm_private_dns_zone.test.name}" + virtual_network_id = "${azurerm_virtual_network.test.id}" resource_group_name = "${azurerm_resource_group.test.name}" } @@ -203,8 +200,8 @@ func testAccAzureRMPrivateDnsZoneVirtualNetworkLink_requiresImport(rInt int, loc resource "azurerm_private_dns_zone_virtual_network_link" "import" { name = "${azurerm_private_dns_zone_virtual_network_link.name} - private_dns_zone_name = "${azurerm_private_dns_zone_virtual_network_link.private_dns_zone_name}" - virtual_network_id = "${azurerm_private_dns_zone_virtual_network_link.virtual_network_id}" + private_dns_zone_name = "${azurerm_private_dns_zone_virtual_network_link.private_dns_zone_name}" + virtual_network_id = "${azurerm_private_dns_zone_virtual_network_link.virtual_network_id}" resource_group_name = "${azurerm_private_dns_zone_virtual_network_link.resource_group_name}" } `, template) @@ -235,12 +232,12 @@ resource "azurerm_private_dns_zone" "test" { } resource "azurerm_private_dns_zone_virtual_network_link" "test" { - name = "acctest%d" - private_dns_zone_name = "${azurerm_private_dns_zone.test.name}" - virtual_network_id = "${azurerm_virtual_network.test.id}" - resource_group_name = "${azurerm_resource_group.test.name}" + name = "acctest%d" + private_dns_zone_name = "${azurerm_private_dns_zone.test.name}" + virtual_network_id = "${azurerm_virtual_network.test.id}" + resource_group_name = "${azurerm_resource_group.test.name}" - tags = { + tags = { environment = "Production" cost_center = "MSFT" } @@ -273,12 +270,12 @@ resource "azurerm_private_dns_zone" "test" { } resource "azurerm_private_dns_zone_virtual_network_link" "test" { - name = "acctestzone%d.com" - private_dns_zone_name = "${azurerm_private_dns_zone.test.name}" - virtual_network_id = "${azurerm_virtual_network.test.id}" - resource_group_name = "${azurerm_resource_group.test.name}" + name = "acctestzone%d.com" + private_dns_zone_name = "${azurerm_private_dns_zone.test.name}" + virtual_network_id = "${azurerm_virtual_network.test.id}" + resource_group_name = "${azurerm_resource_group.test.name}" - tags = { + tags = { environment = "staging" } } diff --git a/website/azurerm.erb b/website/azurerm.erb index eb3f4b560fe2..5d9b92e868f7 100644 --- a/website/azurerm.erb +++ b/website/azurerm.erb @@ -1534,16 +1534,18 @@
  • Private DNS Resources
  • diff --git a/website/docs/r/private_dns_zone_virtual_network_link.html.markdown b/website/docs/r/private_dns_zone_virtual_network_link.html.markdown index dc8fb088eb1a..4dff21ca7301 100644 --- a/website/docs/r/private_dns_zone_virtual_network_link.html.markdown +++ b/website/docs/r/private_dns_zone_virtual_network_link.html.markdown @@ -39,12 +39,12 @@ The following arguments are supported: * `private_dns_zone_name` - (Required) The name of the Private DNS zone (without a terminating dot). Changing this forces a new resource to be created. +* `resource_group_name` - (Required) Specifies the resource group where the resource exists. Changing this forces a new resource to be created. + * `virtual_network_id` - (Required) The Resource ID of the Virtual Network that should be linked to the DNS Zone. Changing this forces a new resource to be created. * `registration_enabled` - (Optional) Is auto-registration of virtual machine records in the virtual network in the Private DNS zone enabled? Defaults to `false`. -* `resource_group_name` - (Required) Specifies the resource group where the resource exists. Changing this forces a new resource to be created. - * `tags` - (Optional) A mapping of tags to assign to the resource. ## Attributes Reference