summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-09-14 17:45:21 +0000
committerGerrit Code Review <review@openstack.org>2016-09-14 17:45:21 +0000
commit807ff825ef29355c802fa5d5a9458931a1011f8a (patch)
tree246e55421d49801718fb723c470db2bc0e6a86ab /openstackclient
parent3b0e648041f7392c14a308ae0babc0a2e3eabbaa (diff)
parent96a8ed435c7e55633c00dbb1283477ff11cf35f9 (diff)
downloadpython-openstackclient-807ff825ef29355c802fa5d5a9458931a1011f8a.tar.gz
Merge "Support listing specified server's ports"
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/network/v2/port.py21
-rw-r--r--openstackclient/tests/unit/network/v2/test_port.py22
2 files changed, 38 insertions, 5 deletions
diff --git a/openstackclient/network/v2/port.py b/openstackclient/network/v2/port.py
index 05c5a012..d7268573 100644
--- a/openstackclient/network/v2/port.py
+++ b/openstackclient/network/v2/port.py
@@ -345,16 +345,23 @@ class ListPort(command.Lister):
"This is the entity that uses the port (for example, "
"network:dhcp).")
)
- parser.add_argument(
+ device_group = parser.add_mutually_exclusive_group()
+ device_group.add_argument(
'--router',
metavar='<router>',
dest='router',
help=_("List only ports attached to this router (name or ID)")
)
+ device_group.add_argument(
+ '--server',
+ metavar='<server>',
+ help=_("List only ports attached to this server (name or ID)"),
+ )
return parser
def take_action(self, parsed_args):
- client = self.app.client_manager.network
+ network_client = self.app.client_manager.network
+ compute_client = self.app.client_manager.compute
columns = (
'id',
@@ -373,11 +380,15 @@ class ListPort(command.Lister):
if parsed_args.device_owner is not None:
filters['device_owner'] = parsed_args.device_owner
if parsed_args.router:
- _router = client.find_router(parsed_args.router,
- ignore_missing=False)
+ _router = network_client.find_router(parsed_args.router,
+ ignore_missing=False)
filters['device_id'] = _router.id
+ if parsed_args.server:
+ server = utils.find_resource(compute_client.servers,
+ parsed_args.server)
+ filters['device_id'] = server.id
- data = client.ports(**filters)
+ data = network_client.ports(**filters)
return (column_headers,
(utils.get_item_properties(
diff --git a/openstackclient/tests/unit/network/v2/test_port.py b/openstackclient/tests/unit/network/v2/test_port.py
index 92ad716e..afa67bba 100644
--- a/openstackclient/tests/unit/network/v2/test_port.py
+++ b/openstackclient/tests/unit/network/v2/test_port.py
@@ -19,6 +19,7 @@ from osc_lib import exceptions
from osc_lib import utils
from openstackclient.network.v2 import port
+from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
from openstackclient.tests.unit.network.v2 import fakes as network_fakes
from openstackclient.tests.unit import utils as tests_utils
@@ -337,6 +338,7 @@ class TestListPort(TestPort):
'id': 'fake-router-id',
})
self.network.find_router = mock.Mock(return_value=fake_router)
+ self.app.client_manager.compute = mock.Mock()
def test_port_list_no_options(self):
arglist = []
@@ -369,6 +371,26 @@ class TestListPort(TestPort):
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data))
+ @mock.patch.object(utils, 'find_resource')
+ def test_port_list_with_server_option(self, mock_find):
+ fake_server = compute_fakes.FakeServer.create_one_server()
+ mock_find.return_value = fake_server
+
+ arglist = [
+ '--server', 'fake-server-name',
+ ]
+ verifylist = [
+ ('server', 'fake-server-name'),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ columns, data = self.cmd.take_action(parsed_args)
+ self.network.ports.assert_called_once_with(
+ device_id=fake_server.id)
+ mock_find.assert_called_once_with(mock.ANY, 'fake-server-name')
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
+
def test_port_list_device_owner_opt(self):
arglist = [
'--device-owner', self._ports[0].device_owner,