github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/google/resource_compute_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 resourceComputeAddress() *schema.Resource {
    12  	return &schema.Resource{
    13  		Create: resourceComputeAddressCreate,
    14  		Read:   resourceComputeAddressRead,
    15  		Delete: resourceComputeAddressDelete,
    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  			"region": &schema.Schema{
    38  				Type:     schema.TypeString,
    39  				Optional: true,
    40  				ForceNew: true,
    41  			},
    42  
    43  			"self_link": &schema.Schema{
    44  				Type:     schema.TypeString,
    45  				Computed: true,
    46  			},
    47  		},
    48  	}
    49  }
    50  
    51  func resourceComputeAddressCreate(d *schema.ResourceData, meta interface{}) error {
    52  	config := meta.(*Config)
    53  
    54  	region, err := getRegion(d, config)
    55  	if err != nil {
    56  		return err
    57  	}
    58  
    59  	project, err := getProject(d, config)
    60  	if err != nil {
    61  		return err
    62  	}
    63  
    64  	// Build the address parameter
    65  	addr := &compute.Address{Name: d.Get("name").(string)}
    66  	op, err := config.clientCompute.Addresses.Insert(
    67  		project, region, addr).Do()
    68  	if err != nil {
    69  		return fmt.Errorf("Error creating address: %s", err)
    70  	}
    71  
    72  	// It probably maybe worked, so store the ID now
    73  	d.SetId(addr.Name)
    74  
    75  	err = computeOperationWaitRegion(config, op, project, region, "Creating Address")
    76  	if err != nil {
    77  		return err
    78  	}
    79  
    80  	return resourceComputeAddressRead(d, meta)
    81  }
    82  
    83  func resourceComputeAddressRead(d *schema.ResourceData, meta interface{}) error {
    84  	config := meta.(*Config)
    85  
    86  	region, err := getRegion(d, config)
    87  	if err != nil {
    88  		return err
    89  	}
    90  
    91  	project, err := getProject(d, config)
    92  	if err != nil {
    93  		return err
    94  	}
    95  
    96  	addr, err := config.clientCompute.Addresses.Get(
    97  		project, region, d.Id()).Do()
    98  	if err != nil {
    99  		return handleNotFoundError(err, d, fmt.Sprintf("Address %q", d.Get("name").(string)))
   100  	}
   101  
   102  	d.Set("address", addr.Address)
   103  	d.Set("self_link", addr.SelfLink)
   104  	d.Set("name", addr.Name)
   105  
   106  	return nil
   107  }
   108  
   109  func resourceComputeAddressDelete(d *schema.ResourceData, meta interface{}) error {
   110  	config := meta.(*Config)
   111  
   112  	region, err := getRegion(d, config)
   113  	if err != nil {
   114  		return err
   115  	}
   116  
   117  	project, err := getProject(d, config)
   118  	if err != nil {
   119  		return err
   120  	}
   121  
   122  	// Delete the address
   123  	log.Printf("[DEBUG] address delete request")
   124  	op, err := config.clientCompute.Addresses.Delete(
   125  		project, region, d.Id()).Do()
   126  	if err != nil {
   127  		return fmt.Errorf("Error deleting address: %s", err)
   128  	}
   129  
   130  	err = computeOperationWaitRegion(config, op, project, region, "Deleting Address")
   131  	if err != nil {
   132  		return err
   133  	}
   134  
   135  	d.SetId("")
   136  	return nil
   137  }