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  }