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