diff --git a/novaclient/tests/v1_1/fakes.py b/novaclient/tests/v1_1/fakes.py index 85b8d940b..552a0847a 100644 --- a/novaclient/tests/v1_1/fakes.py +++ b/novaclient/tests/v1_1/fakes.py @@ -875,6 +875,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 244f292bf..0bdabe4f1 100644 --- a/novaclient/v1_1/shell.py +++ b/novaclient/v1_1/shell.py @@ -2157,6 +2157,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='', + 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',