summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSindhu Devale <sindhu.devale@intel.com>2016-10-04 13:02:41 -0500
committerSteve Martinelli <s.martinelli@gmail.com>2017-03-22 16:39:19 +0000
commit832b2591cf299bf51c1922df1cdd4ba0aabe88c0 (patch)
tree193de8b30ad51368696a65224f85e1f99527888b
parent62bf9e2609bd5d092ff1b238546a1fc6175bd575 (diff)
downloadpython-openstackclient-832b2591cf299bf51c1922df1cdd4ba0aabe88c0.tar.gz
OSC Extension Show
Implement Neutron feature of Extension Show into OpenStack Client. Change-Id: Ifecb794838cb3bf8c2466d178345349db3cd4003 Implements: blueprint extension-show
-rw-r--r--doc/source/command-objects/extension.rst17
-rw-r--r--openstackclient/common/extension.py29
-rw-r--r--openstackclient/tests/functional/common/test_extension.py42
-rw-r--r--openstackclient/tests/unit/common/test_extension.py58
-rw-r--r--releasenotes/notes/bp-extension-show-6f7e31a27dad0dc9.yaml8
-rw-r--r--setup.cfg1
6 files changed, 155 insertions, 0 deletions
diff --git a/doc/source/command-objects/extension.rst b/doc/source/command-objects/extension.rst
index dff30fa1..4d71bbc7 100644
--- a/doc/source/command-objects/extension.rst
+++ b/doc/source/command-objects/extension.rst
@@ -39,3 +39,20 @@ List API extensions
.. option:: --long
List additional fields in output
+
+extension show
+--------------
+
+Show API extension
+
+.. program:: extension show
+.. code:: bash
+
+ openstack extension show
+ <extension>
+
+.. _extension_show:
+.. describe:: <extension>
+
+ Extension to display. Currently, only network extensions are supported.
+ (Name or Alias)
diff --git a/openstackclient/common/extension.py b/openstackclient/common/extension.py
index de480016..07c407f6 100644
--- a/openstackclient/common/extension.py
+++ b/openstackclient/common/extension.py
@@ -134,3 +134,32 @@ class ListExtension(command.Lister):
LOG.warning(message)
return (columns, extension_tuples)
+
+
+class ShowExtension(command.ShowOne):
+ _description = _("Show API extension")
+
+ def get_parser(self, prog_name):
+ parser = super(ShowExtension, self).get_parser(prog_name)
+ parser.add_argument(
+ 'extension',
+ metavar='<extension>',
+ help=_('Extension to display. '
+ 'Currently, only network extensions are supported. '
+ '(Name or Alias)'),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ client = self.app.client_manager.network
+ columns = ('Alias', 'Description', 'Links', 'Name',
+ 'Namespace', 'Updated')
+ ext = str(parsed_args.extension)
+ obj = client.find_extension(ext)
+ dict_tuples = (utils.get_item_properties(
+ obj,
+ columns,
+ formatters={},)
+ )
+
+ return columns, dict_tuples
diff --git a/openstackclient/tests/functional/common/test_extension.py b/openstackclient/tests/functional/common/test_extension.py
new file mode 100644
index 00000000..7c527eae
--- /dev/null
+++ b/openstackclient/tests/functional/common/test_extension.py
@@ -0,0 +1,42 @@
+# Copyright (c) 2017, Intel Corporation.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import json
+
+from openstackclient.tests.functional import base
+
+
+class TestExtension(base.TestCase):
+ """Functional tests for extension."""
+
+ def test_extension_list(self):
+ """Test extension list."""
+ json_output = json.loads(self.openstack(
+ 'extension list -f json ' + '--network')
+ )
+ self.assertEqual(
+ 'Default Subnetpools',
+ json_output[0]['Name'],
+ )
+
+ def test_extension_show(self):
+ """Test extension show."""
+ name = 'agent'
+ json_output = json.loads(self.openstack(
+ 'extension show -f json ' + name)
+ )
+ self.assertEqual(
+ name,
+ json_output.get('Alias'))
diff --git a/openstackclient/tests/unit/common/test_extension.py b/openstackclient/tests/unit/common/test_extension.py
index bf856ed1..68fdf17d 100644
--- a/openstackclient/tests/unit/common/test_extension.py
+++ b/openstackclient/tests/unit/common/test_extension.py
@@ -19,6 +19,7 @@ from openstackclient.tests.unit import fakes
from openstackclient.tests.unit.identity.v2_0 import fakes as identity_fakes
from openstackclient.tests.unit.network.v2 import fakes as network_fakes
from openstackclient.tests.unit import utils
+from openstackclient.tests.unit import utils as tests_utils
from openstackclient.tests.unit.volume.v2 import fakes as volume_fakes
@@ -242,3 +243,60 @@ class TestExtensionList(TestExtension):
), )
self._test_extension_list_helper(arglist, verifylist, datalist)
self.volume_extensions_mock.show_all.assert_called_with()
+
+
+class TestExtensionShow(TestExtension):
+ extension_details = (
+ network_fakes.FakeExtension.create_one_extension()
+ )
+
+ columns = (
+ 'Alias',
+ 'Description',
+ 'Links',
+ 'Name',
+ 'Namespace',
+ 'Updated'
+ )
+
+ data = (
+ extension_details.alias,
+ extension_details.description,
+ extension_details.links,
+ extension_details.name,
+ extension_details.namespace,
+ extension_details.updated
+ )
+
+ def setUp(self):
+ super(TestExtensionShow, self).setUp()
+
+ self.cmd = extension.ShowExtension(self.app, None)
+
+ self.app.client_manager.network.find_extension = mock.Mock(
+ return_value=self.extension_details)
+
+ def test_show_no_options(self):
+ arglist = []
+ verifylist = []
+
+ self.assertRaises(tests_utils.ParserException, self.check_parser,
+ self.cmd, arglist, verifylist)
+
+ def test_show_all_options(self):
+ arglist = [
+ self.extension_details.alias,
+ ]
+ verifylist = [
+ ('extension', self.extension_details.alias),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.app.client_manager.network.find_extension.assert_called_with(
+ self.extension_details.alias)
+
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
diff --git a/releasenotes/notes/bp-extension-show-6f7e31a27dad0dc9.yaml b/releasenotes/notes/bp-extension-show-6f7e31a27dad0dc9.yaml
new file mode 100644
index 00000000..21ed6470
--- /dev/null
+++ b/releasenotes/notes/bp-extension-show-6f7e31a27dad0dc9.yaml
@@ -0,0 +1,8 @@
+---
+features:
+ - |
+ Added `openstack extension show` command to allow users
+ to view the details of the extension. Currently works only for
+ network extensions.
+
+ [Blueprint `extension-show <https://blueprints.launchpad.net/python-openstackclient/+spec/extension-show>`_]
diff --git a/setup.cfg b/setup.cfg
index 2aa88740..9869d5a2 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -46,6 +46,7 @@ openstack.common =
availability_zone_list = openstackclient.common.availability_zone:ListAvailabilityZone
configuration_show = openstackclient.common.configuration:ShowConfiguration
extension_list = openstackclient.common.extension:ListExtension
+ extension_show = openstackclient.common.extension:ShowExtension
limits_show = openstackclient.common.limits:ShowLimits
quota_set = openstackclient.common.quota:SetQuota
quota_show = openstackclient.common.quota:ShowQuota