diff --git a/azurerm/internal/services/mysql/resource_arm_mysql_virtual_network_rule.go b/azurerm/internal/services/mysql/resource_arm_mysql_virtual_network_rule.go index 5512b43b92fa..6ae5e6d80b01 100644 --- a/azurerm/internal/services/mysql/resource_arm_mysql_virtual_network_rule.go +++ b/azurerm/internal/services/mysql/resource_arm_mysql_virtual_network_rule.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "log" - "strings" "time" "github.com/Azure/azure-sdk-for-go/services/mysql/mgmt/2017-12-01/mysql" @@ -86,46 +85,6 @@ func resourceArmMySqlVirtualNetworkRuleCreateUpdate(d *schema.ResourceData, meta } } - // due to a bug in the API we have to ensure the Subnet's configured correctly or the API call will timeout - // BUG: https://github.com/Azure/azure-rest-api-specs/issues/3719 - subnetsClient := meta.(*clients.Client).Network.SubnetsClient - subnetParsedId, err := azure.ParseAzureResourceID(subnetId) - if err != nil { - return err - } - - subnetResourceGroup := subnetParsedId.ResourceGroup - virtualNetwork := subnetParsedId.Path["virtualNetworks"] - subnetName := subnetParsedId.Path["subnets"] - subnet, err := subnetsClient.Get(ctx, subnetResourceGroup, virtualNetwork, subnetName, "") - if err != nil { - if utils.ResponseWasNotFound(subnet.Response) { - return fmt.Errorf("Subnet with ID %q was not found: %+v", subnetId, err) - } - - return fmt.Errorf("Error obtaining Subnet %q (Virtual Network %q / Resource Group %q: %+v", subnetName, virtualNetwork, subnetResourceGroup, err) - } - - containsEndpoint := false - if props := subnet.SubnetPropertiesFormat; props != nil { - if endpoints := props.ServiceEndpoints; endpoints != nil { - for _, e := range *endpoints { - if e.Service == nil { - continue - } - - if strings.EqualFold(*e.Service, "Microsoft.Sql") { - containsEndpoint = true - break - } - } - } - } - - if !containsEndpoint { - return fmt.Errorf("Error creating MySQL Virtual Network Rule: Subnet %q (Virtual Network %q / Resource Group %q) must contain a Service Endpoint for `Microsoft.Sql`", subnetName, virtualNetwork, subnetResourceGroup) - } - parameters := mysql.VirtualNetworkRule{ VirtualNetworkRuleProperties: &mysql.VirtualNetworkRuleProperties{ VirtualNetworkSubnetID: utils.String(subnetId), @@ -133,12 +92,12 @@ func resourceArmMySqlVirtualNetworkRuleCreateUpdate(d *schema.ResourceData, meta }, } - if _, err = client.CreateOrUpdate(ctx, resourceGroup, serverName, name, parameters); err != nil { + if _, err := client.CreateOrUpdate(ctx, resourceGroup, serverName, name, parameters); err != nil { return fmt.Errorf("Error creating MySQL Virtual Network Rule %q (MySQL Server: %q, Resource Group: %q): %+v", name, serverName, resourceGroup, err) } //Wait for the provisioning state to become ready - log.Printf("[DEBUG] Waiting for MySQL Virtual Network Rule %q (MySQL Server: %q, Resource Group: %q) to become ready: %+v", name, serverName, resourceGroup, err) + log.Printf("[DEBUG] Waiting for MySQL Virtual Network Rule %q (MySQL Server: %q, Resource Group: %q) to become ready", name, serverName, resourceGroup) stateConf := &resource.StateChangeConf{ Pending: []string{"Initializing", "InProgress", "Unknown", "ResponseNotFound"}, Target: []string{"Ready"}, @@ -157,7 +116,7 @@ func resourceArmMySqlVirtualNetworkRuleCreateUpdate(d *schema.ResourceData, meta stateConf.Timeout = 30 * time.Minute } - if _, err = stateConf.WaitForState(); err != nil { + if _, err := stateConf.WaitForState(); err != nil { return fmt.Errorf("Error waiting for MySQL Virtual Network Rule %q (MySQL Server: %q, Resource Group: %q) to be created or updated: %+v", name, serverName, resourceGroup, err) } diff --git a/azurerm/internal/services/mysql/tests/resource_arm_mysql_virtual_network_rule_test.go b/azurerm/internal/services/mysql/tests/resource_arm_mysql_virtual_network_rule_test.go index 6f4407f447b9..0fbbc56d31d0 100644 --- a/azurerm/internal/services/mysql/tests/resource_arm_mysql_virtual_network_rule_test.go +++ b/azurerm/internal/services/mysql/tests/resource_arm_mysql_virtual_network_rule_test.go @@ -32,6 +32,25 @@ func TestAccAzureRMMySqlVirtualNetworkRule_basic(t *testing.T) { }) } +func TestAccAzureRMMySqlVirtualNetworkRule_badsubnet(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_mysql_virtual_network_rule", "test") + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acceptance.PreCheck(t) }, + Providers: acceptance.SupportedProviders, + CheckDestroy: testCheckAzureRMMySqlVirtualNetworkRuleDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAzureRMMySqlVirtualNetworkRule_badsubnet(data), + /* + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMMySqlVirtualNetworkRuleExists(data.ResourceName), + ),*/ + }, + }, + }) +} + func TestAccAzureRMMySqlVirtualNetworkRule_requiresImport(t *testing.T) { if !features.ShouldResourcesBeImported() { t.Skip("Skipping since resources aren't required to be imported") @@ -275,6 +294,55 @@ resource "azurerm_mysql_virtual_network_rule" "test" { `, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.RandomInteger) } +func testAccAzureRMMySqlVirtualNetworkRule_badsubnet(data acceptance.TestData) string { + return fmt.Sprintf(` +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_virtual_network" "test" { + name = "acctestvnet%d" + address_space = ["10.7.29.0/29"] + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" +} + +resource "azurerm_subnet" "test" { + name = "acctestsubnet%d" + resource_group_name = "${azurerm_resource_group.test.name}" + virtual_network_name = "${azurerm_virtual_network.test.name}" + address_prefix = "10.7.29.0/29" + service_endpoints = ["Microsoft.Sql"] +} + +resource "azurerm_mysql_server" "test" { + name = "acctestmysqlsvr-%d" + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + administrator_login = "acctestun" + administrator_login_password = "H@Sh1CoR3!" + version = "5.6" + ssl_enforcement = "Enabled" + + sku_name = "GP_Gen5_2" + + storage_profile { + storage_mb = 51200 + backup_retention_days = 7 + geo_redundant_backup = "Disabled" + } +} + +resource "azurerm_mysql_virtual_network_rule" "test" { + name = "acctestmysqlvnetrule%d" + resource_group_name = "${azurerm_resource_group.test.name}" + server_name = "${azurerm_mysql_server.test.name}" + subnet_id = "${azurerm_subnet.test.id}" +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, data.RandomInteger, data.RandomInteger) +} + func testAccAzureRMMySqlVirtualNetworkRule_requiresImport(data acceptance.TestData) string { return fmt.Sprintf(` %s