OSC Extension Show

Implement Neutron feature of Extension Show into
OpenStack Client.

Change-Id: Ifecb794838cb3bf8c2466d178345349db3cd4003
Implements: blueprint extension-show
This commit is contained in:
Sindhu Devale 2016-10-04 13:02:41 -05:00 committed by Steve Martinelli
parent 62bf9e2609
commit 832b2591cf
6 changed files with 155 additions and 0 deletions

View File

@ -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)

View File

@ -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

View File

@ -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'))

View File

@ -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)

View File

@ -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>`_]

View File

@ -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