Skip to content

Commit af7129c

Browse files
author
guiyanxing
committed
Add '--type'and other options to network rbac list
This patch adds '--type','--action','--long' filtering options to network rbac list command Change-Id: I21846820ab223bb7832e89eb2d7658bbec271aec Closes-Bug: #1648307 Partially-Implements: blueprint network-commands-options
1 parent 1b3f953 commit af7129c

4 files changed

Lines changed: 119 additions & 2 deletions

File tree

doc/source/command-objects/network-rbac.rst

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,21 @@ List network RBAC policies
7979
.. code:: bash
8080
8181
openstack network rbac list
82+
[--type <type>]
83+
[--action <action>]
84+
[--long]
85+
86+
.. option:: --type <type>
87+
88+
List network RBAC policies according to given object type ("qos_policy" or "network")
89+
90+
.. option:: --action <action>
91+
92+
List network RBAC policies according to given action ("access_as_external" or "access_as_shared")
93+
94+
.. option:: --long
95+
96+
List additional fields in output
8297
8398
network rbac set
8499
----------------

openstackclient/network/v2/network_rbac.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,30 @@ def take_action(self, parsed_args):
164164
class ListNetworkRBAC(command.Lister):
165165
_description = _("List network RBAC policies")
166166

167+
def get_parser(self, prog_name):
168+
parser = super(ListNetworkRBAC, self).get_parser(prog_name)
169+
parser.add_argument(
170+
'--type',
171+
metavar='<type>',
172+
choices=['qos_policy', 'network'],
173+
help=_('List network RBAC policies according to '
174+
'given object type ("qos_policy" or "network")')
175+
)
176+
parser.add_argument(
177+
'--action',
178+
metavar='<action>',
179+
choices=['access_as_external', 'access_as_shared'],
180+
help=_('List network RBAC policies according to given '
181+
'action ("access_as_external" or "access_as_shared")')
182+
)
183+
parser.add_argument(
184+
'--long',
185+
action='store_true',
186+
default=False,
187+
help=_("List additional fields in output")
188+
)
189+
return parser
190+
167191
def take_action(self, parsed_args):
168192
client = self.app.client_manager.network
169193

@@ -178,7 +202,17 @@ def take_action(self, parsed_args):
178202
'Object ID',
179203
)
180204

181-
data = client.rbac_policies()
205+
query = {}
206+
if parsed_args.long:
207+
columns += ('action',)
208+
column_headers += ('Action',)
209+
if parsed_args.type is not None:
210+
query['object_type'] = parsed_args.type
211+
if parsed_args.action is not None:
212+
query['action'] = parsed_args.action
213+
214+
data = client.rbac_policies(**query)
215+
182216
return (column_headers,
183217
(utils.get_item_properties(
184218
s, columns,

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

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,14 +327,27 @@ class TestListNetworkRABC(TestNetworkRBAC):
327327
'Object Type',
328328
'Object ID',
329329
)
330-
330+
columns_long = (
331+
'ID',
332+
'Object Type',
333+
'Object ID',
334+
'Action',
335+
)
331336
data = []
332337
for r in rbac_policies:
333338
data.append((
334339
r.id,
335340
r.object_type,
336341
r.object_id,
337342
))
343+
data_long = []
344+
for r in rbac_policies:
345+
data_long.append((
346+
r.id,
347+
r.object_type,
348+
r.object_id,
349+
r.action,
350+
))
338351

339352
def setUp(self):
340353
super(TestListNetworkRABC, self).setUp()
@@ -356,6 +369,55 @@ def test_network_rbac_list(self):
356369
self.assertEqual(self.columns, columns)
357370
self.assertEqual(self.data, list(data))
358371

372+
def test_network_rbac_list_type_opt(self):
373+
arglist = [
374+
'--type', self.rbac_policies[0].object_type, ]
375+
verifylist = [
376+
('type', self.rbac_policies[0].object_type)]
377+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
378+
379+
# DisplayCommandBase.take_action() returns two tuples
380+
columns, data = self.cmd.take_action(parsed_args)
381+
382+
self.network.rbac_policies.assert_called_with(**{
383+
'object_type': self.rbac_policies[0].object_type
384+
})
385+
self.assertEqual(self.columns, columns)
386+
self.assertEqual(self.data, list(data))
387+
388+
def test_network_rbac_list_action_opt(self):
389+
arglist = [
390+
'--action', self.rbac_policies[0].action, ]
391+
verifylist = [
392+
('action', self.rbac_policies[0].action)]
393+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
394+
395+
# DisplayCommandBase.take_action() returns two tuples
396+
columns, data = self.cmd.take_action(parsed_args)
397+
398+
self.network.rbac_policies.assert_called_with(**{
399+
'action': self.rbac_policies[0].action
400+
})
401+
self.assertEqual(self.columns, columns)
402+
self.assertEqual(self.data, list(data))
403+
404+
def test_network_rbac_list_with_long(self):
405+
arglist = [
406+
'--long',
407+
]
408+
409+
verifylist = [
410+
('long', True),
411+
]
412+
413+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
414+
415+
columns, data = self.cmd.take_action(parsed_args)
416+
417+
self.network.rbac_policies.assert_called_with()
418+
self.assertEqual(self.columns_long, columns)
419+
self.assertEqual(self.data_long, list(data))
420+
359421

360422
class TestSetNetworkRBAC(TestNetworkRBAC):
361423

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
features:
3+
- |
4+
Add ``--type``, ``--action``, ``--long`` options
5+
to ``network rbac list`` command
6+
[Bug `1648307 <https://bugs.launchpad.net/bugs/1648307>`_]

0 commit comments

Comments
 (0)