func resourceArmSubnetCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*ArmClient) subnetClient := client.subnetClient log.Printf("[INFO] preparing arguments for Azure ARM Subnet creation.") name := d.Get("name").(string) vnetName := d.Get("virtual_network_name").(string) resGroup := d.Get("resource_group_name").(string) addressPrefix := d.Get("address_prefix").(string) armMutexKV.Lock(vnetName) defer armMutexKV.Unlock(vnetName) properties := network.SubnetPropertiesFormat{ AddressPrefix: &addressPrefix, } if v, ok := d.GetOk("network_security_group_id"); ok { nsgId := v.(string) properties.NetworkSecurityGroup = &network.SecurityGroup{ ID: &nsgId, } } if v, ok := d.GetOk("route_table_id"); ok { rtId := v.(string) properties.RouteTable = &network.RouteTable{ ID: &rtId, } } subnet := network.Subnet{ Name: &name, Properties: &properties, } resp, err := subnetClient.CreateOrUpdate(resGroup, vnetName, name, subnet) if err != nil { return err } d.SetId(*resp.ID) log.Printf("[DEBUG] Waiting for Subnet (%s) to become available", name) stateConf := &resource.StateChangeConf{ Pending: []string{"Accepted", "Updating"}, Target: "Succeeded", Refresh: subnetRuleStateRefreshFunc(client, resGroup, vnetName, name), Timeout: 10 * time.Minute, } if _, err := stateConf.WaitForState(); err != nil { return fmt.Errorf("Error waiting for Subnet (%s) to become available: %s", name, err) } return resourceArmSubnetRead(d, meta) }
func resourceArmSubnetCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*ArmClient) subnetClient := client.subnetClient log.Printf("[INFO] preparing arguments for Azure ARM Subnet creation.") name := d.Get("name").(string) vnetName := d.Get("virtual_network_name").(string) resGroup := d.Get("resource_group_name").(string) addressPrefix := d.Get("address_prefix").(string) armMutexKV.Lock(vnetName) defer armMutexKV.Unlock(vnetName) properties := network.SubnetPropertiesFormat{ AddressPrefix: &addressPrefix, } if v, ok := d.GetOk("network_security_group_id"); ok { nsgId := v.(string) properties.NetworkSecurityGroup = &network.SecurityGroup{ ID: &nsgId, } } if v, ok := d.GetOk("route_table_id"); ok { rtId := v.(string) properties.RouteTable = &network.RouteTable{ ID: &rtId, } } subnet := network.Subnet{ Name: &name, Properties: &properties, } _, err := subnetClient.CreateOrUpdate(resGroup, vnetName, name, subnet, make(chan struct{})) if err != nil { return err } read, err := subnetClient.Get(resGroup, vnetName, name, "") if err != nil { return err } if read.ID == nil { return fmt.Errorf("Cannot read Subnet %s/%s (resource group %s) ID", vnetName, name, resGroup) } d.SetId(*read.ID) return resourceArmSubnetRead(d, meta) }