Merge "OSC Extension Show"

This commit is contained in:
Jenkins 2017-03-23 20:30:15 +00:00 committed by Gerrit Code Review
commit 2a64a64046
6 changed files with 155 additions and 0 deletions

View File

@ -39,3 +39,20 @@ List API extensions
.. option:: --long .. option:: --long
List additional fields in output 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) LOG.warning(message)
return (columns, extension_tuples) 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.identity.v2_0 import fakes as identity_fakes
from openstackclient.tests.unit.network.v2 import fakes as network_fakes from openstackclient.tests.unit.network.v2 import fakes as network_fakes
from openstackclient.tests.unit import utils 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 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._test_extension_list_helper(arglist, verifylist, datalist)
self.volume_extensions_mock.show_all.assert_called_with() 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

@ -45,6 +45,7 @@ openstack.common =
availability_zone_list = openstackclient.common.availability_zone:ListAvailabilityZone availability_zone_list = openstackclient.common.availability_zone:ListAvailabilityZone
configuration_show = openstackclient.common.configuration:ShowConfiguration configuration_show = openstackclient.common.configuration:ShowConfiguration
extension_list = openstackclient.common.extension:ListExtension extension_list = openstackclient.common.extension:ListExtension
extension_show = openstackclient.common.extension:ShowExtension
limits_show = openstackclient.common.limits:ShowLimits limits_show = openstackclient.common.limits:ShowLimits
quota_list = openstackclient.common.quota:ListQuota quota_list = openstackclient.common.quota:ListQuota
quota_set = openstackclient.common.quota:SetQuota quota_set = openstackclient.common.quota:SetQuota