From 64a844071dd95f4e76c8b1b70617e93a96695869 Mon Sep 17 00:00:00 2001 From: Dave Henderson Date: Sat, 14 Mar 2015 22:10:42 -0400 Subject: [PATCH] Deleting Machine-generated SSH key from SoftLayer when host is canceled. All the other drivers seem to do this, so I can't imagine this is a bad idea ;) Fixes #765 Signed-off-by: Dave Henderson --- drivers/softlayer/driver.go | 17 ++++++++++++++++- drivers/softlayer/softlayer.go | 13 +++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/drivers/softlayer/driver.go b/drivers/softlayer/driver.go index cd29ef067c..965d8b8800 100644 --- a/drivers/softlayer/driver.go +++ b/drivers/softlayer/driver.go @@ -31,6 +31,7 @@ type Driver struct { MachineName string CaCertPath string PrivateKeyPath string + SSHKeyID int SwarmMaster bool SwarmHost string SwarmDiscovery string @@ -383,6 +384,9 @@ func (d *Driver) Create() error { return err } + log.Infof("SSH key %s (%d) created in SoftLayer", key.Label, key.Id) + d.SSHKeyID = key.Id + spec := d.buildHostSpec() spec.SshKeys = []*SshKey{key} @@ -452,7 +456,9 @@ func (d *Driver) publicSSHKeyPath() string { func (d *Driver) Kill() error { return d.getClient().VirtualGuest().PowerOff(d.Id) } + func (d *Driver) Remove() error { + log.Infof("Canceling SoftLayer instance %d...", d.Id) var err error for i := 0; i < 5; i++ { if err = d.getClient().VirtualGuest().Cancel(d.Id); err != nil { @@ -461,7 +467,16 @@ func (d *Driver) Remove() error { } break } - return err + if err != nil { + return err + } + + log.Infof("Removing SSH Key %d...", d.SSHKeyID) + if err = d.getClient().SshKey().Delete(d.SSHKeyID); err != nil { + return err + } + + return nil } func (d *Driver) Restart() error { return d.getClient().VirtualGuest().Reboot(d.Id) diff --git a/drivers/softlayer/softlayer.go b/drivers/softlayer/softlayer.go index 0f448b77d5..3eaca9dfc9 100644 --- a/drivers/softlayer/softlayer.go +++ b/drivers/softlayer/softlayer.go @@ -150,6 +150,19 @@ func (c *sshKey) Create(label, key string) (*SshKey, error) { return &k, nil } +func (c *sshKey) Delete(id int) error { + var ( + method = "DELETE" + uri = fmt.Sprintf("%s/%v", c.namespace(), id) + ) + + _, err := c.newRequest(method, uri, nil) + if err != nil { + return err + } + return nil +} + func (c *Client) VirtualGuest() *virtualGuest { return &virtualGuest{c} }