Merge "Support list commands by group name keyword"
This commit is contained in:
commit
e5ee4b8ca3
@ -15,3 +15,9 @@ List recognized commands by group
|
|||||||
.. code:: bash
|
.. code:: bash
|
||||||
|
|
||||||
openstack command list
|
openstack command list
|
||||||
|
[--group <group-keyword>]
|
||||||
|
|
||||||
|
.. option:: --group <group-keyword>
|
||||||
|
|
||||||
|
Show commands filtered by a command group, for example: identity, volume,
|
||||||
|
compute, image, network and other keywords
|
||||||
|
@ -29,12 +29,26 @@ class ListCommand(command.Lister):
|
|||||||
|
|
||||||
auth_required = False
|
auth_required = False
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(ListCommand, self).get_parser(prog_name)
|
||||||
|
parser.add_argument(
|
||||||
|
'--group',
|
||||||
|
metavar='<group-keyword>',
|
||||||
|
help=_('Show commands filtered by a command group, for example: '
|
||||||
|
'identity, volume, compute, image, network and '
|
||||||
|
'other keywords'),
|
||||||
|
)
|
||||||
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
cm = self.app.command_manager
|
cm = self.app.command_manager
|
||||||
groups = cm.get_command_groups()
|
groups = cm.get_command_groups()
|
||||||
groups = sorted(groups)
|
groups = sorted(groups)
|
||||||
columns = ('Command Group', 'Commands')
|
columns = ('Command Group', 'Commands')
|
||||||
|
|
||||||
|
if parsed_args.group:
|
||||||
|
groups = (group for group in groups if parsed_args.group in group)
|
||||||
|
|
||||||
commands = []
|
commands = []
|
||||||
for group in groups:
|
for group in groups:
|
||||||
command_names = cm.get_command_names(group)
|
command_names = cm.get_command_names(group)
|
||||||
|
@ -42,3 +42,38 @@ class ModuleTest(base.TestCase):
|
|||||||
cmd_output = json.loads(self.openstack('module list --all -f json'))
|
cmd_output = json.loads(self.openstack('module list --all -f json'))
|
||||||
for one_module in self.CLIENTS + self.LIBS:
|
for one_module in self.CLIENTS + self.LIBS:
|
||||||
self.assertIn(one_module, cmd_output.keys())
|
self.assertIn(one_module, cmd_output.keys())
|
||||||
|
|
||||||
|
|
||||||
|
class CommandTest(base.TestCase):
|
||||||
|
"""Functional tests for openstackclient command list."""
|
||||||
|
GROUPS = [
|
||||||
|
'openstack.volume.v2',
|
||||||
|
'openstack.network.v2',
|
||||||
|
'openstack.image.v2',
|
||||||
|
'openstack.identity.v3',
|
||||||
|
'openstack.compute.v2',
|
||||||
|
'openstack.common',
|
||||||
|
'openstack.cli',
|
||||||
|
]
|
||||||
|
|
||||||
|
def test_command_list_no_option(self):
|
||||||
|
cmd_output = json.loads(self.openstack('command list -f json'))
|
||||||
|
group_names = [each.get('Command Group') for each in cmd_output]
|
||||||
|
for one_group in self.GROUPS:
|
||||||
|
self.assertIn(one_group, group_names)
|
||||||
|
|
||||||
|
def test_command_list_with_group(self):
|
||||||
|
input_groups = [
|
||||||
|
'volume',
|
||||||
|
'network',
|
||||||
|
'image',
|
||||||
|
'identity',
|
||||||
|
'compute.v2'
|
||||||
|
]
|
||||||
|
for each_input in input_groups:
|
||||||
|
cmd_output = json.loads(self.openstack(
|
||||||
|
'command list --group %s -f json' % each_input
|
||||||
|
))
|
||||||
|
group_names = [each.get('Command Group') for each in cmd_output]
|
||||||
|
for each_name in group_names:
|
||||||
|
self.assertIn(each_input, each_name)
|
||||||
|
@ -88,6 +88,41 @@ class TestCommandList(utils.TestCommand):
|
|||||||
|
|
||||||
self.assertEqual(datalist, tuple(data))
|
self.assertEqual(datalist, tuple(data))
|
||||||
|
|
||||||
|
def test_command_list_with_group_not_found(self):
|
||||||
|
arglist = [
|
||||||
|
'--group', 'not_exist',
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('group', 'not_exist'),
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
collist = ('Command Group', 'Commands')
|
||||||
|
self.assertEqual(collist, columns)
|
||||||
|
self.assertEqual([], data)
|
||||||
|
|
||||||
|
def test_command_list_with_group(self):
|
||||||
|
arglist = [
|
||||||
|
'--group', 'common',
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('group', 'common'),
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
collist = ('Command Group', 'Commands')
|
||||||
|
self.assertEqual(collist, columns)
|
||||||
|
datalist = ((
|
||||||
|
'openstack.common',
|
||||||
|
'limits show\nextension list'
|
||||||
|
),)
|
||||||
|
|
||||||
|
self.assertEqual(datalist, tuple(data))
|
||||||
|
|
||||||
|
|
||||||
@mock.patch.dict(
|
@mock.patch.dict(
|
||||||
'openstackclient.common.module.sys.modules',
|
'openstackclient.common.module.sys.modules',
|
||||||
|
11
releasenotes/notes/bug-1666780-c10010e9061689d3.yaml
Normal file
11
releasenotes/notes/bug-1666780-c10010e9061689d3.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Support list commands by group name keyword. Add ``--group`` option to
|
||||||
|
filter the commands by group name keyword, like: --group volume, list all
|
||||||
|
openstack.volume.v2 (cinder) commands.
|
||||||
|
That support the scenario that users need to know the current support
|
||||||
|
commands of some OpenStack services(nova, neutron, cinder and so on) in
|
||||||
|
OSC, and make it easier for users to find out the related commands that
|
||||||
|
they care about.
|
||||||
|
[Bug `1666780 <https://bugs.launchpad.net/python-openstackclient/+bug/1666780>`_]
|
Loading…
Reference in New Issue
Block a user