diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 40bba1d530da..2e029bc777d0 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -1737,9 +1737,8 @@ class ComputeManager(manager.Manager): if set_access_ip: _set_access_ip_values() - if network_info is not None: - network_info.wait(do_raise=True) - + network_info.wait(do_raise=True) + instance.info_cache.network_info = network_info instance.save(expected_task_state=task_states.SPAWNING) return instance diff --git a/nova/tests/compute/test_compute_mgr.py b/nova/tests/compute/test_compute_mgr.py index 73d03924133b..545ecd7fdb67 100644 --- a/nova/tests/compute/test_compute_mgr.py +++ b/nova/tests/compute/test_compute_mgr.py @@ -1469,6 +1469,17 @@ class ComputeManagerBuildInstanceTestCase(test.NoDBTestCase): instance_update.assert_has_calls(mock.call(self.context, self.instance['uuid'], mock.ANY, 'conductor')) + @mock.patch('nova.compute.manager.ComputeManager._get_power_state') + def test_spawn_waits_for_network_and_saves_info_cache(self, gps): + inst = mock.MagicMock() + network_info = mock.MagicMock() + with mock.patch.object(self.compute, 'driver'): + self.compute._spawn(self.context, inst, {}, network_info, None, + None, None) + network_info.wait.assert_called_once_with(do_raise=True) + self.assertEqual(network_info, inst.info_cache.network_info) + inst.save.assert_called_with(expected_task_state=task_states.SPAWNING) + def test_reschedule_on_resources_unavailable(self): reason = 'resource unavailable' exc = exception.ComputeResourcesUnavailable(reason=reason)