summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Prince <dprince@redhat.com>2012-08-15 12:01:12 -0400
committerDan Prince <dprince@redhat.com>2012-08-15 12:44:37 -0400
commita8024cd667b9d1a3aa5ce2fcfb6725b25ace9b6c (patch)
tree004801e3cf186fc35371d1c054f7ec9848fa6cc1
parent35c12feb8c9467b9b4a7eac7a3f3d63bd620a35b (diff)
downloadnova-a8024cd667b9d1a3aa5ce2fcfb6725b25ace9b6c.tar.gz
nova-a8024cd667b9d1a3aa5ce2fcfb6725b25ace9b6c.tar.xz
nova-a8024cd667b9d1a3aa5ce2fcfb6725b25ace9b6c.zip
Add get_key_pair to compute API.
This will be used to implement a GET keypair API call. Partial fix for LP Bug #925731. Change-Id: Ie9976c0168842c7491d80be6213814192a2024df
-rw-r--r--nova/compute/api.py7
-rw-r--r--nova/tests/compute/test_compute.py24
2 files changed, 26 insertions, 5 deletions
diff --git a/nova/compute/api.py b/nova/compute/api.py
index 2d62c00ed..e59b400ad 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -2062,6 +2062,13 @@ class KeypairAPI(base.Base):
})
return rval
+ def get_key_pair(self, context, user_id, key_name):
+ """Get a keypair by name."""
+ key_pair = self.db.key_pair_get(context, user_id, key_name)
+ return {'name': key_pair['name'],
+ 'public_key': key_pair['public_key'],
+ 'fingerprint': key_pair['fingerprint']}
+
class SecurityGroupAPI(base.Base):
"""
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index 776bb8237..1ebe889c1 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -4500,6 +4500,7 @@ class KeypairAPITestCase(BaseTestCase):
self.keypair_api = compute_api.KeypairAPI()
self.ctxt = context.RequestContext('fake', 'fake')
self._keypair_db_call_stubs()
+ self.existing_key_name = 'fake existing key name'
self.pub_key = ('ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLnVkqJu9WVf'
'/5StU3JCrBR2r1s1j8K1tux+5XeSvdqaM8lMFNorzbY5iyoBbR'
'S56gy1jmm43QsMPJsrpfUZKcJpRENSe3OxIIwWXRoiapZe78u/'
@@ -4521,12 +4522,22 @@ class KeypairAPITestCase(BaseTestCase):
def db_key_pair_destroy(context, user_id, name):
pass
+ def db_key_pair_get(context, user_id, name):
+ if name == self.existing_key_name:
+ return {'name': self.existing_key_name,
+ 'public_key': self.pub_key,
+ 'fingerprint': self.fingerprint}
+ else:
+ raise exception.KeypairNotFound(user_id=user_id, name=name)
+
self.stubs.Set(db, "key_pair_get_all_by_user",
db_key_pair_get_all_by_user)
self.stubs.Set(db, "key_pair_create",
db_key_pair_create)
self.stubs.Set(db, "key_pair_destroy",
db_key_pair_destroy)
+ self.stubs.Set(db, "key_pair_get",
+ db_key_pair_get)
def test_create_keypair(self):
keypair = self.keypair_api.create_key_pair(self.ctxt,
@@ -4544,13 +4555,10 @@ class KeypairAPITestCase(BaseTestCase):
self.ctxt, self.ctxt.user_id, '* BAD CHARACTERS! *')
def test_create_keypair_already_exists(self):
- def db_key_pair_get(context, user_id, name):
- pass
- self.stubs.Set(db, "key_pair_get",
- db_key_pair_get)
self.assertRaises(exception.KeyPairExists,
self.keypair_api.create_key_pair,
- self.ctxt, self.ctxt.user_id, 'foo')
+ self.ctxt, self.ctxt.user_id,
+ self.existing_key_name)
def test_create_keypair_quota_limit(self):
def fake_quotas_count(self, context, resource, *args, **kwargs):
@@ -4594,6 +4602,12 @@ class KeypairAPITestCase(BaseTestCase):
self.keypair_api.import_key_pair,
self.ctxt, self.ctxt.user_id, 'foo', self.pub_key)
+ def test_get_keypair(self):
+ keypair = self.keypair_api.get_key_pair(self.ctxt,
+ self.ctxt.user_id,
+ self.existing_key_name)
+ self.assertEqual(self.existing_key_name, keypair['name'])
+
class DisabledInstanceTypesTestCase(BaseTestCase):
"""