github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/builtin/providers/google/resource_compute_vpn_gateway.go (about) 1 package google 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/hashicorp/terraform/helper/schema" 8 9 "google.golang.org/api/compute/v1" 10 "google.golang.org/api/googleapi" 11 ) 12 13 func resourceComputeVpnGateway() *schema.Resource { 14 return &schema.Resource{ 15 // Unfortunately, the VPNGatewayService does not support update 16 // operations. This is why everything is marked forcenew 17 Create: resourceComputeVpnGatewayCreate, 18 Read: resourceComputeVpnGatewayRead, 19 Delete: resourceComputeVpnGatewayDelete, 20 21 Schema: map[string]*schema.Schema{ 22 "name": &schema.Schema{ 23 Type: schema.TypeString, 24 Required: true, 25 ForceNew: true, 26 }, 27 28 "network": &schema.Schema{ 29 Type: schema.TypeString, 30 Required: true, 31 ForceNew: true, 32 }, 33 34 "description": &schema.Schema{ 35 Type: schema.TypeString, 36 Optional: true, 37 ForceNew: true, 38 }, 39 40 "project": &schema.Schema{ 41 Type: schema.TypeString, 42 Optional: true, 43 ForceNew: true, 44 }, 45 46 "region": &schema.Schema{ 47 Type: schema.TypeString, 48 Optional: true, 49 ForceNew: true, 50 }, 51 52 "self_link": &schema.Schema{ 53 Type: schema.TypeString, 54 Computed: true, 55 }, 56 }, 57 } 58 } 59 60 func resourceComputeVpnGatewayCreate(d *schema.ResourceData, meta interface{}) error { 61 config := meta.(*Config) 62 63 region, err := getRegion(d, config) 64 if err != nil { 65 return err 66 } 67 68 project, err := getProject(d, config) 69 if err != nil { 70 return err 71 } 72 73 name := d.Get("name").(string) 74 network := d.Get("network").(string) 75 76 vpnGatewaysService := compute.NewTargetVpnGatewaysService(config.clientCompute) 77 78 vpnGateway := &compute.TargetVpnGateway{ 79 Name: name, 80 Network: network, 81 } 82 83 if v, ok := d.GetOk("description"); ok { 84 vpnGateway.Description = v.(string) 85 } 86 87 op, err := vpnGatewaysService.Insert(project, region, vpnGateway).Do() 88 if err != nil { 89 return fmt.Errorf("Error Inserting VPN Gateway %s into network %s: %s", name, network, err) 90 } 91 92 err = computeOperationWaitRegion(config, op, region, "Inserting VPN Gateway") 93 if err != nil { 94 return fmt.Errorf("Error Waiting to Insert VPN Gateway %s into network %s: %s", name, network, err) 95 } 96 97 return resourceComputeVpnGatewayRead(d, meta) 98 } 99 100 func resourceComputeVpnGatewayRead(d *schema.ResourceData, meta interface{}) error { 101 config := meta.(*Config) 102 103 region, err := getRegion(d, config) 104 if err != nil { 105 return err 106 } 107 108 project, err := getProject(d, config) 109 if err != nil { 110 return err 111 } 112 113 name := d.Get("name").(string) 114 115 vpnGatewaysService := compute.NewTargetVpnGatewaysService(config.clientCompute) 116 vpnGateway, err := vpnGatewaysService.Get(project, region, name).Do() 117 118 if err != nil { 119 if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { 120 log.Printf("[WARN] Removing VPN Gateway %q because it's gone", d.Get("name").(string)) 121 // The resource doesn't exist anymore 122 d.SetId("") 123 124 return nil 125 } 126 127 return fmt.Errorf("Error Reading VPN Gateway %s: %s", name, err) 128 } 129 130 d.Set("self_link", vpnGateway.SelfLink) 131 d.SetId(name) 132 133 return nil 134 } 135 136 func resourceComputeVpnGatewayDelete(d *schema.ResourceData, meta interface{}) error { 137 config := meta.(*Config) 138 139 region, err := getRegion(d, config) 140 if err != nil { 141 return err 142 } 143 144 project, err := getProject(d, config) 145 if err != nil { 146 return err 147 } 148 149 name := d.Get("name").(string) 150 151 vpnGatewaysService := compute.NewTargetVpnGatewaysService(config.clientCompute) 152 153 op, err := vpnGatewaysService.Delete(project, region, name).Do() 154 if err != nil { 155 return fmt.Errorf("Error Reading VPN Gateway %s: %s", name, err) 156 } 157 158 err = computeOperationWaitRegion(config, op, region, "Deleting VPN Gateway") 159 if err != nil { 160 return fmt.Errorf("Error Waiting to Delete VPN Gateway %s: %s", name, err) 161 } 162 163 return nil 164 }