Skip to content

Commit 07f0c7a

Browse files
slawqoDean Troyer
authored andcommitted
Display Network QoS rule type details
Neutron API now supports getting details of supported QoS rule type. This patch adds support for this feature to OpenStack client. Change-Id: I74d16563ce2236a7c899f5994f1dab43ace02138 Depends-On: I448b5d4f8e4ef42eafe50d9d6c63d0be666f98fc Related-Bug: #1686035
1 parent 8efed05 commit 07f0c7a

6 files changed

Lines changed: 113 additions & 0 deletions

File tree

doc/source/cli/command-objects/network-qos-rule-type.rst

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,18 @@ List Network QoS rule types
1616
.. code:: bash
1717
1818
openstack network qos rule type list
19+
20+
network qos rule type show
21+
--------------------------
22+
23+
Display Network QoS rule type details
24+
25+
.. program:: network qos rule type show
26+
.. code:: bash
27+
28+
openstack network qos rule type show
29+
<rule-type-name>
30+
31+
.. describe:: <rule-type-name>
32+
33+
Name of QoS rule type (minimum-bandwidth, dscp-marking, bandwidth-limit)

openstackclient/network/v2/network_qos_rule_type.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,17 @@
1717
from osc_lib import utils
1818

1919
from openstackclient.i18n import _
20+
from openstackclient.network import sdk_utils
21+
22+
23+
def _get_columns(item):
24+
column_map = {
25+
"type": "rule_type_name",
26+
"drivers": "drivers",
27+
}
28+
invisible_columns = ["id", "name"]
29+
return sdk_utils.get_osc_show_columns_for_sdk_resource(
30+
item, column_map, invisible_columns)
2031

2132

2233
class ListNetworkQosRuleType(command.Lister):
@@ -36,3 +47,23 @@ def take_action(self, parsed_args):
3647
(utils.get_item_properties(
3748
s, columns, formatters={},
3849
) for s in data))
50+
51+
52+
class ShowNetworkQosRuleType(command.ShowOne):
53+
_description = _("Show details about supported QoS rule type")
54+
55+
def get_parser(self, prog_name):
56+
parser = super(ShowNetworkQosRuleType, self).get_parser(prog_name)
57+
parser.add_argument(
58+
'rule_type',
59+
metavar="<qos-rule-type-name>",
60+
help=_("Name of QoS rule type")
61+
)
62+
return parser
63+
64+
def take_action(self, parsed_args):
65+
client = self.app.client_manager.network
66+
obj = client.get_qos_rule_type(parsed_args.rule_type)
67+
display_columns, columns = _get_columns(obj)
68+
data = utils.get_item_properties(obj, columns)
69+
return display_columns, data

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,10 @@ def test_qos_rule_type_list(self):
3535
'network qos rule type list -f json'))
3636
for rule_type in self.AVAILABLE_RULE_TYPES:
3737
self.assertIn(rule_type, [x['Type'] for x in cmd_output])
38+
39+
def test_qos_rule_type_details(self):
40+
for rule_type in self.AVAILABLE_RULE_TYPES:
41+
cmd_output = json.loads(self.openstack(
42+
'network qos rule type show %s -f json' % rule_type))
43+
self.assertEqual(rule_type, cmd_output['rule_type_name'])
44+
self.assertIn("drivers", cmd_output.keys())

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

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
from openstackclient.network.v2 import network_qos_rule_type as _qos_rule_type
1919
from openstackclient.tests.unit.network.v2 import fakes as network_fakes
20+
from openstackclient.tests.unit import utils as tests_utils
2021

2122

2223
class TestNetworkQosRuleType(network_fakes.TestNetworkV2):
@@ -27,6 +28,60 @@ def setUp(self):
2728
self.network = self.app.client_manager.network
2829

2930

31+
class TestShowNetworkQosRuleType(TestNetworkQosRuleType):
32+
33+
attrs = {
34+
'drivers': [{
35+
'name': 'driver 1',
36+
'supported_parameters': []
37+
}]
38+
}
39+
# The QoS policies to show.
40+
qos_rule_type = (
41+
network_fakes.FakeNetworkQosRuleType.create_one_qos_rule_type(attrs))
42+
columns = (
43+
'drivers',
44+
'rule_type_name'
45+
)
46+
data = [
47+
qos_rule_type.drivers,
48+
qos_rule_type.type
49+
]
50+
51+
def setUp(self):
52+
super(TestShowNetworkQosRuleType, self).setUp()
53+
self.network.get_qos_rule_type = mock.Mock(
54+
return_value=self.qos_rule_type)
55+
56+
# Get the command object to test
57+
self.cmd = _qos_rule_type.ShowNetworkQosRuleType(self.app,
58+
self.namespace)
59+
60+
def test_show_no_options(self):
61+
arglist = []
62+
verifylist = []
63+
64+
# Missing required args should bail here
65+
self.assertRaises(tests_utils.ParserException, self.check_parser,
66+
self.cmd, arglist, verifylist)
67+
68+
def test_show_all_options(self):
69+
arglist = [
70+
self.qos_rule_type.type,
71+
]
72+
verifylist = [
73+
('rule_type', self.qos_rule_type.type),
74+
]
75+
76+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
77+
columns, data = self.cmd.take_action(parsed_args)
78+
79+
self.network.get_qos_rule_type.assert_called_once_with(
80+
self.qos_rule_type.type)
81+
self.assertEqual(self.columns, columns)
82+
self.assertEqual(list(self.data), list(data))
83+
84+
3085
class TestListNetworkQosRuleType(TestNetworkQosRuleType):
3186

3287
# The QoS policies to list up.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
features:
3+
- |
4+
Add ``network qos rule type show`` command.

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,7 @@ openstack.network.v2 =
424424
network_qos_rule_show = openstackclient.network.v2.network_qos_rule:ShowNetworkQosRule
425425

426426
network_qos_rule_type_list = openstackclient.network.v2.network_qos_rule_type:ListNetworkQosRuleType
427+
network_qos_rule_type_show = openstackclient.network.v2.network_qos_rule_type:ShowNetworkQosRuleType
427428

428429
network_rbac_create = openstackclient.network.v2.network_rbac:CreateNetworkRBAC
429430
network_rbac_delete = openstackclient.network.v2.network_rbac:DeleteNetworkRBAC

0 commit comments

Comments
 (0)