diff --git a/heat/common/exception.py b/heat/common/exception.py index 478797333a..e4be395d75 100644 --- a/heat/common/exception.py +++ b/heat/common/exception.py @@ -388,6 +388,13 @@ class PropertyUnspecifiedError(HeatException): super(PropertyUnspecifiedError, self).__init__(**kwargs) +class UpdateReplace(Exception): + '''Raised when resource update requires replacement.''' + def __init__(self, resource_name='Unknown'): + msg = _("The Resource %s requires replacement.") % resource_name + super(Exception, self).__init__(six.text_type(msg)) + + class HTTPExceptionDisguise(Exception): """Disguises HTTP exceptions so they can be handled by the webob fault application in the wsgi pipeline. diff --git a/heat/engine/resource.py b/heat/engine/resource.py index c530d66284..2b81ec562d 100644 --- a/heat/engine/resource.py +++ b/heat/engine/resource.py @@ -57,13 +57,6 @@ def _register_class(resource_type, resource_class): resources.global_env().register_class(resource_type, resource_class) -class UpdateReplace(Exception): - '''Raised when resource update requires replacement.''' - def __init__(self, resource_name='Unknown'): - msg = _("The Resource %s requires replacement.") % resource_name - super(Exception, self).__init__(six.text_type(msg)) - - class NoActionRequired(Exception): pass @@ -521,7 +514,7 @@ class Resource(object): raise exception.NotSupported(feature=mesg) if not changed_properties_set.issubset(update_allowed_set): - raise UpdateReplace(self.name) + raise exception.UpdateReplace(self.name) return dict((k, after_props.get(k)) for k in changed_properties_set) @@ -867,18 +860,18 @@ class Resource(object): def _needs_update(self, after, before, after_props, before_props, prev_resource, check_init_complete=True): if self.status == self.FAILED: - raise UpdateReplace(self) + raise exception.UpdateReplace(self) if check_init_complete and \ (self.action == self.INIT and self.status == self.COMPLETE): - raise UpdateReplace(self) + raise exception.UpdateReplace(self) if prev_resource is not None: cur_class_def, cur_ver = self.implementation_signature() prev_class_def, prev_ver = prev_resource.implementation_signature() if prev_class_def != cur_class_def: - raise UpdateReplace(self.name) + raise exception.UpdateReplace(self.name) if prev_ver != cur_ver: return True @@ -947,7 +940,7 @@ class Resource(object): LOG.info(_LI('updating %s'), six.text_type(self)) self.updated_time = datetime.utcnow() - with self._action_recorder(action, UpdateReplace): + with self._action_recorder(action, exception.UpdateReplace): after_props.validate() tmpl_diff = self.update_template_diff(function.resolve(after), before) @@ -1576,7 +1569,7 @@ class Resource(object): def handle_update(self, json_snippet=None, tmpl_diff=None, prop_diff=None): if prop_diff: - raise UpdateReplace(self.name) + raise exception.UpdateReplace(self.name) def metadata_update(self, new_metadata=None): ''' diff --git a/heat/engine/resources/aws/autoscaling/launch_config.py b/heat/engine/resources/aws/autoscaling/launch_config.py index eaacd1ac22..d4c7fbd4d1 100644 --- a/heat/engine/resources/aws/autoscaling/launch_config.py +++ b/heat/engine/resources/aws/autoscaling/launch_config.py @@ -218,7 +218,7 @@ class LaunchConfiguration(resource.Resource): def handle_update(self, json_snippet, tmpl_diff, prop_diff): if 'Metadata' in tmpl_diff: - raise resource.UpdateReplace(self.name) + raise exception.UpdateReplace(self.name) def FnGetRefId(self): return self.physical_resource_name_or_FnGetRefId() diff --git a/heat/engine/resources/aws/ec2/eip.py b/heat/engine/resources/aws/ec2/eip.py index 8dc8b5fab1..e10a3b676d 100644 --- a/heat/engine/resources/aws/ec2/eip.py +++ b/heat/engine/resources/aws/ec2/eip.py @@ -376,7 +376,7 @@ class ElasticIpAssociation(resource.Resource): ni_id = prop_diff.get(self.NETWORK_INTERFACE_ID) if instance_id or ni_id: - raise resource.UpdateReplace(self.name) + raise exception.UpdateReplace(self.name) # according to aws doc, when update the instance_id or # network_interface_id, if you also change the EIP or @@ -386,7 +386,7 @@ class ElasticIpAssociation(resource.Resource): eip = prop_diff.get(self.EIP) allocation_id = prop_diff.get(self.ALLOCATION_ID) if eip or allocation_id: - raise resource.UpdateReplace(self.name) + raise exception.UpdateReplace(self.name) def handle_create(self): """Add a floating IP address to a server.""" diff --git a/heat/engine/resources/openstack/heat/test_resource.py b/heat/engine/resources/openstack/heat/test_resource.py index 417f5623fd..8a67473289 100644 --- a/heat/engine/resources/openstack/heat/test_resource.py +++ b/heat/engine/resources/openstack/heat/test_resource.py @@ -16,6 +16,7 @@ import eventlet from oslo_utils import timeutils import six +from heat.common import exception from heat.common.i18n import _ from heat.engine import attributes from heat.engine import properties @@ -156,7 +157,7 @@ class TestResource(resource.Resource): if value: update_replace = self.properties[self.UPDATE_REPLACE] if update_replace: - raise resource.UpdateReplace(self.name) + raise exception.UpdateReplace(self.name) else: # emulate failure fail_prop = self.properties[self.FAIL] diff --git a/heat/engine/resources/openstack/heat/wait_condition_handle.py b/heat/engine/resources/openstack/heat/wait_condition_handle.py index c897dca1ff..fe0c77b74a 100644 --- a/heat/engine/resources/openstack/heat/wait_condition_handle.py +++ b/heat/engine/resources/openstack/heat/wait_condition_handle.py @@ -13,9 +13,9 @@ import uuid +from heat.common import exception from heat.common.i18n import _ from heat.engine import attributes -from heat.engine import resource from heat.engine.resources.aws.cfn import wait_condition_handle as aws_wch from heat.engine.resources import wait_condition as wc_base from heat.engine import support @@ -141,7 +141,7 @@ class UpdateWaitConditionHandle(aws_wch.WaitConditionHandle): support_status = support.SupportStatus(version='2014.1') def update(self, after, before=None, prev_resource=None): - raise resource.UpdateReplace(self.name) + raise exception.UpdateReplace(self.name) def resource_mapping(): diff --git a/heat/engine/resources/openstack/monasca/alarm_definition.py b/heat/engine/resources/openstack/monasca/alarm_definition.py index a81e9c4dc7..5c41e82840 100644 --- a/heat/engine/resources/openstack/monasca/alarm_definition.py +++ b/heat/engine/resources/openstack/monasca/alarm_definition.py @@ -11,6 +11,7 @@ # License for the specific language governing permissions and limitations # under the License. +from heat.common import exception from heat.common.i18n import _ from heat.engine import clients from heat.engine import constraints @@ -186,7 +187,7 @@ class MonascaAlarmDefinition(resource.Resource): except Exception as ex: if self.client_plugin().is_un_processable(ex): # Monasca does not allow to update the sub expression - raise resource.UpdateReplace(resource_name=self.name) + raise exception.UpdateReplace(resource_name=self.name) def handle_delete(self): if self.resource_id is not None: diff --git a/heat/engine/resources/openstack/neutron/port.py b/heat/engine/resources/openstack/neutron/port.py index 0a9ab1735e..11b1dfac1b 100644 --- a/heat/engine/resources/openstack/neutron/port.py +++ b/heat/engine/resources/openstack/neutron/port.py @@ -14,12 +14,12 @@ from oslo_log import log as logging import six +from heat.common import exception from heat.common.i18n import _ from heat.common.i18n import _LW from heat.engine import attributes from heat.engine import constraints from heat.engine import properties -from heat.engine import resource from heat.engine.resources.openstack.neutron import neutron from heat.engine.resources.openstack.neutron import subnet from heat.engine import support @@ -415,7 +415,7 @@ class Port(neutron.NeutronResource): prev_resource, check_init_complete=True): if after_props.get(self.REPLACEMENT_POLICY) == 'REPLACE_ALWAYS': - raise resource.UpdateReplace(self.name) + raise exception.UpdateReplace(self.name) return super(Port, self)._needs_update( after, before, after_props, before_props, prev_resource, diff --git a/heat/engine/resources/openstack/nova/server.py b/heat/engine/resources/openstack/nova/server.py index 0a851a9e83..b7262db52b 100644 --- a/heat/engine/resources/openstack/nova/server.py +++ b/heat/engine/resources/openstack/nova/server.py @@ -945,7 +945,7 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin, flavor = prop_diff[self.FLAVOR] if flavor_update_policy == 'REPLACE': - raise resource.UpdateReplace(self.name) + raise exception.UpdateReplace(self.name) flavor_id = self.client_plugin().get_flavor_id(flavor) handler_args = {'args': (flavor_id,)} @@ -964,7 +964,7 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin, prop_diff.get(self.IMAGE_UPDATE_POLICY) or self.properties[self.IMAGE_UPDATE_POLICY]) if image_update_policy == 'REPLACE': - raise resource.UpdateReplace(self.name) + raise exception.UpdateReplace(self.name) image = prop_diff[self.IMAGE] image_id = self.client_plugin('glance').get_image_id(image) preserve_ephemeral = ( diff --git a/heat/engine/resources/stack_resource.py b/heat/engine/resources/stack_resource.py index 434ee99b94..14d666c878 100644 --- a/heat/engine/resources/stack_resource.py +++ b/heat/engine/resources/stack_resource.py @@ -93,12 +93,12 @@ class StackResource(resource.Resource): # FIXME (ricolin): seems currently can not call super here if self.nested() is None and self.status == self.FAILED: - raise resource.UpdateReplace(self) + raise exception.UpdateReplace(self) if (check_init_complete and self.nested() is None and self.action == self.INIT and self.status == self.COMPLETE): - raise resource.UpdateReplace(self) + raise exception.UpdateReplace(self) return True diff --git a/heat/engine/update.py b/heat/engine/update.py index 672560cefd..8e0f3364ca 100644 --- a/heat/engine/update.py +++ b/heat/engine/update.py @@ -14,9 +14,9 @@ from oslo_log import log as logging import six +from heat.common import exception from heat.common.i18n import _LI from heat.engine import dependencies -from heat.engine import resource from heat.engine import scheduler from heat.objects import resource as resource_objects @@ -145,7 +145,7 @@ class StackUpdate(object): try: yield self._update_in_place(existing_res, new_res) - except resource.UpdateReplace: + except exception.UpdateReplace: pass else: # Save updated resource definition to backup stack @@ -248,7 +248,7 @@ class StackUpdate(object): current_res.update_template_diff_properties(updated_props, current_props) updated_keys.append(key) - except resource.UpdateReplace: + except exception.UpdateReplace: replaced_keys.append(key) return { diff --git a/heat/engine/worker.py b/heat/engine/worker.py index 2c1970917a..f4d230f38c 100644 --- a/heat/engine/worker.py +++ b/heat/engine/worker.py @@ -156,7 +156,7 @@ class WorkerService(service.Service): check_resource_update(rsrc, tmpl.id, resource_data, self.engine_id, stack.time_remaining()) - except resource.UpdateReplace: + except exception.UpdateReplace: new_res_id = rsrc.make_replacement(tmpl.id) LOG.info("Replacing resource with new id %s", new_res_id) rpc_data = sync_point.serialize_input_data(resource_data) diff --git a/heat/tests/aws/test_instance.py b/heat/tests/aws/test_instance.py index d2d418fe0c..505859b89d 100644 --- a/heat/tests/aws/test_instance.py +++ b/heat/tests/aws/test_instance.py @@ -1118,7 +1118,7 @@ class InstancesTest(common.HeatTestCase): update_template = copy.deepcopy(instance.t) update_template['Properties']['ImageId'] = 'mustreplace' updater = scheduler.TaskRunner(instance.update, update_template) - self.assertRaises(resource.UpdateReplace, updater) + self.assertRaises(exception.UpdateReplace, updater) self.m.VerifyAll() diff --git a/heat/tests/ceilometer/test_ceilometer_alarm.py b/heat/tests/ceilometer/test_ceilometer_alarm.py index 55661e3474..4d0305a128 100644 --- a/heat/tests/ceilometer/test_ceilometer_alarm.py +++ b/heat/tests/ceilometer/test_ceilometer_alarm.py @@ -23,7 +23,6 @@ from heat.common import exception from heat.common import template_format from heat.engine.clients.os import ceilometer from heat.engine import properties as props -from heat.engine import resource from heat.engine.resources.openstack.ceilometer import alarm from heat.engine import rsrc_defn from heat.engine import scheduler @@ -293,7 +292,7 @@ class CeilometerAlarmTest(common.HeatTestCase): properties) updater = scheduler.TaskRunner(rsrc.update, snippet) - self.assertRaises(resource.UpdateReplace, updater) + self.assertRaises(exception.UpdateReplace, updater) self.m.VerifyAll() diff --git a/heat/tests/engine/test_engine_worker.py b/heat/tests/engine/test_engine_worker.py index 43647154d1..160e1b7fad 100644 --- a/heat/tests/engine/test_engine_worker.py +++ b/heat/tests/engine/test_engine_worker.py @@ -167,7 +167,7 @@ class CheckWorkflowUpdateTest(common.HeatTestCase): @mock.patch.object(resource.Resource, 'make_replacement') def test_is_update_traversal_raise_update_replace( self, mock_mr, mock_cru, mock_crc, mock_pcr, mock_csc, mock_cid): - mock_cru.side_effect = resource.UpdateReplace + mock_cru.side_effect = exception.UpdateReplace self.worker.check_resource( self.ctx, self.resource.id, self.stack.current_traversal, {}, self.is_update, None) diff --git a/heat/tests/manila/test_manila_security_service.py b/heat/tests/manila/test_manila_security_service.py index 794b573e42..ebac317061 100644 --- a/heat/tests/manila/test_manila_security_service.py +++ b/heat/tests/manila/test_manila_security_service.py @@ -16,7 +16,6 @@ import six from heat.common import exception from heat.common import template_format -from heat.engine import resource from heat.engine import resources from heat.engine.resources.openstack.manila import security_service from heat.engine import scheduler @@ -166,7 +165,7 @@ class ManilaSecurityServiceTest(common.HeatTestCase): rsrc_defns = template.Template(t).resource_definitions(self.stack) new_ss = rsrc_defns['security_service'] self.assertEqual(0, self.client.security_services.update.call_count) - err = self.assertRaises(resource.UpdateReplace, + err = self.assertRaises(exception.UpdateReplace, scheduler.TaskRunner(ss.update, new_ss)) msg = 'The Resource security_service requires replacement.' self.assertEqual(msg, six.text_type(err)) diff --git a/heat/tests/mistral/test_mistral_workflow.py b/heat/tests/mistral/test_mistral_workflow.py index 869de921dd..4dfbcdba42 100644 --- a/heat/tests/mistral/test_mistral_workflow.py +++ b/heat/tests/mistral/test_mistral_workflow.py @@ -309,7 +309,7 @@ class TestMistralWorkflow(common.HeatTestCase): self.mistral.workflows.update.return_value = new_workflows self.mistral.workflows.delete.return_value = None - err = self.assertRaises(resource.UpdateReplace, + err = self.assertRaises(exception.UpdateReplace, scheduler.TaskRunner(wf.update, new_workflow)) msg = 'The Resource workflow requires replacement.' diff --git a/heat/tests/neutron/test_neutron_port.py b/heat/tests/neutron/test_neutron_port.py index 5d0233ccb2..940c1b133d 100644 --- a/heat/tests/neutron/test_neutron_port.py +++ b/heat/tests/neutron/test_neutron_port.py @@ -19,7 +19,6 @@ from neutronclient.v2_0 import client as neutronclient from heat.common import exception from heat.common import template_format -from heat.engine import resource from heat.engine import rsrc_defn from heat.engine import scheduler from heat.tests import common @@ -492,7 +491,7 @@ class NeutronPortTest(common.HeatTestCase): new_props['replacement_policy'] = 'REPLACE_ALWAYS' update_snippet = rsrc_defn.ResourceDefinition(port.name, port.type(), new_props) - self.assertRaises(resource.UpdateReplace, port._needs_update, + self.assertRaises(exception.UpdateReplace, port._needs_update, update_snippet, port.frozen_definition(), new_props, props, None) diff --git a/heat/tests/nova/test_server.py b/heat/tests/nova/test_server.py index 570bb83099..9cbfff2149 100644 --- a/heat/tests/nova/test_server.py +++ b/heat/tests/nova/test_server.py @@ -1742,7 +1742,7 @@ class ServersTest(common.HeatTestCase): update_template = copy.deepcopy(server.t) update_template['Properties']['flavor'] = 'm1.small' updater = scheduler.TaskRunner(server.update, update_template) - self.assertRaises(resource.UpdateReplace, updater) + self.assertRaises(exception.UpdateReplace, updater) def test_server_update_server_flavor_policy_update(self): stack_name = 'update_flvpol' @@ -1763,7 +1763,7 @@ class ServersTest(common.HeatTestCase): update_template['Properties']['flavor_update_policy'] = 'REPLACE' update_template['Properties']['flavor'] = 'm1.small' updater = scheduler.TaskRunner(server.update, update_template) - self.assertRaises(resource.UpdateReplace, updater) + self.assertRaises(exception.UpdateReplace, updater) def test_server_update_image_replace(self): stack_name = 'update_imgrep' @@ -1784,7 +1784,7 @@ class ServersTest(common.HeatTestCase): update_template = copy.deepcopy(server.t) update_template['Properties']['image'] = image_id updater = scheduler.TaskRunner(server.update, update_template) - self.assertRaises(resource.UpdateReplace, updater) + self.assertRaises(exception.UpdateReplace, updater) def _test_server_update_image_rebuild(self, status, policy='REBUILD', password=None): @@ -1914,7 +1914,7 @@ class ServersTest(common.HeatTestCase): update_template['Properties']['image'] = 'mustreplace' update_template['Properties']['image_update_policy'] = 'REPLACE' updater = scheduler.TaskRunner(server.update, update_template) - self.assertRaises(resource.UpdateReplace, updater) + self.assertRaises(exception.UpdateReplace, updater) def test_server_status_build(self): return_server = self.fc.servers.list()[0] @@ -3353,7 +3353,7 @@ class ServersTest(common.HeatTestCase): # update updater = scheduler.TaskRunner(server.update, update_template) - self.assertRaises(resource.UpdateReplace, updater) + self.assertRaises(exception.UpdateReplace, updater) self.m.VerifyAll() diff --git a/heat/tests/openstack/monasca/test_alarm_definition.py b/heat/tests/openstack/monasca/test_alarm_definition.py index 2846d6a85e..ecda4c1169 100644 --- a/heat/tests/openstack/monasca/test_alarm_definition.py +++ b/heat/tests/openstack/monasca/test_alarm_definition.py @@ -13,6 +13,7 @@ import mock +from heat.common import exception from heat.engine.clients.os import monasca as client_plugin from heat.engine import resource from heat.engine.resources.openstack.monasca import alarm_definition @@ -219,7 +220,7 @@ class MonascaAlarmDefinitionTest(common.HeatTestCase): prop_diff = {alarm_definition.MonascaAlarmDefinition.EXPRESSION: 'expression-updated'} - self.assertRaises(resource.UpdateReplace, + self.assertRaises(exception.UpdateReplace, self.test_resource.handle_update, json_snippet=None, tmpl_diff=None, diff --git a/heat/tests/openstack/test_waitcondition.py b/heat/tests/openstack/test_waitcondition.py index 5897f14296..157e3a2152 100644 --- a/heat/tests/openstack/test_waitcondition.py +++ b/heat/tests/openstack/test_waitcondition.py @@ -18,11 +18,11 @@ from oslo_serialization import jsonutils as json from oslo_utils import timeutils import six +from heat.common import exception from heat.common import identifier from heat.common import template_format from heat.engine.clients.os import heat_plugin from heat.engine import environment -from heat.engine import resource from heat.engine.resources.openstack.heat import wait_condition_handle as h_wch from heat.engine import stack as parser from heat.engine import template as tmpl @@ -360,4 +360,4 @@ class HeatWaitConditionTest(common.HeatTestCase): handle = self.stack['update_wait_handle'] self.assertEqual((handle.CREATE, handle.COMPLETE), handle.state) self.assertRaises( - resource.UpdateReplace, handle.update, None, None) + exception.UpdateReplace, handle.update, None, None) diff --git a/heat/tests/test_cw_alarm.py b/heat/tests/test_cw_alarm.py index e1943cc503..313a8da9f8 100644 --- a/heat/tests/test_cw_alarm.py +++ b/heat/tests/test_cw_alarm.py @@ -14,8 +14,8 @@ import copy +from heat.common import exception from heat.common import template_format -from heat.engine import resource from heat.engine.resources.openstack.heat import cloud_watch from heat.engine import rsrc_defn from heat.engine import scheduler @@ -125,7 +125,7 @@ class CloudWatchAlarmTest(common.HeatTestCase): props) updater = scheduler.TaskRunner(rsrc.update, snippet) - self.assertRaises(resource.UpdateReplace, updater) + self.assertRaises(exception.UpdateReplace, updater) scheduler.TaskRunner(rsrc.delete)() self.m.VerifyAll() diff --git a/heat/tests/test_hot.py b/heat/tests/test_hot.py index b5f17d55fb..9e6e146f5b 100644 --- a/heat/tests/test_hot.py +++ b/heat/tests/test_hot.py @@ -24,7 +24,6 @@ from heat.engine.hot import functions as hot_functions from heat.engine.hot import parameters as hot_param from heat.engine.hot import template as hot_template from heat.engine import parameters -from heat.engine import resource from heat.engine import resources from heat.engine import rsrc_defn from heat.engine import stack as parser @@ -1183,7 +1182,7 @@ class HotStackTest(common.HeatTestCase): 'Properties': {'Foo': 'xyz'}}, {'Type': 'ResourceWithPropsType', 'Properties': {'Foo': 'abc'}} - ).WithSideEffects(check_props).AndRaise(resource.UpdateReplace) + ).WithSideEffects(check_props).AndRaise(exception.UpdateReplace) self.m.ReplayAll() self.stack.update(updated_stack) @@ -1227,7 +1226,7 @@ class HotStackTest(common.HeatTestCase): 'Properties': {'Foo': 'xyz'}}, {'Type': 'ResourceWithPropsType', 'Properties': {'Foo': 'abc'}} - ).WithSideEffects(check_props).AndRaise(resource.UpdateReplace) + ).WithSideEffects(check_props).AndRaise(exception.UpdateReplace) self.m.ReplayAll() self.stack.update(updated_stack) diff --git a/heat/tests/test_instance_group.py b/heat/tests/test_instance_group.py index 8d494b65f0..7aee4ca361 100644 --- a/heat/tests/test_instance_group.py +++ b/heat/tests/test_instance_group.py @@ -19,7 +19,6 @@ import six from heat.common import exception from heat.common import grouputils from heat.common import template_format -from heat.engine import resource from heat.engine.resources.openstack.heat import instance_group as instgrp from heat.engine import rsrc_defn from heat.engine import scheduler @@ -196,7 +195,7 @@ class TestLaunchConfig(common.HeatTestCase): metadata) # Changing metadata in the second update triggers UpdateReplace updater = scheduler.TaskRunner(rsrc.update, update_snippet) - self.assertRaises(resource.UpdateReplace, updater) + self.assertRaises(exception.UpdateReplace, updater) class LoadbalancerReloadTest(common.HeatTestCase): diff --git a/heat/tests/test_remote_stack.py b/heat/tests/test_remote_stack.py index b4430f109e..fcc1376dbf 100644 --- a/heat/tests/test_remote_stack.py +++ b/heat/tests/test_remote_stack.py @@ -24,7 +24,6 @@ from heat.common import exception from heat.common.i18n import _ from heat.common import template_format from heat.engine import environment -from heat.engine import resource from heat.engine.resources.openstack.heat import remote_stack from heat.engine import rsrc_defn from heat.engine import scheduler @@ -619,7 +618,7 @@ class RemoteStackTest(tests_common.HeatTestCase): update_snippet = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(), props) - self.assertRaises(resource.UpdateReplace, + self.assertRaises(exception.UpdateReplace, scheduler.TaskRunner(rsrc.update, update_snippet)) def test_update_failed(self): diff --git a/heat/tests/test_resource.py b/heat/tests/test_resource.py index 67d84538ae..93eafc788b 100644 --- a/heat/tests/test_resource.py +++ b/heat/tests/test_resource.py @@ -371,7 +371,7 @@ class ResourceTest(common.HeatTestCase): utmpl = rsrc_defn.ResourceDefinition('test_resource', 'TestResource', {'a_string': 'foo'}) self.assertRaises( - resource.UpdateReplace, scheduler.TaskRunner(res.update, utmpl)) + exception.UpdateReplace, scheduler.TaskRunner(res.update, utmpl)) def test_update_replace_in_failed_without_nested(self): tmpl = rsrc_defn.ResourceDefinition('test_resource', @@ -394,7 +394,7 @@ class ResourceTest(common.HeatTestCase): # resource in failed status and hasn't nested will enter # UpdateReplace flow self.assertRaises( - resource.UpdateReplace, scheduler.TaskRunner(res.update, utmpl)) + exception.UpdateReplace, scheduler.TaskRunner(res.update, utmpl)) self.m.VerifyAll() @@ -586,7 +586,7 @@ class ResourceTest(common.HeatTestCase): after_props = {'Bar': '456'} res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack) res.update_allowed_properties = ('Cat',) - self.assertRaises(resource.UpdateReplace, + self.assertRaises(exception.UpdateReplace, res.update_template_diff_properties, after_props, before_props) @@ -859,12 +859,12 @@ class ResourceTest(common.HeatTestCase): tmpl_diff = {'Properties': {'Foo': 'xyz'}} prop_diff = {'Foo': 'xyz'} generic_rsrc.ResourceWithProps.handle_update( - utmpl, tmpl_diff, prop_diff).AndRaise(resource.UpdateReplace( + utmpl, tmpl_diff, prop_diff).AndRaise(exception.UpdateReplace( res.name)) self.m.ReplayAll() # should be re-raised so parser.Stack can handle replacement updater = scheduler.TaskRunner(res.update, utmpl) - ex = self.assertRaises(resource.UpdateReplace, updater) + ex = self.assertRaises(exception.UpdateReplace, updater) self.assertEqual('The Resource test_resource requires replacement.', six.text_type(ex)) self.m.VerifyAll() @@ -885,11 +885,11 @@ class ResourceTest(common.HeatTestCase): tmpl_diff = {'Properties': {'Foo': 'xyz'}} prop_diff = {'Foo': 'xyz'} generic_rsrc.ResourceWithProps.handle_update( - utmpl, tmpl_diff, prop_diff).AndRaise(resource.UpdateReplace()) + utmpl, tmpl_diff, prop_diff).AndRaise(exception.UpdateReplace()) self.m.ReplayAll() # should be re-raised so parser.Stack can handle replacement updater = scheduler.TaskRunner(res.update, utmpl) - ex = self.assertRaises(resource.UpdateReplace, updater) + ex = self.assertRaises(exception.UpdateReplace, updater) self.assertEqual('The Resource Unknown requires replacement.', six.text_type(ex)) self.m.VerifyAll() @@ -903,7 +903,7 @@ class ResourceTest(common.HeatTestCase): self.assertEqual((res.INIT, res.COMPLETE), res.state) prop = {'Foo': 'abc'} - self.assertRaises(resource.UpdateReplace, + self.assertRaises(exception.UpdateReplace, res._needs_update, tmpl, tmpl, prop, prop, res) def test_update_fail_missing_req_prop(self): diff --git a/heat/tests/test_stack_resource.py b/heat/tests/test_stack_resource.py index ddb0c4a44e..2547760664 100644 --- a/heat/tests/test_stack_resource.py +++ b/heat/tests/test_stack_resource.py @@ -543,7 +543,7 @@ class StackResourceTest(StackResourceBaseTest): self.parent_resource.state_set(self.parent_resource.INIT, self.parent_resource.FAILED) self.parent_resource._nested = None - self.assertRaises(resource.UpdateReplace, + self.assertRaises(exception.UpdateReplace, self.parent_resource._needs_update, self.parent_resource.t, self.parent_resource.t, @@ -559,7 +559,7 @@ class StackResourceTest(StackResourceBaseTest): self.parent_resource.state_set(self.parent_resource.INIT, self.parent_resource.COMPLETE) self.parent_resource._nested = None - self.assertRaises(resource.UpdateReplace, + self.assertRaises(exception.UpdateReplace, self.parent_resource._needs_update, self.parent_resource.t, self.parent_resource.t, diff --git a/heat/tests/test_stack_update.py b/heat/tests/test_stack_update.py index b6ede3f802..a158c11057 100644 --- a/heat/tests/test_stack_update.py +++ b/heat/tests/test_stack_update.py @@ -15,6 +15,7 @@ import copy import mock +from heat.common import exception from heat.common import template_format from heat.engine import environment from heat.engine import resource @@ -340,7 +341,7 @@ class StackUpdateTest(common.HeatTestCase): def check_and_raise(*args): self.assertEqual('abc', self.stack['AResource'].properties['Foo']) - raise resource.UpdateReplace + raise exception.UpdateReplace mock_upd = self.patchobject(generic_rsrc.ResourceWithProps, 'update_template_diff', diff --git a/heat/tests/test_zaqar_queue.py b/heat/tests/test_zaqar_queue.py index f01848b31e..36e9e69fe5 100644 --- a/heat/tests/test_zaqar_queue.py +++ b/heat/tests/test_zaqar_queue.py @@ -16,7 +16,6 @@ import six from heat.common import exception from heat.common import template_format -from heat.engine import resource from heat.engine.resources.openstack.zaqar import queue from heat.engine import rsrc_defn from heat.engine import scheduler @@ -261,7 +260,7 @@ class ZaqarMessageQueueTest(common.HeatTestCase): new_queue = resource_defns['MyQueue2'] scheduler.TaskRunner(queue.create)() - err = self.assertRaises(resource.UpdateReplace, + err = self.assertRaises(exception.UpdateReplace, scheduler.TaskRunner(queue.update, new_queue)) msg = 'The Resource MyQueue2 requires replacement.'