github.com/daveadams/terraform@v0.6.4-0.20160830094355-13ce74975936/builtin/providers/digitalocean/resource_digitalocean_tag.go (about) 1 package digitalocean 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/digitalocean/godo" 8 "github.com/hashicorp/terraform/helper/schema" 9 ) 10 11 func resourceDigitalOceanTag() *schema.Resource { 12 return &schema.Resource{ 13 Create: resourceDigitalOceanTagCreate, 14 Read: resourceDigitalOceanTagRead, 15 Update: resourceDigitalOceanTagUpdate, 16 Delete: resourceDigitalOceanTagDelete, 17 Importer: &schema.ResourceImporter{ 18 State: schema.ImportStatePassthrough, 19 }, 20 21 Schema: map[string]*schema.Schema{ 22 "name": &schema.Schema{ 23 Type: schema.TypeString, 24 Required: true, 25 }, 26 }, 27 } 28 } 29 30 func resourceDigitalOceanTagCreate(d *schema.ResourceData, meta interface{}) error { 31 client := meta.(*godo.Client) 32 33 // Build up our creation options 34 opts := &godo.TagCreateRequest{ 35 Name: d.Get("name").(string), 36 } 37 38 log.Printf("[DEBUG] Tag create configuration: %#v", opts) 39 tag, _, err := client.Tags.Create(opts) 40 if err != nil { 41 return fmt.Errorf("Error creating tag: %s", err) 42 } 43 44 d.SetId(tag.Name) 45 log.Printf("[INFO] Tag: %s", tag.Name) 46 47 return resourceDigitalOceanTagRead(d, meta) 48 } 49 50 func resourceDigitalOceanTagRead(d *schema.ResourceData, meta interface{}) error { 51 client := meta.(*godo.Client) 52 53 tag, resp, err := client.Tags.Get(d.Id()) 54 if err != nil { 55 // If the tag is somehow already destroyed, mark as 56 // successfully gone 57 if resp != nil && resp.StatusCode == 404 { 58 d.SetId("") 59 return nil 60 } 61 62 return fmt.Errorf("Error retrieving tag: %s", err) 63 } 64 65 d.Set("name", tag.Name) 66 67 return nil 68 } 69 70 func resourceDigitalOceanTagUpdate(d *schema.ResourceData, meta interface{}) error { 71 client := meta.(*godo.Client) 72 73 var newName string 74 if v, ok := d.GetOk("name"); ok { 75 newName = v.(string) 76 } 77 78 log.Printf("[DEBUG] tag update name: %#v", newName) 79 opts := &godo.TagUpdateRequest{ 80 Name: newName, 81 } 82 83 _, err := client.Tags.Update(d.Id(), opts) 84 if err != nil { 85 return fmt.Errorf("Failed to update tag: %s", err) 86 } 87 88 d.Set("name", newName) 89 90 return resourceDigitalOceanTagRead(d, meta) 91 } 92 93 func resourceDigitalOceanTagDelete(d *schema.ResourceData, meta interface{}) error { 94 client := meta.(*godo.Client) 95 96 log.Printf("[INFO] Deleting tag: %s", d.Id()) 97 _, err := client.Tags.Delete(d.Id()) 98 if err != nil { 99 return fmt.Errorf("Error deleting tag: %s", err) 100 } 101 102 d.SetId("") 103 return nil 104 }