Merge "return error about external network to the user on build failure"
This commit is contained in:
@@ -3051,6 +3051,7 @@ class ComputeManager(manager.Manager):
|
|||||||
self._build_resources_cleanup(instance, network_info)
|
self._build_resources_cleanup(instance, network_info)
|
||||||
except (exception.UnexpectedTaskStateError,
|
except (exception.UnexpectedTaskStateError,
|
||||||
exception.InstanceUnacceptable,
|
exception.InstanceUnacceptable,
|
||||||
|
exception.ExternalNetworkAttachForbidden,
|
||||||
exception.OverQuota, exception.InvalidBDM) as e:
|
exception.OverQuota, exception.InvalidBDM) as e:
|
||||||
self._build_resources_cleanup(instance, network_info)
|
self._build_resources_cleanup(instance, network_info)
|
||||||
raise exception.BuildAbortException(instance_uuid=instance.uuid,
|
raise exception.BuildAbortException(instance_uuid=instance.uuid,
|
||||||
|
|||||||
@@ -8605,6 +8605,36 @@ class ComputeManagerBuildInstanceTestCase(test.NoDBTestCase):
|
|||||||
mock.ANY, network_arqs)
|
mock.ANY, network_arqs)
|
||||||
return resources
|
return resources
|
||||||
|
|
||||||
|
@mock.patch.object(virt_driver.ComputeDriver,
|
||||||
|
'prepare_for_spawn')
|
||||||
|
@mock.patch.object(nova.compute.manager.ComputeManager,
|
||||||
|
'_build_networks_for_instance')
|
||||||
|
@mock.patch.object(virt_driver.ComputeDriver,
|
||||||
|
'prepare_networks_before_block_device_mapping')
|
||||||
|
def test_build_resources_prepnets_exception(
|
||||||
|
self, mock_prep_net, mock_build_net, mock_prep_spawn):
|
||||||
|
|
||||||
|
args = (self.context, self.instance, self.requested_networks,
|
||||||
|
self.security_groups, self.image, self.block_device_mapping,
|
||||||
|
self.resource_provider_mapping, [])
|
||||||
|
|
||||||
|
mock_prep_net.side_effect = exception.ExternalNetworkAttachForbidden(
|
||||||
|
network_uuid=uuids.network_id)
|
||||||
|
|
||||||
|
resources = self.compute._build_resources(*args)
|
||||||
|
e = self.assertRaises(
|
||||||
|
exception.BuildAbortException,
|
||||||
|
resources.__enter__
|
||||||
|
)
|
||||||
|
self.assertIn(
|
||||||
|
"It is not allowed to create an interface on external network",
|
||||||
|
str(e)
|
||||||
|
)
|
||||||
|
|
||||||
|
mock_build_net.assert_called_once_with(self.context, self.instance,
|
||||||
|
self.requested_networks, mock.ANY,
|
||||||
|
mock.ANY, mock.ANY)
|
||||||
|
|
||||||
@mock.patch.object(nova.compute.manager.ComputeManager,
|
@mock.patch.object(nova.compute.manager.ComputeManager,
|
||||||
'_get_bound_arq_resources')
|
'_get_bound_arq_resources')
|
||||||
def test_accel_build_resources_no_device_profile(self, mock_get_arqs):
|
def test_accel_build_resources_no_device_profile(self, mock_get_arqs):
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Fixes `bug 2137673`_ where details about the fact that the user specified
|
||||||
|
an incorrect configuration by requesting to attach to an external network are
|
||||||
|
masked by "Failure prepping block device" since they do not have access to
|
||||||
|
the whole backtrace.
|
||||||
|
|
||||||
|
.. _bug 2137673: https://bugs.launchpad.net/nova/+bug/2137673
|
||||||
Reference in New Issue
Block a user