diff --git a/nova/tests/virt/ironic/test_driver.py b/nova/tests/virt/ironic/test_driver.py index bd603e55ad00..2e27a64f035b 100644 --- a/nova/tests/virt/ironic/test_driver.py +++ b/nova/tests/virt/ironic/test_driver.py @@ -659,12 +659,22 @@ class IronicDriverTestCase(test.NoDBTestCase): @mock.patch.object(objects.Flavor, 'get_by_id') @mock.patch.object(FAKE_CLIENT.node, 'update') def test__cleanup_deploy_good(self, mock_update, mock_flavor): + self._get_by_id_reads_deleted = False + + def side_effect(context, id): + self._get_by_id_reads_deleted = context._read_deleted == 'yes' + + mock_flavor.side_effect = side_effect mock_flavor.return_value = ironic_utils.get_test_flavor(extra_specs={}) node = ironic_utils.get_test_node(driver='fake', instance_uuid='fake-id') instance = fake_instance.fake_instance_obj(self.ctx, node=node.uuid) self.driver._cleanup_deploy(self.ctx, node, instance, None) + + self.assertTrue(self._get_by_id_reads_deleted, + 'Flavor.get_by_id was not called with ' + 'read_deleted set in the context') expected_patch = [{'path': '/instance_uuid', 'op': 'remove'}] mock_update.assert_called_once_with(node.uuid, expected_patch) diff --git a/nova/virt/ironic/driver.py b/nova/virt/ironic/driver.py index 6b1190e911b6..71832148713a 100644 --- a/nova/virt/ironic/driver.py +++ b/nova/virt/ironic/driver.py @@ -307,7 +307,9 @@ class IronicDriver(virt_driver.ComputeDriver): icli = client_wrapper.IronicClientWrapper() # TODO(mrda): It would be better to use instance.get_flavor() here # but right now that doesn't include extra_specs which are required - flavor = objects.Flavor.get_by_id(context, + # NOTE(pmurray): Flavor may have been deleted + ctxt = context.elevated(read_deleted="yes") + flavor = objects.Flavor.get_by_id(ctxt, instance['instance_type_id']) patch = patcher.create(node).get_cleanup_patch(instance, network_info, flavor)