github.com/minamijoyo/terraform@v0.7.8-0.20161029001309-18b3736ba44b/builtin/providers/azurerm/resource_arm_route.go (about)

     1  package azurerm
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  
     7  	"github.com/Azure/azure-sdk-for-go/arm/network"
     8  	"github.com/hashicorp/terraform/helper/schema"
     9  )
    10  
    11  func resourceArmRoute() *schema.Resource {
    12  	return &schema.Resource{
    13  		Create: resourceArmRouteCreate,
    14  		Read:   resourceArmRouteRead,
    15  		Update: resourceArmRouteCreate,
    16  		Delete: resourceArmRouteDelete,
    17  
    18  		Schema: map[string]*schema.Schema{
    19  			"name": {
    20  				Type:     schema.TypeString,
    21  				Required: true,
    22  				ForceNew: true,
    23  			},
    24  
    25  			"resource_group_name": {
    26  				Type:     schema.TypeString,
    27  				Required: true,
    28  				ForceNew: true,
    29  			},
    30  
    31  			"route_table_name": {
    32  				Type:     schema.TypeString,
    33  				Required: true,
    34  				ForceNew: true,
    35  			},
    36  
    37  			"address_prefix": {
    38  				Type:     schema.TypeString,
    39  				Required: true,
    40  			},
    41  
    42  			"next_hop_type": {
    43  				Type:         schema.TypeString,
    44  				Required:     true,
    45  				ValidateFunc: validateRouteTableNextHopType,
    46  			},
    47  
    48  			"next_hop_in_ip_address": {
    49  				Type:     schema.TypeString,
    50  				Optional: true,
    51  				Computed: true,
    52  			},
    53  		},
    54  	}
    55  }
    56  
    57  func resourceArmRouteCreate(d *schema.ResourceData, meta interface{}) error {
    58  	client := meta.(*ArmClient)
    59  	routesClient := client.routesClient
    60  
    61  	name := d.Get("name").(string)
    62  	rtName := d.Get("route_table_name").(string)
    63  	resGroup := d.Get("resource_group_name").(string)
    64  
    65  	addressPrefix := d.Get("address_prefix").(string)
    66  	nextHopType := d.Get("next_hop_type").(string)
    67  
    68  	armMutexKV.Lock(rtName)
    69  	defer armMutexKV.Unlock(rtName)
    70  
    71  	properties := network.RoutePropertiesFormat{
    72  		AddressPrefix: &addressPrefix,
    73  		NextHopType:   network.RouteNextHopType(nextHopType),
    74  	}
    75  
    76  	if v, ok := d.GetOk("next_hop_in_ip_address"); ok {
    77  		nextHopInIpAddress := v.(string)
    78  		properties.NextHopIPAddress = &nextHopInIpAddress
    79  	}
    80  
    81  	route := network.Route{
    82  		Name:       &name,
    83  		Properties: &properties,
    84  	}
    85  
    86  	_, err := routesClient.CreateOrUpdate(resGroup, rtName, name, route, make(chan struct{}))
    87  	if err != nil {
    88  		return err
    89  	}
    90  
    91  	read, err := routesClient.Get(resGroup, rtName, name)
    92  	if err != nil {
    93  		return err
    94  	}
    95  	if read.ID == nil {
    96  		return fmt.Errorf("Cannot read Route %s/%s (resource group %s) ID", rtName, name, resGroup)
    97  	}
    98  	d.SetId(*read.ID)
    99  
   100  	return resourceArmRouteRead(d, meta)
   101  }
   102  
   103  func resourceArmRouteRead(d *schema.ResourceData, meta interface{}) error {
   104  	routesClient := meta.(*ArmClient).routesClient
   105  
   106  	id, err := parseAzureResourceID(d.Id())
   107  	if err != nil {
   108  		return err
   109  	}
   110  	resGroup := id.ResourceGroup
   111  	rtName := id.Path["routeTables"]
   112  	routeName := id.Path["routes"]
   113  
   114  	resp, err := routesClient.Get(resGroup, rtName, routeName)
   115  	if err != nil {
   116  		if resp.StatusCode == http.StatusNotFound {
   117  			d.SetId("")
   118  			return nil
   119  		}
   120  		return fmt.Errorf("Error making Read request on Azure Route %s: %s", routeName, err)
   121  	}
   122  
   123  	return nil
   124  }
   125  
   126  func resourceArmRouteDelete(d *schema.ResourceData, meta interface{}) error {
   127  	client := meta.(*ArmClient)
   128  	routesClient := client.routesClient
   129  
   130  	id, err := parseAzureResourceID(d.Id())
   131  	if err != nil {
   132  		return err
   133  	}
   134  	resGroup := id.ResourceGroup
   135  	rtName := id.Path["routeTables"]
   136  	routeName := id.Path["routes"]
   137  
   138  	armMutexKV.Lock(rtName)
   139  	defer armMutexKV.Unlock(rtName)
   140  
   141  	_, err = routesClient.Delete(resGroup, rtName, routeName, make(chan struct{}))
   142  
   143  	return err
   144  }