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
|
||||
|
||||
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
|
||||
|
||||
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):
|
||||
cm = self.app.command_manager
|
||||
groups = cm.get_command_groups()
|
||||
groups = sorted(groups)
|
||||
columns = ('Command Group', 'Commands')
|
||||
|
||||
if parsed_args.group:
|
||||
groups = (group for group in groups if parsed_args.group in group)
|
||||
|
||||
commands = []
|
||||
for group in groups:
|
||||
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'))
|
||||
for one_module in self.CLIENTS + self.LIBS:
|
||||
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))
|
||||
|
||||
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(
|
||||
'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