github.com/leeprovoost/terraform@v0.6.10-0.20160119085442-96f3f76118e7/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 "description": &schema.Schema{ 28 Type: schema.TypeString, 29 Optional: true, 30 ForceNew: true, 31 }, 32 "network": &schema.Schema{ 33 Type: schema.TypeString, 34 Required: true, 35 ForceNew: true, 36 }, 37 "region": &schema.Schema{ 38 Type: schema.TypeString, 39 Optional: true, 40 ForceNew: true, 41 }, 42 "self_link": &schema.Schema{ 43 Type: schema.TypeString, 44 Computed: true, 45 }, 46 }, 47 } 48 } 49 50 func resourceComputeVpnGatewayCreate(d *schema.ResourceData, meta interface{}) error { 51 config := meta.(*Config) 52 53 name := d.Get("name").(string) 54 network := d.Get("network").(string) 55 region := getOptionalRegion(d, config) 56 project := config.Project 57 58 vpnGatewaysService := compute.NewTargetVpnGatewaysService(config.clientCompute) 59 60 vpnGateway := &compute.TargetVpnGateway{ 61 Name: name, 62 Network: network, 63 } 64 65 if v, ok := d.GetOk("description"); ok { 66 vpnGateway.Description = v.(string) 67 } 68 69 op, err := vpnGatewaysService.Insert(project, region, vpnGateway).Do() 70 if err != nil { 71 return fmt.Errorf("Error Inserting VPN Gateway %s into network %s: %s", name, network, err) 72 } 73 74 err = computeOperationWaitRegion(config, op, region, "Inserting VPN Gateway") 75 if err != nil { 76 return fmt.Errorf("Error Waiting to Insert VPN Gateway %s into network %s: %s", name, network, err) 77 } 78 79 return resourceComputeVpnGatewayRead(d, meta) 80 } 81 82 func resourceComputeVpnGatewayRead(d *schema.ResourceData, meta interface{}) error { 83 config := meta.(*Config) 84 85 name := d.Get("name").(string) 86 region := d.Get("region").(string) 87 project := config.Project 88 89 vpnGatewaysService := compute.NewTargetVpnGatewaysService(config.clientCompute) 90 vpnGateway, err := vpnGatewaysService.Get(project, region, name).Do() 91 92 if err != nil { 93 if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { 94 log.Printf("[WARN] Removing VPN Gateway %q because it's gone", d.Get("name").(string)) 95 // The resource doesn't exist anymore 96 d.SetId("") 97 98 return nil 99 } 100 101 return fmt.Errorf("Error Reading VPN Gateway %s: %s", name, err) 102 } 103 104 d.Set("self_link", vpnGateway.SelfLink) 105 d.SetId(name) 106 107 return nil 108 } 109 110 func resourceComputeVpnGatewayDelete(d *schema.ResourceData, meta interface{}) error { 111 config := meta.(*Config) 112 113 name := d.Get("name").(string) 114 region := d.Get("region").(string) 115 project := config.Project 116 117 vpnGatewaysService := compute.NewTargetVpnGatewaysService(config.clientCompute) 118 119 op, err := vpnGatewaysService.Delete(project, region, name).Do() 120 if err != nil { 121 return fmt.Errorf("Error Reading VPN Gateway %s: %s", name, err) 122 } 123 124 err = computeOperationWaitRegion(config, op, region, "Deleting VPN Gateway") 125 if err != nil { 126 return fmt.Errorf("Error Waiting to Delete VPN Gateway %s: %s", name, err) 127 } 128 129 return nil 130 }