github.com/leeprovoost/terraform@v0.6.10-0.20160119085442-96f3f76118e7/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 "self_link": &schema.Schema{ 31 Type: schema.TypeString, 32 Computed: true, 33 }, 34 }, 35 } 36 } 37 38 func resourceComputeGlobalAddressCreate(d *schema.ResourceData, meta interface{}) error { 39 config := meta.(*Config) 40 41 // Build the address parameter 42 addr := &compute.Address{Name: d.Get("name").(string)} 43 op, err := config.clientCompute.GlobalAddresses.Insert( 44 config.Project, addr).Do() 45 if err != nil { 46 return fmt.Errorf("Error creating address: %s", err) 47 } 48 49 // It probably maybe worked, so store the ID now 50 d.SetId(addr.Name) 51 52 err = computeOperationWaitGlobal(config, op, "Creating Global Address") 53 if err != nil { 54 return err 55 } 56 57 return resourceComputeGlobalAddressRead(d, meta) 58 } 59 60 func resourceComputeGlobalAddressRead(d *schema.ResourceData, meta interface{}) error { 61 config := meta.(*Config) 62 63 addr, err := config.clientCompute.GlobalAddresses.Get( 64 config.Project, d.Id()).Do() 65 if err != nil { 66 if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { 67 log.Printf("[WARN] Removing Global Address %q because it's gone", d.Get("name").(string)) 68 // The resource doesn't exist anymore 69 d.SetId("") 70 71 return nil 72 } 73 74 return fmt.Errorf("Error reading address: %s", err) 75 } 76 77 d.Set("address", addr.Address) 78 d.Set("self_link", addr.SelfLink) 79 80 return nil 81 } 82 83 func resourceComputeGlobalAddressDelete(d *schema.ResourceData, meta interface{}) error { 84 config := meta.(*Config) 85 86 // Delete the address 87 log.Printf("[DEBUG] address delete request") 88 op, err := config.clientCompute.GlobalAddresses.Delete( 89 config.Project, d.Id()).Do() 90 if err != nil { 91 return fmt.Errorf("Error deleting address: %s", err) 92 } 93 94 err = computeOperationWaitGlobal(config, op, "Deleting Global Address") 95 if err != nil { 96 return err 97 } 98 99 d.SetId("") 100 return nil 101 }