Skip to content

Commit 9fd3dba

Browse files
committed
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
1 parent 4a19f67 commit 9fd3dba

4 files changed

Lines changed: 102 additions & 4 deletions

File tree

doc/source/command-objects/network-qos-policy.rst

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,25 @@ List Network QoS policies
7373
.. code:: bash
7474
7575
openstack network qos policy list
76+
[--project <project> [--project-domain <project-domain>]]
77+
[--share | --no-share]
78+
79+
.. option:: --project <project>
80+
81+
List qos policies according to their project (name or ID)
82+
83+
.. option:: --project-domain <project-domain>
84+
85+
Domain the project belongs to (name or ID).
86+
This can be used in case collisions between project names exist.
87+
88+
.. option:: --share
89+
90+
List qos policies shared between projects
91+
92+
.. option:: --no-share
93+
94+
List qos policies not shared between projects
7695
7796
network qos policy set
7897
----------------------

openstackclient/network/v2/network_qos_policy.py

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ def _get_columns(item):
3737

3838
def _get_attrs(client_manager, parsed_args):
3939
attrs = {}
40-
if parsed_args.name is not None:
40+
if 'name' in parsed_args and parsed_args.name is not None:
4141
attrs['name'] = str(parsed_args.name)
42-
if parsed_args.description is not None:
42+
if 'description' in parsed_args and parsed_args.description is not None:
4343
attrs['description'] = parsed_args.description
4444
if parsed_args.share:
4545
attrs['shared'] = True
@@ -143,6 +143,27 @@ def take_action(self, parsed_args):
143143
class ListNetworkQosPolicy(command.Lister):
144144
_description = _("List QoS policies")
145145

146+
def get_parser(self, prog_name):
147+
parser = super(ListNetworkQosPolicy, self).get_parser(prog_name)
148+
parser.add_argument(
149+
'--project',
150+
metavar='<project>',
151+
help=_("List qos policies according to their project (name or ID)")
152+
)
153+
identity_common.add_project_domain_option_to_parser(parser)
154+
shared_group = parser.add_mutually_exclusive_group()
155+
shared_group.add_argument(
156+
'--share',
157+
action='store_true',
158+
help=_("List qos policies shared between projects")
159+
)
160+
shared_group.add_argument(
161+
'--no-share',
162+
action='store_true',
163+
help=_("List qos policies not shared between projects")
164+
)
165+
return parser
166+
146167
def take_action(self, parsed_args):
147168
client = self.app.client_manager.network
148169
columns = (
@@ -157,8 +178,8 @@ def take_action(self, parsed_args):
157178
'Shared',
158179
'Project',
159180
)
160-
data = client.qos_policies()
161-
181+
attrs = _get_attrs(self.app.client_manager, parsed_args)
182+
data = client.qos_policies(**attrs)
162183
return (column_headers,
163184
(utils.get_item_properties(
164185
s, columns, formatters={},

openstackclient/tests/unit/network/v2/test_network_qos_policy.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,59 @@ def test_qos_policy_list(self):
250250
self.assertEqual(self.columns, columns)
251251
self.assertEqual(self.data, list(data))
252252

253+
def test_qos_policy_list_share(self):
254+
arglist = [
255+
'--share',
256+
]
257+
verifylist = [
258+
('share', True),
259+
]
260+
261+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
262+
columns, data = self.cmd.take_action(parsed_args)
263+
264+
self.network.qos_policies.assert_called_once_with(
265+
**{'shared': True}
266+
)
267+
self.assertEqual(self.columns, columns)
268+
self.assertEqual(self.data, list(data))
269+
270+
def test_qos_policy_list_no_share(self):
271+
arglist = [
272+
'--no-share',
273+
]
274+
verifylist = [
275+
('no_share', True),
276+
]
277+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
278+
columns, data = self.cmd.take_action(parsed_args)
279+
280+
self.network.qos_policies.assert_called_once_with(
281+
**{'shared': False}
282+
)
283+
self.assertEqual(self.columns, columns)
284+
self.assertEqual(self.data, list(data))
285+
286+
def test_network_qos_list_project(self):
287+
project = identity_fakes_v3.FakeProject.create_one_project()
288+
self.projects_mock.get.return_value = project
289+
arglist = [
290+
'--project', project.id,
291+
'--project-domain', project.domain_id,
292+
]
293+
verifylist = [
294+
('project', project.id),
295+
]
296+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
297+
298+
columns, data = self.cmd.take_action(parsed_args)
299+
self.network.qos_policies.assert_called_once_with(
300+
**{'tenant_id': project.id}
301+
)
302+
303+
self.assertEqual(self.columns, columns)
304+
self.assertEqual(self.data, list(data))
305+
253306

254307
class TestSetNetworkQosPolicy(TestQosPolicy):
255308

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- Add ``--share``, ``--no-share``, ``--project``, ``--project-domain``
4+
options to ``qos policy list`` command.
5+
[Blueprint `network-commands-options <https://blueprints.launchpad.net/python-openstackclient/+spec/network-commands-options>`_]

0 commit comments

Comments
 (0)