From 4e2cfb991ada853023cd0994db2bf9a39126c538 Mon Sep 17 00:00:00 2001 From: Oleksii Chuprykov Date: Wed, 2 Sep 2015 15:19:09 +0300 Subject: [PATCH] Move Resource exceptions to common module (1) It is convenient to have all exceptions in exception module. Also it is reduces namespace cluttering of resource module and decreases the number of dependencies in other modules (we do not need to import resource in some cases for now). UpdateReplace exception is moved in this patch. Change-Id: Ief441ca2022a0d50e88d709d1a062631479715b7 --- heat/common/exception.py | 7 +++++++ heat/engine/resource.py | 19 ++++++------------- .../aws/autoscaling/launch_config.py | 2 +- heat/engine/resources/aws/ec2/eip.py | 4 ++-- .../resources/openstack/heat/test_resource.py | 3 ++- .../openstack/heat/wait_condition_handle.py | 4 ++-- .../openstack/monasca/alarm_definition.py | 3 ++- .../resources/openstack/neutron/port.py | 4 ++-- .../engine/resources/openstack/nova/server.py | 4 ++-- heat/engine/resources/stack_resource.py | 4 ++-- heat/engine/update.py | 6 +++--- heat/engine/worker.py | 2 +- heat/tests/aws/test_instance.py | 2 +- .../tests/ceilometer/test_ceilometer_alarm.py | 3 +-- heat/tests/engine/test_engine_worker.py | 2 +- .../manila/test_manila_security_service.py | 3 +-- heat/tests/mistral/test_mistral_workflow.py | 2 +- heat/tests/neutron/test_neutron_port.py | 3 +-- heat/tests/nova/test_server.py | 10 +++++----- .../monasca/test_alarm_definition.py | 3 ++- heat/tests/openstack/test_waitcondition.py | 4 ++-- heat/tests/test_cw_alarm.py | 4 ++-- heat/tests/test_hot.py | 5 ++--- heat/tests/test_instance_group.py | 3 +-- heat/tests/test_remote_stack.py | 3 +-- heat/tests/test_resource.py | 16 ++++++++-------- heat/tests/test_stack_resource.py | 4 ++-- heat/tests/test_stack_update.py | 3 ++- heat/tests/test_zaqar_queue.py | 3 +-- 29 files changed, 66 insertions(+), 69 deletions(-) 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.'