github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/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": {
    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  }