From 87bd54ff135baeddc80b9fa232fe9be1fc17db55 Mon Sep 17 00:00:00 2001 From: Sergey Lukjanov <slukjanov@mirantis.com> Date: Sun, 2 Jun 2013 19:37:01 +0400 Subject: [PATCH] The 'nova keypair-show key_name' command added. * 'os-keypairs' api extension used. Change-Id: Idbb529135b6629f02306c49d8095b5fcf94770cc --- novaclient/tests/v1_1/fakes.py | 3 +++ novaclient/tests/v1_1/test_keypairs.py | 6 ++++++ novaclient/v1_1/keypairs.py | 9 +++++++++ novaclient/v1_1/shell.py | 16 ++++++++++++++++ 4 files changed, 34 insertions(+) diff --git a/novaclient/tests/v1_1/fakes.py b/novaclient/tests/v1_1/fakes.py index 924d39051..c545ef719 100644 --- a/novaclient/tests/v1_1/fakes.py +++ b/novaclient/tests/v1_1/fakes.py @@ -848,6 +848,9 @@ class FakeHTTPClient(base_client.HTTPClient): # # Keypairs # + def get_os_keypairs_test(self, *kw): + return (200, {}, {'keypair': self.get_os_keypairs()[2]['keypairs'][0]}) + def get_os_keypairs(self, *kw): return (200, {}, {"keypairs": [ {'fingerprint': 'FAKE_KEYPAIR', 'name': 'test'} diff --git a/novaclient/tests/v1_1/test_keypairs.py b/novaclient/tests/v1_1/test_keypairs.py index 2814c88ef..64fbc0ead 100644 --- a/novaclient/tests/v1_1/test_keypairs.py +++ b/novaclient/tests/v1_1/test_keypairs.py @@ -8,6 +8,12 @@ cs = fakes.FakeClient() class KeypairsTest(utils.TestCase): + def test_get_keypair(self): + kp = cs.keypairs.get('test') + cs.assert_called('GET', '/os-keypairs/test') + self.assertTrue(isinstance(kp, keypairs.Keypair)) + self.assertEqual(kp.name, 'test') + def test_list_keypairs(self): kps = cs.keypairs.list() cs.assert_called('GET', '/os-keypairs') diff --git a/novaclient/v1_1/keypairs.py b/novaclient/v1_1/keypairs.py index e3423258e..28bd760c1 100644 --- a/novaclient/v1_1/keypairs.py +++ b/novaclient/v1_1/keypairs.py @@ -45,6 +45,15 @@ class Keypair(base.Resource): class KeypairManager(base.ManagerWithFind): resource_class = Keypair + def get(self, keypair): + """ + Get a keypair. + + :param keypair: The ID of the keypair to get. + :rtype: :class:`Keypair` + """ + return self._get("/os-keypairs/%s" % base.getid(keypair), "keypair") + def create(self, name, public_key=None): """ Create a keypair diff --git a/novaclient/v1_1/shell.py b/novaclient/v1_1/shell.py index 4c1627ce8..d28739ace 100644 --- a/novaclient/v1_1/shell.py +++ b/novaclient/v1_1/shell.py @@ -2137,6 +2137,22 @@ def do_keypair_list(cs, args): utils.print_list(keypairs, columns) +def _print_keypair(keypair): + kp = keypair._info.copy() + pk = kp.pop('public_key') + utils.print_dict(kp) + print "Public key: %s" % pk + + +@utils.arg('keypair', + metavar='<keypair>', + help="Name or ID of keypair") +def do_keypair_show(cs, args): + """Show details about the given keypair.""" + keypair = cs.keypairs.get(args.keypair) + _print_keypair(keypair) + + @utils.arg('--reserved', dest='reserved', action='store_true',