[ 
https://issues.apache.org/jira/browse/LIBCLOUD-333?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13668257#comment-13668257
 ] 

sebastien goasguen commented on LIBCLOUD-333:
---------------------------------------------

Same as 332, here is the basic functionality. I tested it with a production 
cloud. I have not written tests yet and you may want to handle extra arguments 
a different way. Let me know:

----

>From fcaa0e6c5b8818fa0d8136c7108f55a88290671c Mon Sep 17 00:00:00 2001
From: Sebastien Goasguen <[email protected]>
Date: Tue, 28 May 2013 07:58:48 -0400
Subject: [PATCH] LIBCLOUD-333: three functions to manage ssh keypairs

---
 libcloud/compute/drivers/cloudstack.py | 66 ++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git libcloud/compute/drivers/cloudstack.py 
libcloud/compute/drivers/cloudstack.py
index e2c85dd..49d2695 100644
--- libcloud/compute/drivers/cloudstack.py
+++ libcloud/compute/drivers/cloudstack.py
@@ -463,6 +463,72 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, 
NodeDriver):
         self._async_request('deleteIpForwardingRule', id=rule.id)
         return True
 
+    def ex_list_keypairs(self, **kwargs):
+        """
+        List Registered SSH Key Pairs
+
+        Parameters
+               ==========
+               projectid = (uuid) list objects by project
+               page = (integer) 
+               keyword = (string) List by keyword
+               listall = (boolean) If set to false, list only resources 
belonging to the command's caller; if set to true - list resources that the 
caller is authorized to see. Default value is false
+               pagesize = (integer) 
+               account = (string) list resources by account. Must be used with 
the domainId parameter.
+               isrecursive = (boolean) defaults to false, but if true, lists 
all resources from the parent specified by the domainId till leaves.
+               fingerprint = (string) A public key fingerprint to look for
+               name = (string) A key pair name to look for
+               domainid = (uuid) list only resources belonging to the domain 
specified
+        """    
+        
+        extra_args={}
+        for key in kwargs.keys():
+            extra_args[key]=kwargs.pop(key)
+     
+        return self._sync_request('listSSHKeyPairs', 
**extra_args)['sshkeypair']
+
+    def ex_create_keypair(self, name, **kwargs):
+        """
+        Creates a SSH KeyPair, returns fingerprint and private key
+
+        Required params are name
+        Parameters
+               ==========
+               projectid = (uuid) an optional project for the ssh key
+               domainid = (uuid) an optional domainId for the ssh key. If the 
account parameter is used, domainId must also be used.
+               name = (string) Name of the keypair
+               account = (string) an optional account for the ssh key. Must be 
used with domainId.
+        """
+
+        extra_args={}
+        for key in kwargs.keys():
+            extra_args[key]=kwargs.pop(key)
+
+        for keypair in self.ex_list_keypairs():
+             if keypair['name'] == name:
+                 raise LibcloudError('SSH KeyPair with name=%s already exists' 
% name)
+
+        return self._sync_request('createSSHKeyPair',name=name, 
**extra_args)['keypair']
+
+    def ex_delete_keypair(self,name, **kwargs):
+        """
+        Deletes an existing SSH KeyPair
+
+        Required params are name
+        Parameters
+               ==========
+               projectid = (uuid) the project associated with keypair
+               domainid = (uuid) the domain ID associated with the keypair
+               name = (string) Name of the keypair
+               account = (string) the account associated with the keypair. 
Must be used with the domainId parameter.
+        """
+
+        extra_args={}
+        for key in kwargs.keys():
+            extra_args[key]=kwargs.pop(key)
+
+        return self._sync_request('deleteSSHKeyPair',name=name, 
**extra_args)['success']
+
     def ex_register_iso(self, name, url, location=None, **kwargs):
         """
         Registers an existing ISO by URL.
-- 
1.8.1.3
                
> CloudStack driver does not deal with SSH KeyPairs
> -------------------------------------------------
>
>                 Key: LIBCLOUD-333
>                 URL: https://issues.apache.org/jira/browse/LIBCLOUD-333
>             Project: Libcloud
>          Issue Type: Bug
>          Components: Compute
>    Affects Versions: 0.12.3
>         Environment: trunk
>            Reporter: sebastien goasguen
>
> there are no extension functions for managing ssh key pairs.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to