Support filtering port with IP address substring
Change-Id: I9559f1c0a6db943705bd32aefb60d7ea7054dd1b Related-Bug: #1718605
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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'))
 | 
			
		||||
 
 | 
			
		||||
@@ -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 = [
 | 
			
		||||
 
 | 
			
		||||
@@ -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>`_]
 | 
			
		||||
		Reference in New Issue
	
	Block a user