github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/azurerm/resource_arm_local_network_gateway.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 resourceArmLocalNetworkGateway() *schema.Resource { 12 return &schema.Resource{ 13 Create: resourceArmLocalNetworkGatewayCreate, 14 Read: resourceArmLocalNetworkGatewayRead, 15 Update: resourceArmLocalNetworkGatewayCreate, 16 Delete: resourceArmLocalNetworkGatewayDelete, 17 Importer: &schema.ResourceImporter{ 18 State: schema.ImportStatePassthrough, 19 }, 20 21 Schema: map[string]*schema.Schema{ 22 "name": { 23 Type: schema.TypeString, 24 Required: true, 25 ForceNew: true, 26 }, 27 28 "location": locationSchema(), 29 30 "resource_group_name": { 31 Type: schema.TypeString, 32 Optional: true, 33 ForceNew: true, 34 }, 35 36 "gateway_address": { 37 Type: schema.TypeString, 38 Required: true, 39 }, 40 41 "address_space": { 42 Type: schema.TypeList, 43 Required: true, 44 Elem: &schema.Schema{ 45 Type: schema.TypeString, 46 }, 47 }, 48 }, 49 } 50 } 51 52 func resourceArmLocalNetworkGatewayCreate(d *schema.ResourceData, meta interface{}) error { 53 lnetClient := meta.(*ArmClient).localNetConnClient 54 55 name := d.Get("name").(string) 56 location := d.Get("location").(string) 57 resGroup := d.Get("resource_group_name").(string) 58 ipAddress := d.Get("gateway_address").(string) 59 60 // fetch the 'address_space_prefixes: 61 prefixes := []string{} 62 for _, pref := range d.Get("address_space").([]interface{}) { 63 prefixes = append(prefixes, pref.(string)) 64 } 65 66 gateway := network.LocalNetworkGateway{ 67 Name: &name, 68 Location: &location, 69 LocalNetworkGatewayPropertiesFormat: &network.LocalNetworkGatewayPropertiesFormat{ 70 LocalNetworkAddressSpace: &network.AddressSpace{ 71 AddressPrefixes: &prefixes, 72 }, 73 GatewayIPAddress: &ipAddress, 74 }, 75 } 76 77 _, error := lnetClient.CreateOrUpdate(resGroup, name, gateway, make(chan struct{})) 78 err := <-error 79 if err != nil { 80 return fmt.Errorf("Error creating Azure ARM Local Network Gateway '%s': %s", name, err) 81 } 82 83 read, err := lnetClient.Get(resGroup, name) 84 if err != nil { 85 return err 86 } 87 if read.ID == nil { 88 return fmt.Errorf("Cannot read Virtual Network %s (resource group %s) ID", name, resGroup) 89 } 90 91 d.SetId(*read.ID) 92 93 return resourceArmLocalNetworkGatewayRead(d, meta) 94 } 95 96 // resourceArmLocalNetworkGatewayRead goes ahead and reads the state of the corresponding ARM local network gateway. 97 func resourceArmLocalNetworkGatewayRead(d *schema.ResourceData, meta interface{}) error { 98 lnetClient := meta.(*ArmClient).localNetConnClient 99 100 id, err := parseAzureResourceID(d.Id()) 101 if err != nil { 102 return err 103 } 104 name := id.Path["localNetworkGateways"] 105 if name == "" { 106 return fmt.Errorf("Cannot find 'localNetworkGateways' in '%s', make sure it is specified in the ID parameter", d.Id()) 107 } 108 resGroup := id.ResourceGroup 109 110 resp, err := lnetClient.Get(resGroup, name) 111 if err != nil { 112 if resp.StatusCode == http.StatusNotFound { 113 d.SetId("") 114 return nil 115 } 116 return fmt.Errorf("Error reading the state of Azure ARM local network gateway '%s': %s", name, err) 117 } 118 119 d.Set("resource_group_name", resGroup) 120 d.Set("name", resp.Name) 121 d.Set("location", resp.Location) 122 d.Set("gateway_address", resp.LocalNetworkGatewayPropertiesFormat.GatewayIPAddress) 123 124 prefs := []string{} 125 if ps := *resp.LocalNetworkGatewayPropertiesFormat.LocalNetworkAddressSpace.AddressPrefixes; ps != nil { 126 prefs = ps 127 } 128 d.Set("address_space", prefs) 129 130 return nil 131 } 132 133 // resourceArmLocalNetworkGatewayDelete deletes the specified ARM local network gateway. 134 func resourceArmLocalNetworkGatewayDelete(d *schema.ResourceData, meta interface{}) error { 135 lnetClient := meta.(*ArmClient).localNetConnClient 136 137 id, err := parseAzureResourceID(d.Id()) 138 if err != nil { 139 return err 140 } 141 name := id.Path["localNetworkGateways"] 142 resGroup := id.ResourceGroup 143 144 deleteResp, error := lnetClient.Delete(resGroup, name, make(chan struct{})) 145 resp := <-deleteResp 146 err = <-error 147 148 if resp.StatusCode == http.StatusNotFound { 149 return nil 150 } 151 152 if err != nil { 153 return fmt.Errorf("Error issuing Azure ARM delete request of local network gateway '%s': %s", name, err) 154 } 155 156 return nil 157 }