You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2015/06/14 12:52:24 UTC

[13/21] libcloud git commit: Vultr ssh key implementation - Added ex_ssh_key_ids to create_node - Implemented list_key_pairs with public key retreival

Vultr ssh key implementation - Added ex_ssh_key_ids to create_node - Implemented list_key_pairs with public key retreival

Signed-off-by: Tomaz Muraus <to...@tomaz.me>


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/33cbf992
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/33cbf992
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/33cbf992

Branch: refs/heads/trunk
Commit: 33cbf99218f4d884e260ce7fb02f6403dc84efe1
Parents: b70bbbd
Author: jcastillo2nd <j....@gmail.com>
Authored: Thu May 28 18:57:51 2015 +0000
Committer: Tomaz Muraus <to...@tomaz.me>
Committed: Sun Jun 14 18:05:58 2015 +0800

----------------------------------------------------------------------
 libcloud/compute/drivers/vultr.py | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/33cbf992/libcloud/compute/drivers/vultr.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/vultr.py b/libcloud/compute/drivers/vultr.py
index ab47aa0..3823119 100644
--- a/libcloud/compute/drivers/vultr.py
+++ b/libcloud/compute/drivers/vultr.py
@@ -39,6 +39,17 @@ class VultrResponse(JsonResponse):
             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 (('<SSHKey: id=%s, name=%s, pub_key=%s>') %
+                (self.id, self.name, self.pub_key))
+
+
 class VultrConnection(ConnectionKey):
     """
     Connection class for the Vultr driver.
@@ -85,6 +96,14 @@ class VultrNodeDriver(NodeDriver):
     def list_nodes(self):
         return self._list_resources('/v1/server/list', self._to_node)
 
+    def list_key_pairs(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 list_locations(self):
         return self._list_resources('/v1/regions/list', self._to_location)
 
@@ -94,10 +113,13 @@ class VultrNodeDriver(NodeDriver):
     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 is not None:
+            params['SSHKEYID'] = ','.join(ex_ssh_key_ids)
+
         result = self.connection.post('/v1/server/create', params)
         if result.status != httplib.OK:
             return False
@@ -182,3 +204,7 @@ class VultrNodeDriver(NodeDriver):
         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=data['ssh_key'])