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  }