From 634987194d0e60555f9343a067551550a05f7166 Mon Sep 17 00:00:00 2001 From: jcastillo2nd Date: Sat, 14 Feb 2015 09:26:09 -0500 Subject: [PATCH 1/2] Added Digital Ocean snapshot create_image() --- libcloud/compute/drivers/digitalocean.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libcloud/compute/drivers/digitalocean.py b/libcloud/compute/drivers/digitalocean.py index 4ec6da1513..629bc2de12 100644 --- a/libcloud/compute/drivers/digitalocean.py +++ b/libcloud/compute/drivers/digitalocean.py @@ -125,6 +125,12 @@ def create_node(self, name, size, image, location, ex_ssh_key_ids=None, data = self.connection.request('/droplets/new', params=params).object return self._to_node(data=data['droplet']) + def create_image(self, node, name, description=None): + params = {'name': name} + res = self.connection.request('/droplets/%s/snapshot/' % (node.id), + params=params) + return res.status == httplib.OK + def reboot_node(self, node): res = self.connection.request('/droplets/%s/reboot/' % (node.id)) return res.status == httplib.OK From 60b2e82994c9d0ad01b5eb3e6c6dac26a6563820 Mon Sep 17 00:00:00 2001 From: jcastillo2nd Date: Sat, 14 Feb 2015 09:26:51 -0500 Subject: [PATCH 2/2] Added ssh key support for create_node and also retrieve ssh key by name for vultr --- libcloud/compute/drivers/vultr.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/libcloud/compute/drivers/vultr.py b/libcloud/compute/drivers/vultr.py index ab47aa056c..a0f3489815 100644 --- a/libcloud/compute/drivers/vultr.py +++ b/libcloud/compute/drivers/vultr.py @@ -39,6 +39,17 @@ def parse_error(self): raise LibcloudError(self.body) +class SSHKey(object): + def __init__(self, id, name, pub_key): + self.id = id + self.name = name + self.pub_key = pub_key + + def __repr__(self): + return (('') % + (self.id, self.name, self.pub_key)) + + class VultrConnection(ConnectionKey): """ Connection class for the Vultr driver. @@ -94,10 +105,13 @@ def list_sizes(self): def list_images(self): return self._list_resources('/v1/os/list', self._to_image) - def create_node(self, name, size, image, location): + def create_node(self, name, size, image, location, ex_ssh_key_ids=None): params = {'DCID': location.id, 'VPSPLANID': size.id, 'OSID': image.id, 'label': name} + if ex_ssh_key_ids: + params['SSHKEYID'] = ','.join(ex_ssh_key_ids) + result = self.connection.post('/v1/server/create', params) if result.status != httplib.OK: return False @@ -119,6 +133,15 @@ def create_node(self, name, size, image, location): return created_node + def ex_list_ssh_keys(self): + """ + List all the available SSH keys. + + :return: Available SSH keys. + :rtype: ``list`` of :class:`SSHKey` + """ + return self._list_resources('/v1/sshkey/list', self._to_ssh_key) + def reboot_node(self, node): params = {'SUBID': node.id} res = self.connection.post('/v1/server/reboot', params) @@ -182,3 +205,7 @@ def _to_image(self, data): extra = {'arch': data['arch'], 'family': data['family']} return NodeImage(id=data['OSID'], name=data['name'], extra=extra, driver=self) + + def _to_ssh_key(self, data): + return SSHKey(id=data['SSHKEYID'], name=data['name'], + pub_key=None)