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',