diff --git a/doc/source/command-objects/network-qos-policy.rst b/doc/source/command-objects/network-qos-policy.rst index 7ec6776c97..a75c32fe7b 100644 --- a/doc/source/command-objects/network-qos-policy.rst +++ b/doc/source/command-objects/network-qos-policy.rst @@ -73,6 +73,25 @@ List Network QoS policies .. code:: bash openstack network qos policy list + [--project [--project-domain ]] + [--share | --no-share] + +.. option:: --project + + List qos policies according to their project (name or ID) + +.. option:: --project-domain + + Domain the project belongs to (name or ID). + This can be used in case collisions between project names exist. + +.. option:: --share + + List qos policies shared between projects + +.. option:: --no-share + + List qos policies not shared between projects network qos policy set ---------------------- diff --git a/openstackclient/network/v2/network_qos_policy.py b/openstackclient/network/v2/network_qos_policy.py index 5ccbe36b03..fef3ec88a2 100644 --- a/openstackclient/network/v2/network_qos_policy.py +++ b/openstackclient/network/v2/network_qos_policy.py @@ -37,9 +37,9 @@ def _get_columns(item): def _get_attrs(client_manager, parsed_args): attrs = {} - if parsed_args.name is not None: + if 'name' in parsed_args and parsed_args.name is not None: attrs['name'] = str(parsed_args.name) - if parsed_args.description is not None: + if 'description' in parsed_args and parsed_args.description is not None: attrs['description'] = parsed_args.description if parsed_args.share: attrs['shared'] = True @@ -143,6 +143,27 @@ class DeleteNetworkQosPolicy(command.Command): class ListNetworkQosPolicy(command.Lister): _description = _("List QoS policies") + def get_parser(self, prog_name): + parser = super(ListNetworkQosPolicy, self).get_parser(prog_name) + parser.add_argument( + '--project', + metavar='', + help=_("List qos policies according to their project (name or ID)") + ) + identity_common.add_project_domain_option_to_parser(parser) + shared_group = parser.add_mutually_exclusive_group() + shared_group.add_argument( + '--share', + action='store_true', + help=_("List qos policies shared between projects") + ) + shared_group.add_argument( + '--no-share', + action='store_true', + help=_("List qos policies not shared between projects") + ) + return parser + def take_action(self, parsed_args): client = self.app.client_manager.network columns = ( @@ -157,8 +178,8 @@ class ListNetworkQosPolicy(command.Lister): 'Shared', 'Project', ) - data = client.qos_policies() - + attrs = _get_attrs(self.app.client_manager, parsed_args) + data = client.qos_policies(**attrs) return (column_headers, (utils.get_item_properties( s, columns, formatters={}, diff --git a/openstackclient/tests/unit/network/v2/test_network_qos_policy.py b/openstackclient/tests/unit/network/v2/test_network_qos_policy.py index bd30579af7..667f501514 100644 --- a/openstackclient/tests/unit/network/v2/test_network_qos_policy.py +++ b/openstackclient/tests/unit/network/v2/test_network_qos_policy.py @@ -250,6 +250,59 @@ class TestListNetworkQosPolicy(TestQosPolicy): self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) + def test_qos_policy_list_share(self): + arglist = [ + '--share', + ] + verifylist = [ + ('share', True), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = self.cmd.take_action(parsed_args) + + self.network.qos_policies.assert_called_once_with( + **{'shared': True} + ) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, list(data)) + + def test_qos_policy_list_no_share(self): + arglist = [ + '--no-share', + ] + verifylist = [ + ('no_share', True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = self.cmd.take_action(parsed_args) + + self.network.qos_policies.assert_called_once_with( + **{'shared': False} + ) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, list(data)) + + def test_network_qos_list_project(self): + project = identity_fakes_v3.FakeProject.create_one_project() + self.projects_mock.get.return_value = project + arglist = [ + '--project', project.id, + '--project-domain', project.domain_id, + ] + verifylist = [ + ('project', project.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + self.network.qos_policies.assert_called_once_with( + **{'tenant_id': project.id} + ) + + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, list(data)) + class TestSetNetworkQosPolicy(TestQosPolicy): diff --git a/releasenotes/notes/add-qos-policy-list-options-9ba1ae731a88e7ac.yaml b/releasenotes/notes/add-qos-policy-list-options-9ba1ae731a88e7ac.yaml new file mode 100644 index 0000000000..ab832ce566 --- /dev/null +++ b/releasenotes/notes/add-qos-policy-list-options-9ba1ae731a88e7ac.yaml @@ -0,0 +1,5 @@ +--- +features: + - Add ``--share``, ``--no-share``, ``--project``, ``--project-domain`` + options to ``qos policy list`` command. + [Blueprint `network-commands-options `_]