summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/source/cli/command-objects/port.rst9
-rw-r--r--openstackclient/network/v2/port.py11
-rw-r--r--openstackclient/tests/unit/network/v2/test_port.py18
-rw-r--r--releasenotes/notes/allow-port-list-with-ip-address-substr-14c5805b241e402f.yaml7
4 files changed, 38 insertions, 7 deletions
diff --git a/doc/source/cli/command-objects/port.rst b/doc/source/cli/command-objects/port.rst
index 335c2270..bb037fa3 100644
--- a/doc/source/cli/command-objects/port.rst
+++ b/doc/source/cli/command-objects/port.rst
@@ -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
diff --git a/openstackclient/network/v2/port.py b/openstackclient/network/v2/port.py
index f13ee7b9..af6efa9d 100644
--- a/openstackclient/network/v2/port.py
+++ b/openstackclient/network/v2/port.py
@@ -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'))
diff --git a/openstackclient/tests/unit/network/v2/test_port.py b/openstackclient/tests/unit/network/v2/test_port.py
index 03e1d841..78d7fd6c 100644
--- a/openstackclient/tests/unit/network/v2/test_port.py
+++ b/openstackclient/tests/unit/network/v2/test_port.py
@@ -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 = [
diff --git a/releasenotes/notes/allow-port-list-with-ip-address-substr-14c5805b241e402f.yaml b/releasenotes/notes/allow-port-list-with-ip-address-substr-14c5805b241e402f.yaml
new file mode 100644
index 00000000..bbb0af6b
--- /dev/null
+++ b/releasenotes/notes/allow-port-list-with-ip-address-substr-14c5805b241e402f.yaml
@@ -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>`_] \ No newline at end of file