github.com/leeprovoost/terraform@v0.6.10-0.20160119085442-96f3f76118e7/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 "google.golang.org/api/googleapi" 10 ) 11 12 func resourceComputeAddress() *schema.Resource { 13 return &schema.Resource{ 14 Create: resourceComputeAddressCreate, 15 Read: resourceComputeAddressRead, 16 Delete: resourceComputeAddressDelete, 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 "self_link": &schema.Schema{ 31 Type: schema.TypeString, 32 Computed: true, 33 }, 34 35 "region": &schema.Schema{ 36 Type: schema.TypeString, 37 Optional: true, 38 ForceNew: true, 39 }, 40 }, 41 } 42 } 43 44 func getOptionalRegion(d *schema.ResourceData, config *Config) string { 45 if res, ok := d.GetOk("region"); !ok { 46 return config.Region 47 } else { 48 return res.(string) 49 } 50 } 51 52 func resourceComputeAddressCreate(d *schema.ResourceData, meta interface{}) error { 53 config := meta.(*Config) 54 region := getOptionalRegion(d, config) 55 56 // Build the address parameter 57 addr := &compute.Address{Name: d.Get("name").(string)} 58 op, err := config.clientCompute.Addresses.Insert( 59 config.Project, region, addr).Do() 60 if err != nil { 61 return fmt.Errorf("Error creating address: %s", err) 62 } 63 64 // It probably maybe worked, so store the ID now 65 d.SetId(addr.Name) 66 67 err = computeOperationWaitRegion(config, op, region, "Creating Address") 68 if err != nil { 69 return err 70 } 71 72 return resourceComputeAddressRead(d, meta) 73 } 74 75 func resourceComputeAddressRead(d *schema.ResourceData, meta interface{}) error { 76 config := meta.(*Config) 77 78 region := getOptionalRegion(d, config) 79 80 addr, err := config.clientCompute.Addresses.Get( 81 config.Project, region, d.Id()).Do() 82 if err != nil { 83 if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { 84 // The resource doesn't exist anymore 85 log.Printf("[WARN] Removing Address %q because it's gone", d.Get("name").(string)) 86 d.SetId("") 87 88 return nil 89 } 90 91 return fmt.Errorf("Error reading address: %s", err) 92 } 93 94 d.Set("address", addr.Address) 95 d.Set("self_link", addr.SelfLink) 96 97 return nil 98 } 99 100 func resourceComputeAddressDelete(d *schema.ResourceData, meta interface{}) error { 101 config := meta.(*Config) 102 103 region := getOptionalRegion(d, config) 104 // Delete the address 105 log.Printf("[DEBUG] address delete request") 106 op, err := config.clientCompute.Addresses.Delete( 107 config.Project, region, d.Id()).Do() 108 if err != nil { 109 return fmt.Errorf("Error deleting address: %s", err) 110 } 111 112 err = computeOperationWaitRegion(config, op, region, "Deleting Address") 113 if err != nil { 114 return err 115 } 116 117 d.SetId("") 118 return nil 119 }