github.com/ndarilek/terraform@v0.3.8-0.20150320140257-d3135c1b2bac/builtin/providers/digitalocean/resource_digitalocean_ssh_key.go (about) 1 package digitalocean 2 3 import ( 4 "fmt" 5 "log" 6 "strings" 7 8 "github.com/hashicorp/terraform/helper/schema" 9 "github.com/pearkes/digitalocean" 10 ) 11 12 func resourceDigitalOceanSSHKey() *schema.Resource { 13 return &schema.Resource{ 14 Create: resourceDigitalOceanSSHKeyCreate, 15 Read: resourceDigitalOceanSSHKeyRead, 16 Update: resourceDigitalOceanSSHKeyUpdate, 17 Delete: resourceDigitalOceanSSHKeyDelete, 18 19 Schema: map[string]*schema.Schema{ 20 "id": &schema.Schema{ 21 Type: schema.TypeString, 22 Computed: true, 23 }, 24 25 "name": &schema.Schema{ 26 Type: schema.TypeString, 27 Required: true, 28 }, 29 30 "public_key": &schema.Schema{ 31 Type: schema.TypeString, 32 Required: true, 33 ForceNew: true, 34 }, 35 36 "fingerprint": &schema.Schema{ 37 Type: schema.TypeString, 38 Computed: true, 39 }, 40 }, 41 } 42 } 43 44 func resourceDigitalOceanSSHKeyCreate(d *schema.ResourceData, meta interface{}) error { 45 client := meta.(*digitalocean.Client) 46 47 // Build up our creation options 48 opts := &digitalocean.CreateSSHKey{ 49 Name: d.Get("name").(string), 50 PublicKey: d.Get("public_key").(string), 51 } 52 53 log.Printf("[DEBUG] SSH Key create configuration: %#v", opts) 54 id, err := client.CreateSSHKey(opts) 55 if err != nil { 56 return fmt.Errorf("Error creating SSH Key: %s", err) 57 } 58 59 d.SetId(id) 60 log.Printf("[INFO] SSH Key: %s", id) 61 62 return resourceDigitalOceanSSHKeyRead(d, meta) 63 } 64 65 func resourceDigitalOceanSSHKeyRead(d *schema.ResourceData, meta interface{}) error { 66 client := meta.(*digitalocean.Client) 67 68 key, err := client.RetrieveSSHKey(d.Id()) 69 if err != nil { 70 // If the key is somehow already destroyed, mark as 71 // succesfully gone 72 if strings.Contains(err.Error(), "404 Not Found") { 73 d.SetId("") 74 return nil 75 } 76 77 return fmt.Errorf("Error retrieving SSH key: %s", err) 78 } 79 80 d.Set("name", key.Name) 81 d.Set("fingerprint", key.Fingerprint) 82 83 return nil 84 } 85 86 func resourceDigitalOceanSSHKeyUpdate(d *schema.ResourceData, meta interface{}) error { 87 client := meta.(*digitalocean.Client) 88 89 var newName string 90 if v, ok := d.GetOk("name"); ok { 91 newName = v.(string) 92 } 93 94 log.Printf("[DEBUG] SSH key update name: %#v", newName) 95 err := client.RenameSSHKey(d.Id(), newName) 96 if err != nil { 97 return fmt.Errorf("Failed to update SSH key: %s", err) 98 } 99 100 return resourceDigitalOceanSSHKeyRead(d, meta) 101 } 102 103 func resourceDigitalOceanSSHKeyDelete(d *schema.ResourceData, meta interface{}) error { 104 client := meta.(*digitalocean.Client) 105 106 log.Printf("[INFO] Deleting SSH key: %s", d.Id()) 107 err := client.DestroySSHKey(d.Id()) 108 if err != nil { 109 return fmt.Errorf("Error deleting SSH key: %s", err) 110 } 111 112 d.SetId("") 113 return nil 114 }