summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorJas <singhj@us.ibm.com>2016-03-11 13:02:47 -0600
committerJas <singhj@us.ibm.com>2016-03-16 13:20:40 -0500
commit62a02466c30e32f8eb54a70497eacacb7fa5c9bf (patch)
tree0238a1882126468785fc27f434ed54b01f9cdd00 /openstackclient
parentf8ac17ac52fa42067c881254e243ebe4514624be (diff)
downloadpython-openstackclient-62a02466c30e32f8eb54a70497eacacb7fa5c9bf.tar.gz
Add option to allow filtering by router on port list
Added support to allow filtering ports via --router option to list ports that are applicable to specific router. Partial-bug: #1519909 Partially-implements: blueprint neutron-client Change-Id: I6dd958603909f641735c821a62fc0d45afd5c7ec
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/network/v2/port.py19
-rw-r--r--openstackclient/tests/network/v2/test_port.py24
2 files changed, 41 insertions, 2 deletions
diff --git a/openstackclient/network/v2/port.py b/openstackclient/network/v2/port.py
index b618a4b0..9894e6da 100644
--- a/openstackclient/network/v2/port.py
+++ b/openstackclient/network/v2/port.py
@@ -243,6 +243,16 @@ class DeletePort(command.Command):
class ListPort(command.Lister):
"""List ports"""
+ def get_parser(self, prog_name):
+ parser = super(ListPort, self).get_parser(prog_name)
+ parser.add_argument(
+ '--router',
+ metavar='<router>',
+ dest='router',
+ help='List only ports attached to this router (name or ID)',
+ )
+ return parser
+
def take_action(self, parsed_args):
client = self.app.client_manager.network
@@ -259,7 +269,14 @@ class ListPort(command.Lister):
'Fixed IP Addresses',
)
- data = client.ports()
+ filters = {}
+ if parsed_args.router:
+ _router = client.find_router(parsed_args.router,
+ ignore_missing=False)
+ filters = {'device_id': _router.id}
+
+ data = client.ports(**filters)
+
return (column_headers,
(utils.get_item_properties(
s, columns,
diff --git a/openstackclient/tests/network/v2/test_port.py b/openstackclient/tests/network/v2/test_port.py
index 7b1c655f..54f82853 100644
--- a/openstackclient/tests/network/v2/test_port.py
+++ b/openstackclient/tests/network/v2/test_port.py
@@ -224,8 +224,11 @@ class TestListPort(TestPort):
# Get the command object to test
self.cmd = port.ListPort(self.app, self.namespace)
-
self.network.ports = mock.Mock(return_value=self._ports)
+ fake_router = network_fakes.FakeRouter.create_one_router({
+ 'id': 'fake-router-id',
+ })
+ self.network.find_router = mock.Mock(return_value=fake_router)
def test_port_list_no_options(self):
arglist = []
@@ -239,6 +242,25 @@ class TestListPort(TestPort):
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data))
+ def test_port_list_router_opt(self):
+ arglist = [
+ '--router', 'fake-router-name',
+ ]
+
+ verifylist = [
+ ('router', 'fake-router-name')
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.network.ports.assert_called_with(**{
+ 'device_id': 'fake-router-id'
+ })
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
+
class TestSetPort(TestPort):