Skip to content

Commit a8d1ee7

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Add qos rule type filtering"
2 parents 21c3c33 + bfab019 commit a8d1ee7

4 files changed

Lines changed: 95 additions & 1 deletion

File tree

openstackclient/network/v2/network_qos_rule_type.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,23 @@ def _get_columns(item):
3232
class ListNetworkQosRuleType(command.Lister):
3333
_description = _("List QoS rule types")
3434

35+
def get_parser(self, prog_name):
36+
parser = super().get_parser(prog_name)
37+
supported = parser.add_mutually_exclusive_group()
38+
supported.add_argument(
39+
'--all-supported',
40+
action='store_true',
41+
help=_("List all the QoS rule types supported by any loaded "
42+
"mechanism drivers (the union of all sets of supported "
43+
"rules)")
44+
)
45+
supported.add_argument(
46+
'--all-rules',
47+
action='store_true',
48+
help=_("List all QoS rule types implemented in Neutron QoS driver")
49+
)
50+
return parser
51+
3552
def take_action(self, parsed_args):
3653
client = self.app.client_manager.network
3754
columns = (
@@ -40,7 +57,13 @@ def take_action(self, parsed_args):
4057
column_headers = (
4158
'Type',
4259
)
43-
data = client.qos_rule_types()
60+
61+
args = {}
62+
if parsed_args.all_supported:
63+
args['all_supported'] = True
64+
elif parsed_args.all_rules:
65+
args['all_rules'] = True
66+
data = client.qos_rule_types(**args)
4467

4568
return (column_headers,
4669
(utils.get_item_properties(

openstackclient/tests/functional/network/v2/test_network_qos_rule_type.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ class NetworkQosRuleTypeTests(common.NetworkTests):
2121

2222
AVAILABLE_RULE_TYPES = ['dscp_marking',
2323
'bandwidth_limit']
24+
# NOTE(ralonsoh): this list was updated in Yoga (February 2022)
25+
ALL_AVAILABLE_RULE_TYPES = ['dscp_marking',
26+
'bandwidth_limit',
27+
'minimum_bandwidth',
28+
'packet_rate_limit',
29+
'minimum_packet_rate',
30+
]
2431

2532
def setUp(self):
2633
super(NetworkQosRuleTypeTests, self).setUp()
@@ -36,6 +43,28 @@ def test_qos_rule_type_list(self):
3643
for rule_type in self.AVAILABLE_RULE_TYPES:
3744
self.assertIn(rule_type, [x['Type'] for x in cmd_output])
3845

46+
def test_qos_rule_type_list_all_supported(self):
47+
if not self.is_extension_enabled('qos-rule-type-filter'):
48+
self.skipTest('No "qos-rule-type-filter" extension present')
49+
50+
cmd_output = self.openstack(
51+
'network qos rule type list --all-supported -f json',
52+
parse_output=True
53+
)
54+
for rule_type in self.AVAILABLE_RULE_TYPES:
55+
self.assertIn(rule_type, [x['Type'] for x in cmd_output])
56+
57+
def test_qos_rule_type_list_all_rules(self):
58+
if not self.is_extension_enabled('qos-rule-type-filter'):
59+
self.skipTest('No "qos-rule-type-filter" extension present')
60+
61+
cmd_output = self.openstack(
62+
'network qos rule type list --all-rules -f json',
63+
parse_output=True
64+
)
65+
for rule_type in self.ALL_AVAILABLE_RULE_TYPES:
66+
self.assertIn(rule_type, [x['Type'] for x in cmd_output])
67+
3968
def test_qos_rule_type_details(self):
4069
for rule_type in self.AVAILABLE_RULE_TYPES:
4170
cmd_output = self.openstack(

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,37 @@ def test_qos_rule_type_list(self):
115115
self.network.qos_rule_types.assert_called_once_with(**{})
116116
self.assertEqual(self.columns, columns)
117117
self.assertEqual(self.data, list(data))
118+
119+
def test_qos_rule_type_list_all_supported(self):
120+
arglist = [
121+
'--all-supported'
122+
]
123+
verifylist = [
124+
('all_supported', True),
125+
]
126+
127+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
128+
columns, data = self.cmd.take_action(parsed_args)
129+
130+
self.network.qos_rule_types.assert_called_once_with(
131+
**{'all_supported': True}
132+
)
133+
self.assertEqual(self.columns, columns)
134+
self.assertEqual(self.data, list(data))
135+
136+
def test_qos_rule_type_list_all_rules(self):
137+
arglist = [
138+
'--all-rules'
139+
]
140+
verifylist = [
141+
('all_rules', True),
142+
]
143+
144+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
145+
columns, data = self.cmd.take_action(parsed_args)
146+
147+
self.network.qos_rule_types.assert_called_once_with(
148+
**{'all_rules': True}
149+
)
150+
self.assertEqual(self.columns, columns)
151+
self.assertEqual(self.data, list(data))
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
features:
3+
- |
4+
Added two new filter flags to ``openstack network qos rule type list``:
5+
``--all-supported``, to return any QoS rule type supported by at least
6+
one loaded driver; ``--all-rules``, to return all QoS rule types
7+
supported by the current version of Neutron server, regardless of the
8+
loaded drivers.

0 commit comments

Comments
 (0)