github.com/memsql/terraform@v0.7.0-rc2.0.20160706152241-21e2173e0a32/builtin/providers/digitalocean/resource_digitalocean_ssh_key.go (about)

     1  package digitalocean
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"strconv"
     7  
     8  	"github.com/digitalocean/godo"
     9  	"github.com/hashicorp/terraform/helper/schema"
    10  )
    11  
    12  func resourceDigitalOceanSSHKey() *schema.Resource {
    13  	return &schema.Resource{
    14  		Create: resourceDigitalOceanSSHKeyCreate,
    15  		Read:   resourceDigitalOceanSSHKeyRead,
    16  		Update: resourceDigitalOceanSSHKeyUpdate,
    17  		Delete: resourceDigitalOceanSSHKeyDelete,
    18  		Importer: &schema.ResourceImporter{
    19  			State: schema.ImportStatePassthrough,
    20  		},
    21  
    22  		Schema: map[string]*schema.Schema{
    23  			"id": &schema.Schema{
    24  				Type:     schema.TypeString,
    25  				Computed: true,
    26  			},
    27  
    28  			"name": &schema.Schema{
    29  				Type:     schema.TypeString,
    30  				Required: true,
    31  			},
    32  
    33  			"public_key": &schema.Schema{
    34  				Type:     schema.TypeString,
    35  				Required: true,
    36  				ForceNew: true,
    37  			},
    38  
    39  			"fingerprint": &schema.Schema{
    40  				Type:     schema.TypeString,
    41  				Computed: true,
    42  			},
    43  		},
    44  	}
    45  }
    46  
    47  func resourceDigitalOceanSSHKeyCreate(d *schema.ResourceData, meta interface{}) error {
    48  	client := meta.(*godo.Client)
    49  
    50  	// Build up our creation options
    51  	opts := &godo.KeyCreateRequest{
    52  		Name:      d.Get("name").(string),
    53  		PublicKey: d.Get("public_key").(string),
    54  	}
    55  
    56  	log.Printf("[DEBUG] SSH Key create configuration: %#v", opts)
    57  	key, _, err := client.Keys.Create(opts)
    58  	if err != nil {
    59  		return fmt.Errorf("Error creating SSH Key: %s", err)
    60  	}
    61  
    62  	d.SetId(strconv.Itoa(key.ID))
    63  	log.Printf("[INFO] SSH Key: %d", key.ID)
    64  
    65  	return resourceDigitalOceanSSHKeyRead(d, meta)
    66  }
    67  
    68  func resourceDigitalOceanSSHKeyRead(d *schema.ResourceData, meta interface{}) error {
    69  	client := meta.(*godo.Client)
    70  
    71  	id, err := strconv.Atoi(d.Id())
    72  	if err != nil {
    73  		return fmt.Errorf("invalid SSH key id: %v", err)
    74  	}
    75  
    76  	key, resp, err := client.Keys.GetByID(id)
    77  	if err != nil {
    78  		// If the key is somehow already destroyed, mark as
    79  		// successfully gone
    80  		if resp != nil && resp.StatusCode == 404 {
    81  			d.SetId("")
    82  			return nil
    83  		}
    84  
    85  		return fmt.Errorf("Error retrieving SSH key: %s", err)
    86  	}
    87  
    88  	d.Set("name", key.Name)
    89  	d.Set("fingerprint", key.Fingerprint)
    90  	d.Set("public_key", key.PublicKey)
    91  
    92  	return nil
    93  }
    94  
    95  func resourceDigitalOceanSSHKeyUpdate(d *schema.ResourceData, meta interface{}) error {
    96  	client := meta.(*godo.Client)
    97  
    98  	id, err := strconv.Atoi(d.Id())
    99  	if err != nil {
   100  		return fmt.Errorf("invalid SSH key id: %v", err)
   101  	}
   102  
   103  	var newName string
   104  	if v, ok := d.GetOk("name"); ok {
   105  		newName = v.(string)
   106  	}
   107  
   108  	log.Printf("[DEBUG] SSH key update name: %#v", newName)
   109  	opts := &godo.KeyUpdateRequest{
   110  		Name: newName,
   111  	}
   112  	_, _, err = client.Keys.UpdateByID(id, opts)
   113  	if err != nil {
   114  		return fmt.Errorf("Failed to update SSH key: %s", err)
   115  	}
   116  
   117  	return resourceDigitalOceanSSHKeyRead(d, meta)
   118  }
   119  
   120  func resourceDigitalOceanSSHKeyDelete(d *schema.ResourceData, meta interface{}) error {
   121  	client := meta.(*godo.Client)
   122  
   123  	id, err := strconv.Atoi(d.Id())
   124  	if err != nil {
   125  		return fmt.Errorf("invalid SSH key id: %v", err)
   126  	}
   127  
   128  	log.Printf("[INFO] Deleting SSH key: %d", id)
   129  	_, err = client.Keys.DeleteByID(id)
   130  	if err != nil {
   131  		return fmt.Errorf("Error deleting SSH key: %s", err)
   132  	}
   133  
   134  	d.SetId("")
   135  	return nil
   136  }