Support filtering port with IP address substring

Change-Id: I9559f1c0a6db943705bd32aefb60d7ea7054dd1b
Related-Bug: #1718605
This commit is contained in:
Hongbin Lu 2018-01-09 21:24:08 +00:00 committed by Hongbin Lu
parent e4b8c31cd3
commit 4a9cb8eea8
4 changed files with 38 additions and 7 deletions

View File

@ -179,7 +179,7 @@ List ports
[--router <router> | --server <server> | --device-id <device-id>]
[--network <network>]
[--mac-address <mac-address>]
[--fixed-ip subnet=<subnet>,ip-address=<ip-address>]
[--fixed-ip subnet=<subnet>,ip-address=<ip-address>,ip-substring=<ip-substring>]
[--long]
[--project <project> [--project-domain <project-domain>]]
[--tags <tag>[,<tag>,...]] [--any-tags <tag>[,<tag>,...]]
@ -210,10 +210,11 @@ List ports
List only ports with this MAC address
.. option:: --fixed-ip subnet=<subnet>,ip-address=<ip-address>
.. option:: --fixed-ip subnet=<subnet>,ip-address=<ip-address>,ip-substring=<ip-substring>
Desired IP and/or subnet for filtering ports (name or ID):
subnet=<subnet>,ip-address=<ip-address>
Desired IP address, IP address substring and/or subnet (name or ID) for
filtering ports:
subnet=<subnet>,ip-address=<ip-address>,ip-substring=<ip-substring>
(repeat option to set multiple fixed IP addresses)
.. option:: --long

View File

@ -215,6 +215,9 @@ def _prepare_filter_fixed_ips(client_manager, parsed_args):
if 'ip-address' in ip_spec:
ips.append('ip_address=%s' % ip_spec['ip-address'])
if 'ip-substring' in ip_spec:
ips.append('ip_address_substr=%s' % ip_spec['ip-substring'])
return ips
@ -531,11 +534,13 @@ class ListPort(command.Lister):
identity_common.add_project_domain_option_to_parser(parser)
parser.add_argument(
'--fixed-ip',
metavar='subnet=<subnet>,ip-address=<ip-address>',
metavar=('subnet=<subnet>,ip-address=<ip-address>,'
'ip-substring=<ip-substring>'),
action=parseractions.MultiKeyValueAction,
optional_keys=['subnet', 'ip-address'],
optional_keys=['subnet', 'ip-address', 'ip-substring'],
help=_("Desired IP and/or subnet for filtering ports "
"(name or ID): subnet=<subnet>,ip-address=<ip-address> "
"(name or ID): subnet=<subnet>,ip-address=<ip-address>,"
"ip-substring=<ip-substring> "
"(repeat option to set multiple fixed IP addresses)"),
)
_tag.add_tag_filtering_option_to_parser(parser, _('ports'))

View File

@ -867,6 +867,24 @@ class TestListPort(TestPort):
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data))
def test_port_list_fixed_ip_opt_ip_address_substr(self):
ip_address_ss = self._ports[0].fixed_ips[0]['ip_address'][:-1]
arglist = [
'--fixed-ip', "ip-substring=%s" % ip_address_ss,
]
verifylist = [
('fixed_ip', [{'ip-substring': ip_address_ss}])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
self.network.ports.assert_called_once_with(**{
'fixed_ips': ['ip_address_substr=%s' % ip_address_ss]})
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data))
def test_port_list_fixed_ip_opt_subnet_id(self):
subnet_id = self._ports[0].fixed_ips[0]['subnet_id']
arglist = [

View File

@ -0,0 +1,7 @@
---
features:
- |
Add an ``ip-substring`` key to the ``--fixed-ip`` option of the
``port list`` command. This allows filtering ports by a substring
match of an IP address.
[Bug `1718605 <https://bugs.launchpad.net/bugs/1718605>`_]