Lock Route Table / Subnets

This commit is contained in:
Jay Wang 2017-04-14 15:19:22 -07:00
parent 4a782583b6
commit f712880fee
3 changed files with 47 additions and 2 deletions

View File

@ -104,6 +104,14 @@ func resourceArmSubnetCreate(d *schema.ResourceData, meta interface{}) error {
properties.RouteTable = &network.RouteTable{
ID: &rtId,
}
routeTableName, err := parseRouteTableName(rtId)
if err != nil {
return err
}
armMutexKV.Lock(routeTableName)
defer armMutexKV.Unlock(routeTableName)
}
subnet := network.Subnet{
@ -201,6 +209,17 @@ func resourceArmSubnetDelete(d *schema.ResourceData, meta interface{}) error {
defer armMutexKV.Unlock(networkSecurityGroupName)
}
if v, ok := d.GetOk("route_table_id"); ok {
rtId := v.(string)
routeTableName, err := parseRouteTableName(rtId)
if err != nil {
return err
}
armMutexKV.Lock(routeTableName)
defer armMutexKV.Unlock(routeTableName)
}
armMutexKV.Lock(vnetName)
defer armMutexKV.Unlock(vnetName)

View File

@ -13,7 +13,7 @@ import (
func TestAccAzureRMSubnet_basic(t *testing.T) {
ri := acctest.RandInt()
config := fmt.Sprintf(testAccAzureRMSubnet_basic, ri, ri, ri)
config := fmt.Sprintf(testAccAzureRMSubnet_basic, ri, ri, ri, ri, ri)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
@ -33,7 +33,7 @@ func TestAccAzureRMSubnet_basic(t *testing.T) {
func TestAccAzureRMSubnet_disappears(t *testing.T) {
ri := acctest.RandInt()
config := fmt.Sprintf(testAccAzureRMSubnet_basic, ri, ri, ri)
config := fmt.Sprintf(testAccAzureRMSubnet_basic, ri, ri, ri, ri, ri)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
@ -152,5 +152,22 @@ resource "azurerm_subnet" "test" {
resource_group_name = "${azurerm_resource_group.test.name}"
virtual_network_name = "${azurerm_virtual_network.test.name}"
address_prefix = "10.0.2.0/24"
route_table_id = "${azurerm_route_table.test.id}"
}
resource "azurerm_route_table" "test" {
name = "acctestroutetable%d"
resource_group_name = "${azurerm_resource_group.test.name}"
location = "West US"
}
resource "azurerm_route" "test" {
name = "acctestroute%d"
resource_group_name = "${azurerm_resource_group.test.name}"
route_table_name = "${azurerm_route_table.test.name}"
address_prefix = "10.100.0.0/14"
next_hop_type = "VirtualAppliance"
next_hop_in_ip_address = "10.10.1.1"
}
`

View File

@ -104,3 +104,12 @@ func parseNetworkSecurityGroupName(networkSecurityGroupId string) (string, error
return id.Path["networkSecurityGroups"], nil
}
func parseRouteTableName(routeTableId string) (string, error) {
id, err := parseAzureResourceID(routeTableId)
if err != nil {
return "", fmt.Errorf("[ERROR] Unable to parse Route Table ID '%s': %+v", routeTableId, err)
}
return id.Path["routeTables"], nil
}