summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlvjiawei <lvjiawei@cmss.chinamobile.com>2016-11-23 09:26:14 -0500
committerzhangoic <zhangoic@163.com>2017-03-14 13:04:47 +0800
commit9fd3dba11e5fc60023a9c332cfb76b42d38adf05 (patch)
tree7d1cd03929d28aaec2b0ecd9d3bfd4d2dd85dd5e
parent4a19f6753b9e21b3089824d17943b39c211a616a (diff)
downloadpython-openstackclient-9fd3dba11e5fc60023a9c332cfb76b42d38adf05.tar.gz
Add extra filtering options to qos policy list
The patch adds filtering "--project", "--project-domain", "--share", "--no-share" options to qos policy list. Change-Id: I5c012fb27fb952f736ddc9fbc54ef6da4d0af5e0 Partially-Implements: blueprint network-commands-options
-rw-r--r--doc/source/command-objects/network-qos-policy.rst19
-rw-r--r--openstackclient/network/v2/network_qos_policy.py29
-rw-r--r--openstackclient/tests/unit/network/v2/test_network_qos_policy.py53
-rw-r--r--releasenotes/notes/add-qos-policy-list-options-9ba1ae731a88e7ac.yaml5
4 files changed, 102 insertions, 4 deletions
diff --git a/doc/source/command-objects/network-qos-policy.rst b/doc/source/command-objects/network-qos-policy.rst
index 7ec6776c..a75c32fe 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> [--project-domain <project-domain>]]
+ [--share | --no-share]
+
+.. option:: --project <project>
+
+ List qos policies according to their project (name or ID)
+
+.. option:: --project-domain <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 5ccbe36b..fef3ec88 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='<project>',
+ 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 bd30579a..667f5015 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 00000000..ab832ce5
--- /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 <https://blueprints.launchpad.net/python-openstackclient/+spec/network-commands-options>`_]