github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/google/resource_compute_global_address.go (about)

     1  package google
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/hashicorp/terraform/helper/schema"
     8  	"google.golang.org/api/compute/v1"
     9  	"google.golang.org/api/googleapi"
    10  )
    11  
    12  func resourceComputeGlobalAddress() *schema.Resource {
    13  	return &schema.Resource{
    14  		Create: resourceComputeGlobalAddressCreate,
    15  		Read:   resourceComputeGlobalAddressRead,
    16  		Delete: resourceComputeGlobalAddressDelete,
    17  
    18  		Schema: map[string]*schema.Schema{
    19  			"name": &schema.Schema{
    20  				Type:     schema.TypeString,
    21  				Required: true,
    22  				ForceNew: true,
    23  			},
    24  
    25  			"address": &schema.Schema{
    26  				Type:     schema.TypeString,
    27  				Computed: true,
    28  			},
    29  
    30  			"project": &schema.Schema{
    31  				Type:     schema.TypeString,
    32  				Optional: true,
    33  				ForceNew: true,
    34  			},
    35  
    36  			"self_link": &schema.Schema{
    37  				Type:     schema.TypeString,
    38  				Computed: true,
    39  			},
    40  		},
    41  	}
    42  }
    43  
    44  func resourceComputeGlobalAddressCreate(d *schema.ResourceData, meta interface{}) error {
    45  	config := meta.(*Config)
    46  
    47  	project, err := getProject(d, config)
    48  	if err != nil {
    49  		return err
    50  	}
    51  
    52  	// Build the address parameter
    53  	addr := &compute.Address{Name: d.Get("name").(string)}
    54  	op, err := config.clientCompute.GlobalAddresses.Insert(
    55  		project, addr).Do()
    56  	if err != nil {
    57  		return fmt.Errorf("Error creating address: %s", err)
    58  	}
    59  
    60  	// It probably maybe worked, so store the ID now
    61  	d.SetId(addr.Name)
    62  
    63  	err = computeOperationWaitGlobal(config, op, project, "Creating Global Address")
    64  	if err != nil {
    65  		return err
    66  	}
    67  
    68  	return resourceComputeGlobalAddressRead(d, meta)
    69  }
    70  
    71  func resourceComputeGlobalAddressRead(d *schema.ResourceData, meta interface{}) error {
    72  	config := meta.(*Config)
    73  
    74  	project, err := getProject(d, config)
    75  	if err != nil {
    76  		return err
    77  	}
    78  
    79  	addr, err := config.clientCompute.GlobalAddresses.Get(
    80  		project, d.Id()).Do()
    81  	if err != nil {
    82  		if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 {
    83  			log.Printf("[WARN] Removing Global Address %q because it's gone", d.Get("name").(string))
    84  			// The resource doesn't exist anymore
    85  			d.SetId("")
    86  
    87  			return nil
    88  		}
    89  
    90  		return fmt.Errorf("Error reading address: %s", err)
    91  	}
    92  
    93  	d.Set("address", addr.Address)
    94  	d.Set("self_link", addr.SelfLink)
    95  
    96  	return nil
    97  }
    98  
    99  func resourceComputeGlobalAddressDelete(d *schema.ResourceData, meta interface{}) error {
   100  	config := meta.(*Config)
   101  
   102  	project, err := getProject(d, config)
   103  	if err != nil {
   104  		return err
   105  	}
   106  
   107  	// Delete the address
   108  	log.Printf("[DEBUG] address delete request")
   109  	op, err := config.clientCompute.GlobalAddresses.Delete(
   110  		project, d.Id()).Do()
   111  	if err != nil {
   112  		return fmt.Errorf("Error deleting address: %s", err)
   113  	}
   114  
   115  	err = computeOperationWaitGlobal(config, op, project, "Deleting Global Address")
   116  	if err != nil {
   117  		return err
   118  	}
   119  
   120  	d.SetId("")
   121  	return nil
   122  }