Merge "FUP: Catch and reraise routed nets exception"

This commit is contained in:
Zuul 2021-02-23 22:04:14 +00:00 committed by Gerrit Code Review
commit 57913e1230
3 changed files with 19 additions and 8 deletions

View File

@ -1195,7 +1195,7 @@ class RequestFilterFailed(NovaException):
msg_fmt = _("Scheduling failed: %(reason)s")
class InvalidRoutedNetworkConfiguration(RequestFilterFailed):
class InvalidRoutedNetworkConfiguration(NovaException):
msg_fmt = _("Neutron routed networks configuration is invalid: "
"%(reason)s.")

View File

@ -326,8 +326,13 @@ def routed_networks_filter(
# subnets than only one but given they would be for the same
# port, just looking at the first subnet is needed.
subnet_id = port['fixed_ips'][0]['subnet_id']
aggregates = utils.get_aggregates_for_routed_subnet(
ctxt, network_api, report_api, subnet_id)
try:
aggregates = utils.get_aggregates_for_routed_subnet(
ctxt, network_api, report_api, subnet_id)
except exception.InvalidRoutedNetworkConfiguration as e:
raise exception.RequestFilterFailed(
reason=_('Aggregates not found for the subnet %s'
) % subnet_id) from e
else:
# The port was just created without a subnet.
network_id = port["network_id"]
@ -339,8 +344,13 @@ def routed_networks_filter(
if network_id:
# As the user only requested a network or a port unbound to a
# segment, we are free to choose any segment from the network.
aggregates = utils.get_aggregates_for_routed_network(
ctxt, network_api, report_api, network_id)
try:
aggregates = utils.get_aggregates_for_routed_network(
ctxt, network_api, report_api, network_id)
except exception.InvalidRoutedNetworkConfiguration as e:
raise exception.RequestFilterFailed(
reason=_('Aggregates not found for the network %s'
) % network_id) from e
if aggregates:
LOG.debug(

View File

@ -518,11 +518,12 @@ class RoutedNetworkTests(integrated_helpers._IntegratedTestBase):
# Make sure we correctly looked up at which aggregates were related to
# the segment ID #2
exp_segment_id = self.neutron.segment_id_2['id']
expected_subnet_id = self.neutron.subnet_for_segment_id_2['id']
expected_segment_id = self.neutron.segment_id_2['id']
mock_get_aggregates.assert_called_once_with(
mock.ANY, exp_segment_id)
mock.ANY, expected_segment_id)
self.assertIn('No valid host', server['fault']['message'])
self.assertIn(
'Failed to find aggregate related to segment %s' % exp_segment_id,
'Aggregates not found for the subnet %s' % expected_subnet_id,
server['fault']['message'])