github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/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  )
    10  
    11  func resourceComputeGlobalAddress() *schema.Resource {
    12  	return &schema.Resource{
    13  		Create: resourceComputeGlobalAddressCreate,
    14  		Read:   resourceComputeGlobalAddressRead,
    15  		Delete: resourceComputeGlobalAddressDelete,
    16  		Importer: &schema.ResourceImporter{
    17  			State: schema.ImportStatePassthrough,
    18  		},
    19  		Schema: map[string]*schema.Schema{
    20  			"name": &schema.Schema{
    21  				Type:     schema.TypeString,
    22  				Required: true,
    23  				ForceNew: true,
    24  			},
    25  
    26  			"address": &schema.Schema{
    27  				Type:     schema.TypeString,
    28  				Computed: true,
    29  			},
    30  
    31  			"project": &schema.Schema{
    32  				Type:     schema.TypeString,
    33  				Optional: true,
    34  				ForceNew: true,
    35  			},
    36  
    37  			"self_link": &schema.Schema{
    38  				Type:     schema.TypeString,
    39  				Computed: true,
    40  			},
    41  		},
    42  	}
    43  }
    44  
    45  func resourceComputeGlobalAddressCreate(d *schema.ResourceData, meta interface{}) error {
    46  	config := meta.(*Config)
    47  
    48  	project, err := getProject(d, config)
    49  	if err != nil {
    50  		return err
    51  	}
    52  
    53  	// Build the address parameter
    54  	addr := &compute.Address{Name: d.Get("name").(string)}
    55  	op, err := config.clientCompute.GlobalAddresses.Insert(
    56  		project, addr).Do()
    57  	if err != nil {
    58  		return fmt.Errorf("Error creating address: %s", err)
    59  	}
    60  
    61  	// It probably maybe worked, so store the ID now
    62  	d.SetId(addr.Name)
    63  
    64  	err = computeOperationWaitGlobal(config, op, project, "Creating Global Address")
    65  	if err != nil {
    66  		return err
    67  	}
    68  
    69  	return resourceComputeGlobalAddressRead(d, meta)
    70  }
    71  
    72  func resourceComputeGlobalAddressRead(d *schema.ResourceData, meta interface{}) error {
    73  	config := meta.(*Config)
    74  
    75  	project, err := getProject(d, config)
    76  	if err != nil {
    77  		return err
    78  	}
    79  
    80  	addr, err := config.clientCompute.GlobalAddresses.Get(
    81  		project, d.Id()).Do()
    82  	if err != nil {
    83  		return handleNotFoundError(err, d, fmt.Sprintf("Global Address %q", d.Get("name").(string)))
    84  	}
    85  
    86  	d.Set("address", addr.Address)
    87  	d.Set("self_link", addr.SelfLink)
    88  	d.Set("name", addr.Name)
    89  
    90  	return nil
    91  }
    92  
    93  func resourceComputeGlobalAddressDelete(d *schema.ResourceData, meta interface{}) error {
    94  	config := meta.(*Config)
    95  
    96  	project, err := getProject(d, config)
    97  	if err != nil {
    98  		return err
    99  	}
   100  
   101  	// Delete the address
   102  	log.Printf("[DEBUG] address delete request")
   103  	op, err := config.clientCompute.GlobalAddresses.Delete(
   104  		project, d.Id()).Do()
   105  	if err != nil {
   106  		return fmt.Errorf("Error deleting address: %s", err)
   107  	}
   108  
   109  	err = computeOperationWaitGlobal(config, op, project, "Deleting Global Address")
   110  	if err != nil {
   111  		return err
   112  	}
   113  
   114  	d.SetId("")
   115  	return nil
   116  }