Merge "network: Allow multiple FIP filter opts"

This commit is contained in:
Zuul
2025-05-19 16:05:20 +00:00
committed by Gerrit Code Review
3 changed files with 69 additions and 35 deletions

View File

@@ -243,18 +243,26 @@ class ListFloatingIP(common.NetworkAndComputeLister):
parser.add_argument( parser.add_argument(
'--network', '--network',
metavar='<network>', metavar='<network>',
dest='networks',
action='append',
help=self.enhance_help_neutron( help=self.enhance_help_neutron(
_( _(
"List floating IP(s) according to " "List floating IP(s) according to given network "
"given network (name or ID)" "(name or ID) "
"(repeat option to fiter on multiple networks)"
) )
), ),
) )
parser.add_argument( parser.add_argument(
'--port', '--port',
metavar='<port>', metavar='<port>',
dest='ports',
action='append',
help=self.enhance_help_neutron( help=self.enhance_help_neutron(
_("List floating IP(s) according to given port (name or ID)") _(
"List floating IP(s) according to given port (name or ID) "
"(repeat option to fiter on multiple ports)"
)
), ),
) )
parser.add_argument( parser.add_argument(
@@ -271,14 +279,6 @@ class ListFloatingIP(common.NetworkAndComputeLister):
_("List floating IP(s) according to given floating IP address") _("List floating IP(s) according to given floating IP address")
), ),
) )
parser.add_argument(
'--long',
action='store_true',
default=False,
help=self.enhance_help_neutron(
_("List additional fields in output")
),
)
parser.add_argument( parser.add_argument(
'--status', '--status',
metavar='<status>', metavar='<status>',
@@ -295,8 +295,8 @@ class ListFloatingIP(common.NetworkAndComputeLister):
metavar='<project>', metavar='<project>',
help=self.enhance_help_neutron( help=self.enhance_help_neutron(
_( _(
"List floating IP(s) according to given project (name or " "List floating IP(s) according to given project "
"ID)" "(name or ID) "
) )
), ),
) )
@@ -304,13 +304,27 @@ class ListFloatingIP(common.NetworkAndComputeLister):
parser.add_argument( parser.add_argument(
'--router', '--router',
metavar='<router>', metavar='<router>',
dest='routers',
action='append',
help=self.enhance_help_neutron( help=self.enhance_help_neutron(
_("List floating IP(s) according to given router (name or ID)") _(
"List floating IP(s) according to given router "
"(name or ID) "
"(repeat option to fiter on multiple routers)"
)
), ),
) )
_tag.add_tag_filtering_option_to_parser( _tag.add_tag_filtering_option_to_parser(
parser, _('floating IP'), enhance_help=self.enhance_help_neutron parser, _('floating IP'), enhance_help=self.enhance_help_neutron
) )
parser.add_argument(
'--long',
action='store_true',
default=False,
help=self.enhance_help_neutron(
_("List additional fields in output")
),
)
return parser return parser
@@ -354,22 +368,33 @@ class ListFloatingIP(common.NetworkAndComputeLister):
query = {} query = {}
if parsed_args.network is not None: if parsed_args.networks is not None:
network = network_client.find_network( network_ids = []
parsed_args.network, ignore_missing=False for network in parsed_args.networks:
) network_id = network_client.find_network(
query['floating_network_id'] = network.id network, ignore_missing=False
if parsed_args.port is not None: ).id
port = network_client.find_port( network_ids.append(network_id)
parsed_args.port, ignore_missing=False query['floating_network_id'] = network_ids
)
query['port_id'] = port.id if parsed_args.ports is not None:
port_ids = []
for port in parsed_args.ports:
port_id = network_client.find_port(
port, ignore_missing=False
).id
port_ids.append(port_id)
query['port_id'] = port_ids
if parsed_args.fixed_ip_address is not None: if parsed_args.fixed_ip_address is not None:
query['fixed_ip_address'] = parsed_args.fixed_ip_address query['fixed_ip_address'] = parsed_args.fixed_ip_address
if parsed_args.floating_ip_address is not None: if parsed_args.floating_ip_address is not None:
query['floating_ip_address'] = parsed_args.floating_ip_address query['floating_ip_address'] = parsed_args.floating_ip_address
if parsed_args.status: if parsed_args.status:
query['status'] = parsed_args.status query['status'] = parsed_args.status
if parsed_args.project is not None: if parsed_args.project is not None:
project = identity_common.find_project( project = identity_common.find_project(
identity_client, identity_client,
@@ -377,11 +402,15 @@ class ListFloatingIP(common.NetworkAndComputeLister):
parsed_args.project_domain, parsed_args.project_domain,
) )
query['project_id'] = project.id query['project_id'] = project.id
if parsed_args.router is not None:
router = network_client.find_router( if parsed_args.routers is not None:
parsed_args.router, ignore_missing=False router_ids = []
) for router in parsed_args.routers:
query['router_id'] = router.id router_id = network_client.find_router(
router, ignore_missing=False
).id
router_ids.append(router_id)
query['router_id'] = router_ids
_tag.get_tag_filtering_args(parsed_args, query) _tag.get_tag_filtering_args(parsed_args, query)

View File

@@ -499,7 +499,7 @@ class TestListFloatingIPNetwork(TestFloatingIPNetwork):
'fake_network_id', 'fake_network_id',
] ]
verifylist = [ verifylist = [
('network', 'fake_network_id'), ('networks', ['fake_network_id']),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -507,7 +507,7 @@ class TestListFloatingIPNetwork(TestFloatingIPNetwork):
self.network_client.ips.assert_called_once_with( self.network_client.ips.assert_called_once_with(
**{ **{
'floating_network_id': 'fake_network_id', 'floating_network_id': ['fake_network_id'],
} }
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@@ -519,7 +519,7 @@ class TestListFloatingIPNetwork(TestFloatingIPNetwork):
'fake_port_id', 'fake_port_id',
] ]
verifylist = [ verifylist = [
('port', 'fake_port_id'), ('ports', ['fake_port_id']),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -527,7 +527,7 @@ class TestListFloatingIPNetwork(TestFloatingIPNetwork):
self.network_client.ips.assert_called_once_with( self.network_client.ips.assert_called_once_with(
**{ **{
'port_id': 'fake_port_id', 'port_id': ['fake_port_id'],
} }
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@@ -660,7 +660,7 @@ class TestListFloatingIPNetwork(TestFloatingIPNetwork):
'--long', '--long',
] ]
verifylist = [ verifylist = [
('router', 'fake_router_id'), ('routers', ['fake_router_id']),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -668,7 +668,7 @@ class TestListFloatingIPNetwork(TestFloatingIPNetwork):
self.network_client.ips.assert_called_once_with( self.network_client.ips.assert_called_once_with(
**{ **{
'router_id': 'fake_router_id', 'router_id': ['fake_router_id'],
} }
) )
self.assertEqual(self.columns_long, columns) self.assertEqual(self.columns_long, columns)

View File

@@ -0,0 +1,5 @@
---
features:
- |
The ``--network``, ``--port``, and ``--router`` options of the ``floating
ip list`` command can now be specified multiple times.