Merge "Move Resource exceptions to common module (1)"

This commit is contained in:
Jenkins 2015-09-06 10:52:38 +00:00 committed by Gerrit Code Review
commit 49c4d39516
29 changed files with 66 additions and 69 deletions

View File

@ -388,6 +388,13 @@ class PropertyUnspecifiedError(HeatException):
super(PropertyUnspecifiedError, self).__init__(**kwargs) 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): class HTTPExceptionDisguise(Exception):
"""Disguises HTTP exceptions so they can be handled by the webob fault """Disguises HTTP exceptions so they can be handled by the webob fault
application in the wsgi pipeline. application in the wsgi pipeline.

View File

@ -57,13 +57,6 @@ def _register_class(resource_type, resource_class):
resources.global_env().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): class NoActionRequired(Exception):
pass pass
@ -521,7 +514,7 @@ class Resource(object):
raise exception.NotSupported(feature=mesg) raise exception.NotSupported(feature=mesg)
if not changed_properties_set.issubset(update_allowed_set): 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) 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, def _needs_update(self, after, before, after_props, before_props,
prev_resource, check_init_complete=True): prev_resource, check_init_complete=True):
if self.status == self.FAILED: if self.status == self.FAILED:
raise UpdateReplace(self) raise exception.UpdateReplace(self)
if check_init_complete and \ if check_init_complete and \
(self.action == self.INIT and self.status == self.COMPLETE): (self.action == self.INIT and self.status == self.COMPLETE):
raise UpdateReplace(self) raise exception.UpdateReplace(self)
if prev_resource is not None: if prev_resource is not None:
cur_class_def, cur_ver = self.implementation_signature() cur_class_def, cur_ver = self.implementation_signature()
prev_class_def, prev_ver = prev_resource.implementation_signature() prev_class_def, prev_ver = prev_resource.implementation_signature()
if prev_class_def != cur_class_def: if prev_class_def != cur_class_def:
raise UpdateReplace(self.name) raise exception.UpdateReplace(self.name)
if prev_ver != cur_ver: if prev_ver != cur_ver:
return True return True
@ -947,7 +940,7 @@ class Resource(object):
LOG.info(_LI('updating %s'), six.text_type(self)) LOG.info(_LI('updating %s'), six.text_type(self))
self.updated_time = datetime.utcnow() self.updated_time = datetime.utcnow()
with self._action_recorder(action, UpdateReplace): with self._action_recorder(action, exception.UpdateReplace):
after_props.validate() after_props.validate()
tmpl_diff = self.update_template_diff(function.resolve(after), tmpl_diff = self.update_template_diff(function.resolve(after),
before) before)
@ -1576,7 +1569,7 @@ class Resource(object):
def handle_update(self, json_snippet=None, tmpl_diff=None, prop_diff=None): def handle_update(self, json_snippet=None, tmpl_diff=None, prop_diff=None):
if prop_diff: if prop_diff:
raise UpdateReplace(self.name) raise exception.UpdateReplace(self.name)
def metadata_update(self, new_metadata=None): def metadata_update(self, new_metadata=None):
''' '''

View File

@ -218,7 +218,7 @@ class LaunchConfiguration(resource.Resource):
def handle_update(self, json_snippet, tmpl_diff, prop_diff): def handle_update(self, json_snippet, tmpl_diff, prop_diff):
if 'Metadata' in tmpl_diff: if 'Metadata' in tmpl_diff:
raise resource.UpdateReplace(self.name) raise exception.UpdateReplace(self.name)
def FnGetRefId(self): def FnGetRefId(self):
return self.physical_resource_name_or_FnGetRefId() return self.physical_resource_name_or_FnGetRefId()

View File

@ -376,7 +376,7 @@ class ElasticIpAssociation(resource.Resource):
ni_id = prop_diff.get(self.NETWORK_INTERFACE_ID) ni_id = prop_diff.get(self.NETWORK_INTERFACE_ID)
if instance_id or ni_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 # according to aws doc, when update the instance_id or
# network_interface_id, if you also change the EIP 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) eip = prop_diff.get(self.EIP)
allocation_id = prop_diff.get(self.ALLOCATION_ID) allocation_id = prop_diff.get(self.ALLOCATION_ID)
if eip or allocation_id: if eip or allocation_id:
raise resource.UpdateReplace(self.name) raise exception.UpdateReplace(self.name)
def handle_create(self): def handle_create(self):
"""Add a floating IP address to a server.""" """Add a floating IP address to a server."""

View File

@ -16,6 +16,7 @@ import eventlet
from oslo_utils import timeutils from oslo_utils import timeutils
import six import six
from heat.common import exception
from heat.common.i18n import _ from heat.common.i18n import _
from heat.engine import attributes from heat.engine import attributes
from heat.engine import properties from heat.engine import properties
@ -156,7 +157,7 @@ class TestResource(resource.Resource):
if value: if value:
update_replace = self.properties[self.UPDATE_REPLACE] update_replace = self.properties[self.UPDATE_REPLACE]
if update_replace: if update_replace:
raise resource.UpdateReplace(self.name) raise exception.UpdateReplace(self.name)
else: else:
# emulate failure # emulate failure
fail_prop = self.properties[self.FAIL] fail_prop = self.properties[self.FAIL]

View File

@ -13,9 +13,9 @@
import uuid import uuid
from heat.common import exception
from heat.common.i18n import _ from heat.common.i18n import _
from heat.engine import attributes 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.aws.cfn import wait_condition_handle as aws_wch
from heat.engine.resources import wait_condition as wc_base from heat.engine.resources import wait_condition as wc_base
from heat.engine import support from heat.engine import support
@ -141,7 +141,7 @@ class UpdateWaitConditionHandle(aws_wch.WaitConditionHandle):
support_status = support.SupportStatus(version='2014.1') support_status = support.SupportStatus(version='2014.1')
def update(self, after, before=None, prev_resource=None): def update(self, after, before=None, prev_resource=None):
raise resource.UpdateReplace(self.name) raise exception.UpdateReplace(self.name)
def resource_mapping(): def resource_mapping():

View File

@ -11,6 +11,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from heat.common import exception
from heat.common.i18n import _ from heat.common.i18n import _
from heat.engine import clients from heat.engine import clients
from heat.engine import constraints from heat.engine import constraints
@ -186,7 +187,7 @@ class MonascaAlarmDefinition(resource.Resource):
except Exception as ex: except Exception as ex:
if self.client_plugin().is_un_processable(ex): if self.client_plugin().is_un_processable(ex):
# Monasca does not allow to update the sub expression # 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): def handle_delete(self):
if self.resource_id is not None: if self.resource_id is not None:

View File

@ -14,12 +14,12 @@
from oslo_log import log as logging from oslo_log import log as logging
import six import six
from heat.common import exception
from heat.common.i18n import _ from heat.common.i18n import _
from heat.common.i18n import _LW from heat.common.i18n import _LW
from heat.engine import attributes from heat.engine import attributes
from heat.engine import constraints from heat.engine import constraints
from heat.engine import properties 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 neutron
from heat.engine.resources.openstack.neutron import subnet from heat.engine.resources.openstack.neutron import subnet
from heat.engine import support from heat.engine import support
@ -415,7 +415,7 @@ class Port(neutron.NeutronResource):
prev_resource, check_init_complete=True): prev_resource, check_init_complete=True):
if after_props.get(self.REPLACEMENT_POLICY) == 'REPLACE_ALWAYS': 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( return super(Port, self)._needs_update(
after, before, after_props, before_props, prev_resource, after, before, after_props, before_props, prev_resource,

View File

@ -945,7 +945,7 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin,
flavor = prop_diff[self.FLAVOR] flavor = prop_diff[self.FLAVOR]
if flavor_update_policy == 'REPLACE': if flavor_update_policy == 'REPLACE':
raise resource.UpdateReplace(self.name) raise exception.UpdateReplace(self.name)
flavor_id = self.client_plugin().get_flavor_id(flavor) flavor_id = self.client_plugin().get_flavor_id(flavor)
handler_args = {'args': (flavor_id,)} handler_args = {'args': (flavor_id,)}
@ -964,7 +964,7 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin,
prop_diff.get(self.IMAGE_UPDATE_POLICY) or prop_diff.get(self.IMAGE_UPDATE_POLICY) or
self.properties[self.IMAGE_UPDATE_POLICY]) self.properties[self.IMAGE_UPDATE_POLICY])
if image_update_policy == 'REPLACE': if image_update_policy == 'REPLACE':
raise resource.UpdateReplace(self.name) raise exception.UpdateReplace(self.name)
image = prop_diff[self.IMAGE] image = prop_diff[self.IMAGE]
image_id = self.client_plugin('glance').get_image_id(image) image_id = self.client_plugin('glance').get_image_id(image)
preserve_ephemeral = ( preserve_ephemeral = (

View File

@ -93,12 +93,12 @@ class StackResource(resource.Resource):
# FIXME (ricolin): seems currently can not call super here # FIXME (ricolin): seems currently can not call super here
if self.nested() is None and self.status == self.FAILED: if self.nested() is None and self.status == self.FAILED:
raise resource.UpdateReplace(self) raise exception.UpdateReplace(self)
if (check_init_complete and if (check_init_complete and
self.nested() is None and self.nested() is None and
self.action == self.INIT and self.status == self.COMPLETE): self.action == self.INIT and self.status == self.COMPLETE):
raise resource.UpdateReplace(self) raise exception.UpdateReplace(self)
return True return True

View File

@ -14,9 +14,9 @@
from oslo_log import log as logging from oslo_log import log as logging
import six import six
from heat.common import exception
from heat.common.i18n import _LI from heat.common.i18n import _LI
from heat.engine import dependencies from heat.engine import dependencies
from heat.engine import resource
from heat.engine import scheduler from heat.engine import scheduler
from heat.objects import resource as resource_objects from heat.objects import resource as resource_objects
@ -145,7 +145,7 @@ class StackUpdate(object):
try: try:
yield self._update_in_place(existing_res, yield self._update_in_place(existing_res,
new_res) new_res)
except resource.UpdateReplace: except exception.UpdateReplace:
pass pass
else: else:
# Save updated resource definition to backup stack # Save updated resource definition to backup stack
@ -248,7 +248,7 @@ class StackUpdate(object):
current_res.update_template_diff_properties(updated_props, current_res.update_template_diff_properties(updated_props,
current_props) current_props)
updated_keys.append(key) updated_keys.append(key)
except resource.UpdateReplace: except exception.UpdateReplace:
replaced_keys.append(key) replaced_keys.append(key)
return { return {

View File

@ -156,7 +156,7 @@ class WorkerService(service.Service):
check_resource_update(rsrc, tmpl.id, resource_data, check_resource_update(rsrc, tmpl.id, resource_data,
self.engine_id, self.engine_id,
stack.time_remaining()) stack.time_remaining())
except resource.UpdateReplace: except exception.UpdateReplace:
new_res_id = rsrc.make_replacement(tmpl.id) new_res_id = rsrc.make_replacement(tmpl.id)
LOG.info("Replacing resource with new id %s", new_res_id) LOG.info("Replacing resource with new id %s", new_res_id)
rpc_data = sync_point.serialize_input_data(resource_data) rpc_data = sync_point.serialize_input_data(resource_data)

View File

@ -1118,7 +1118,7 @@ class InstancesTest(common.HeatTestCase):
update_template = copy.deepcopy(instance.t) update_template = copy.deepcopy(instance.t)
update_template['Properties']['ImageId'] = 'mustreplace' update_template['Properties']['ImageId'] = 'mustreplace'
updater = scheduler.TaskRunner(instance.update, update_template) updater = scheduler.TaskRunner(instance.update, update_template)
self.assertRaises(resource.UpdateReplace, updater) self.assertRaises(exception.UpdateReplace, updater)
self.m.VerifyAll() self.m.VerifyAll()

View File

@ -23,7 +23,6 @@ from heat.common import exception
from heat.common import template_format from heat.common import template_format
from heat.engine.clients.os import ceilometer from heat.engine.clients.os import ceilometer
from heat.engine import properties as props from heat.engine import properties as props
from heat.engine import resource
from heat.engine.resources.openstack.ceilometer import alarm from heat.engine.resources.openstack.ceilometer import alarm
from heat.engine import rsrc_defn from heat.engine import rsrc_defn
from heat.engine import scheduler from heat.engine import scheduler
@ -293,7 +292,7 @@ class CeilometerAlarmTest(common.HeatTestCase):
properties) properties)
updater = scheduler.TaskRunner(rsrc.update, snippet) updater = scheduler.TaskRunner(rsrc.update, snippet)
self.assertRaises(resource.UpdateReplace, updater) self.assertRaises(exception.UpdateReplace, updater)
self.m.VerifyAll() self.m.VerifyAll()

View File

@ -167,7 +167,7 @@ class CheckWorkflowUpdateTest(common.HeatTestCase):
@mock.patch.object(resource.Resource, 'make_replacement') @mock.patch.object(resource.Resource, 'make_replacement')
def test_is_update_traversal_raise_update_replace( def test_is_update_traversal_raise_update_replace(
self, mock_mr, mock_cru, mock_crc, mock_pcr, mock_csc, mock_cid): 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.worker.check_resource(
self.ctx, self.resource.id, self.stack.current_traversal, {}, self.ctx, self.resource.id, self.stack.current_traversal, {},
self.is_update, None) self.is_update, None)

View File

@ -16,7 +16,6 @@ import six
from heat.common import exception from heat.common import exception
from heat.common import template_format from heat.common import template_format
from heat.engine import resource
from heat.engine import resources from heat.engine import resources
from heat.engine.resources.openstack.manila import security_service from heat.engine.resources.openstack.manila import security_service
from heat.engine import scheduler from heat.engine import scheduler
@ -166,7 +165,7 @@ class ManilaSecurityServiceTest(common.HeatTestCase):
rsrc_defns = template.Template(t).resource_definitions(self.stack) rsrc_defns = template.Template(t).resource_definitions(self.stack)
new_ss = rsrc_defns['security_service'] new_ss = rsrc_defns['security_service']
self.assertEqual(0, self.client.security_services.update.call_count) 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)) scheduler.TaskRunner(ss.update, new_ss))
msg = 'The Resource security_service requires replacement.' msg = 'The Resource security_service requires replacement.'
self.assertEqual(msg, six.text_type(err)) self.assertEqual(msg, six.text_type(err))

View File

@ -309,7 +309,7 @@ class TestMistralWorkflow(common.HeatTestCase):
self.mistral.workflows.update.return_value = new_workflows self.mistral.workflows.update.return_value = new_workflows
self.mistral.workflows.delete.return_value = None self.mistral.workflows.delete.return_value = None
err = self.assertRaises(resource.UpdateReplace, err = self.assertRaises(exception.UpdateReplace,
scheduler.TaskRunner(wf.update, scheduler.TaskRunner(wf.update,
new_workflow)) new_workflow))
msg = 'The Resource workflow requires replacement.' msg = 'The Resource workflow requires replacement.'

View File

@ -19,7 +19,6 @@ from neutronclient.v2_0 import client as neutronclient
from heat.common import exception from heat.common import exception
from heat.common import template_format from heat.common import template_format
from heat.engine import resource
from heat.engine import rsrc_defn from heat.engine import rsrc_defn
from heat.engine import scheduler from heat.engine import scheduler
from heat.tests import common from heat.tests import common
@ -492,7 +491,7 @@ class NeutronPortTest(common.HeatTestCase):
new_props['replacement_policy'] = 'REPLACE_ALWAYS' new_props['replacement_policy'] = 'REPLACE_ALWAYS'
update_snippet = rsrc_defn.ResourceDefinition(port.name, port.type(), update_snippet = rsrc_defn.ResourceDefinition(port.name, port.type(),
new_props) new_props)
self.assertRaises(resource.UpdateReplace, port._needs_update, self.assertRaises(exception.UpdateReplace, port._needs_update,
update_snippet, port.frozen_definition(), update_snippet, port.frozen_definition(),
new_props, props, None) new_props, props, None)

View File

@ -1742,7 +1742,7 @@ class ServersTest(common.HeatTestCase):
update_template = copy.deepcopy(server.t) update_template = copy.deepcopy(server.t)
update_template['Properties']['flavor'] = 'm1.small' update_template['Properties']['flavor'] = 'm1.small'
updater = scheduler.TaskRunner(server.update, update_template) 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): def test_server_update_server_flavor_policy_update(self):
stack_name = 'update_flvpol' stack_name = 'update_flvpol'
@ -1763,7 +1763,7 @@ class ServersTest(common.HeatTestCase):
update_template['Properties']['flavor_update_policy'] = 'REPLACE' update_template['Properties']['flavor_update_policy'] = 'REPLACE'
update_template['Properties']['flavor'] = 'm1.small' update_template['Properties']['flavor'] = 'm1.small'
updater = scheduler.TaskRunner(server.update, update_template) updater = scheduler.TaskRunner(server.update, update_template)
self.assertRaises(resource.UpdateReplace, updater) self.assertRaises(exception.UpdateReplace, updater)
def test_server_update_image_replace(self): def test_server_update_image_replace(self):
stack_name = 'update_imgrep' stack_name = 'update_imgrep'
@ -1784,7 +1784,7 @@ class ServersTest(common.HeatTestCase):
update_template = copy.deepcopy(server.t) update_template = copy.deepcopy(server.t)
update_template['Properties']['image'] = image_id update_template['Properties']['image'] = image_id
updater = scheduler.TaskRunner(server.update, update_template) 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', def _test_server_update_image_rebuild(self, status, policy='REBUILD',
password=None): password=None):
@ -1914,7 +1914,7 @@ class ServersTest(common.HeatTestCase):
update_template['Properties']['image'] = 'mustreplace' update_template['Properties']['image'] = 'mustreplace'
update_template['Properties']['image_update_policy'] = 'REPLACE' update_template['Properties']['image_update_policy'] = 'REPLACE'
updater = scheduler.TaskRunner(server.update, update_template) updater = scheduler.TaskRunner(server.update, update_template)
self.assertRaises(resource.UpdateReplace, updater) self.assertRaises(exception.UpdateReplace, updater)
def test_server_status_build(self): def test_server_status_build(self):
return_server = self.fc.servers.list()[0] return_server = self.fc.servers.list()[0]
@ -3353,7 +3353,7 @@ class ServersTest(common.HeatTestCase):
# update # update
updater = scheduler.TaskRunner(server.update, update_template) updater = scheduler.TaskRunner(server.update, update_template)
self.assertRaises(resource.UpdateReplace, updater) self.assertRaises(exception.UpdateReplace, updater)
self.m.VerifyAll() self.m.VerifyAll()

View File

@ -13,6 +13,7 @@
import mock import mock
from heat.common import exception
from heat.engine.clients.os import monasca as client_plugin from heat.engine.clients.os import monasca as client_plugin
from heat.engine import resource from heat.engine import resource
from heat.engine.resources.openstack.monasca import alarm_definition from heat.engine.resources.openstack.monasca import alarm_definition
@ -219,7 +220,7 @@ class MonascaAlarmDefinitionTest(common.HeatTestCase):
prop_diff = {alarm_definition.MonascaAlarmDefinition.EXPRESSION: prop_diff = {alarm_definition.MonascaAlarmDefinition.EXPRESSION:
'expression-updated'} 'expression-updated'}
self.assertRaises(resource.UpdateReplace, self.assertRaises(exception.UpdateReplace,
self.test_resource.handle_update, self.test_resource.handle_update,
json_snippet=None, json_snippet=None,
tmpl_diff=None, tmpl_diff=None,

View File

@ -18,11 +18,11 @@ from oslo_serialization import jsonutils as json
from oslo_utils import timeutils from oslo_utils import timeutils
import six import six
from heat.common import exception
from heat.common import identifier from heat.common import identifier
from heat.common import template_format from heat.common import template_format
from heat.engine.clients.os import heat_plugin from heat.engine.clients.os import heat_plugin
from heat.engine import environment 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.resources.openstack.heat import wait_condition_handle as h_wch
from heat.engine import stack as parser from heat.engine import stack as parser
from heat.engine import template as tmpl from heat.engine import template as tmpl
@ -360,4 +360,4 @@ class HeatWaitConditionTest(common.HeatTestCase):
handle = self.stack['update_wait_handle'] handle = self.stack['update_wait_handle']
self.assertEqual((handle.CREATE, handle.COMPLETE), handle.state) self.assertEqual((handle.CREATE, handle.COMPLETE), handle.state)
self.assertRaises( self.assertRaises(
resource.UpdateReplace, handle.update, None, None) exception.UpdateReplace, handle.update, None, None)

View File

@ -14,8 +14,8 @@
import copy import copy
from heat.common import exception
from heat.common import template_format from heat.common import template_format
from heat.engine import resource
from heat.engine.resources.openstack.heat import cloud_watch from heat.engine.resources.openstack.heat import cloud_watch
from heat.engine import rsrc_defn from heat.engine import rsrc_defn
from heat.engine import scheduler from heat.engine import scheduler
@ -125,7 +125,7 @@ class CloudWatchAlarmTest(common.HeatTestCase):
props) props)
updater = scheduler.TaskRunner(rsrc.update, snippet) updater = scheduler.TaskRunner(rsrc.update, snippet)
self.assertRaises(resource.UpdateReplace, updater) self.assertRaises(exception.UpdateReplace, updater)
scheduler.TaskRunner(rsrc.delete)() scheduler.TaskRunner(rsrc.delete)()
self.m.VerifyAll() self.m.VerifyAll()

View File

@ -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 parameters as hot_param
from heat.engine.hot import template as hot_template from heat.engine.hot import template as hot_template
from heat.engine import parameters from heat.engine import parameters
from heat.engine import resource
from heat.engine import resources from heat.engine import resources
from heat.engine import rsrc_defn from heat.engine import rsrc_defn
from heat.engine import stack as parser from heat.engine import stack as parser
@ -1183,7 +1182,7 @@ class HotStackTest(common.HeatTestCase):
'Properties': {'Foo': 'xyz'}}, 'Properties': {'Foo': 'xyz'}},
{'Type': 'ResourceWithPropsType', {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'abc'}} 'Properties': {'Foo': 'abc'}}
).WithSideEffects(check_props).AndRaise(resource.UpdateReplace) ).WithSideEffects(check_props).AndRaise(exception.UpdateReplace)
self.m.ReplayAll() self.m.ReplayAll()
self.stack.update(updated_stack) self.stack.update(updated_stack)
@ -1227,7 +1226,7 @@ class HotStackTest(common.HeatTestCase):
'Properties': {'Foo': 'xyz'}}, 'Properties': {'Foo': 'xyz'}},
{'Type': 'ResourceWithPropsType', {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'abc'}} 'Properties': {'Foo': 'abc'}}
).WithSideEffects(check_props).AndRaise(resource.UpdateReplace) ).WithSideEffects(check_props).AndRaise(exception.UpdateReplace)
self.m.ReplayAll() self.m.ReplayAll()
self.stack.update(updated_stack) self.stack.update(updated_stack)

View File

@ -19,7 +19,6 @@ import six
from heat.common import exception from heat.common import exception
from heat.common import grouputils from heat.common import grouputils
from heat.common import template_format 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.resources.openstack.heat import instance_group as instgrp
from heat.engine import rsrc_defn from heat.engine import rsrc_defn
from heat.engine import scheduler from heat.engine import scheduler
@ -196,7 +195,7 @@ class TestLaunchConfig(common.HeatTestCase):
metadata) metadata)
# Changing metadata in the second update triggers UpdateReplace # Changing metadata in the second update triggers UpdateReplace
updater = scheduler.TaskRunner(rsrc.update, update_snippet) updater = scheduler.TaskRunner(rsrc.update, update_snippet)
self.assertRaises(resource.UpdateReplace, updater) self.assertRaises(exception.UpdateReplace, updater)
class LoadbalancerReloadTest(common.HeatTestCase): class LoadbalancerReloadTest(common.HeatTestCase):

View File

@ -24,7 +24,6 @@ from heat.common import exception
from heat.common.i18n import _ from heat.common.i18n import _
from heat.common import template_format from heat.common import template_format
from heat.engine import environment from heat.engine import environment
from heat.engine import resource
from heat.engine.resources.openstack.heat import remote_stack from heat.engine.resources.openstack.heat import remote_stack
from heat.engine import rsrc_defn from heat.engine import rsrc_defn
from heat.engine import scheduler from heat.engine import scheduler
@ -619,7 +618,7 @@ class RemoteStackTest(tests_common.HeatTestCase):
update_snippet = rsrc_defn.ResourceDefinition(rsrc.name, update_snippet = rsrc_defn.ResourceDefinition(rsrc.name,
rsrc.type(), rsrc.type(),
props) props)
self.assertRaises(resource.UpdateReplace, self.assertRaises(exception.UpdateReplace,
scheduler.TaskRunner(rsrc.update, update_snippet)) scheduler.TaskRunner(rsrc.update, update_snippet))
def test_update_failed(self): def test_update_failed(self):

View File

@ -371,7 +371,7 @@ class ResourceTest(common.HeatTestCase):
utmpl = rsrc_defn.ResourceDefinition('test_resource', 'TestResource', utmpl = rsrc_defn.ResourceDefinition('test_resource', 'TestResource',
{'a_string': 'foo'}) {'a_string': 'foo'})
self.assertRaises( 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): def test_update_replace_in_failed_without_nested(self):
tmpl = rsrc_defn.ResourceDefinition('test_resource', tmpl = rsrc_defn.ResourceDefinition('test_resource',
@ -394,7 +394,7 @@ class ResourceTest(common.HeatTestCase):
# resource in failed status and hasn't nested will enter # resource in failed status and hasn't nested will enter
# UpdateReplace flow # UpdateReplace flow
self.assertRaises( self.assertRaises(
resource.UpdateReplace, scheduler.TaskRunner(res.update, utmpl)) exception.UpdateReplace, scheduler.TaskRunner(res.update, utmpl))
self.m.VerifyAll() self.m.VerifyAll()
@ -586,7 +586,7 @@ class ResourceTest(common.HeatTestCase):
after_props = {'Bar': '456'} after_props = {'Bar': '456'}
res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack) res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)
res.update_allowed_properties = ('Cat',) res.update_allowed_properties = ('Cat',)
self.assertRaises(resource.UpdateReplace, self.assertRaises(exception.UpdateReplace,
res.update_template_diff_properties, res.update_template_diff_properties,
after_props, before_props) after_props, before_props)
@ -859,12 +859,12 @@ class ResourceTest(common.HeatTestCase):
tmpl_diff = {'Properties': {'Foo': 'xyz'}} tmpl_diff = {'Properties': {'Foo': 'xyz'}}
prop_diff = {'Foo': 'xyz'} prop_diff = {'Foo': 'xyz'}
generic_rsrc.ResourceWithProps.handle_update( generic_rsrc.ResourceWithProps.handle_update(
utmpl, tmpl_diff, prop_diff).AndRaise(resource.UpdateReplace( utmpl, tmpl_diff, prop_diff).AndRaise(exception.UpdateReplace(
res.name)) res.name))
self.m.ReplayAll() self.m.ReplayAll()
# should be re-raised so parser.Stack can handle replacement # should be re-raised so parser.Stack can handle replacement
updater = scheduler.TaskRunner(res.update, utmpl) 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.', self.assertEqual('The Resource test_resource requires replacement.',
six.text_type(ex)) six.text_type(ex))
self.m.VerifyAll() self.m.VerifyAll()
@ -885,11 +885,11 @@ class ResourceTest(common.HeatTestCase):
tmpl_diff = {'Properties': {'Foo': 'xyz'}} tmpl_diff = {'Properties': {'Foo': 'xyz'}}
prop_diff = {'Foo': 'xyz'} prop_diff = {'Foo': 'xyz'}
generic_rsrc.ResourceWithProps.handle_update( generic_rsrc.ResourceWithProps.handle_update(
utmpl, tmpl_diff, prop_diff).AndRaise(resource.UpdateReplace()) utmpl, tmpl_diff, prop_diff).AndRaise(exception.UpdateReplace())
self.m.ReplayAll() self.m.ReplayAll()
# should be re-raised so parser.Stack can handle replacement # should be re-raised so parser.Stack can handle replacement
updater = scheduler.TaskRunner(res.update, utmpl) 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.', self.assertEqual('The Resource Unknown requires replacement.',
six.text_type(ex)) six.text_type(ex))
self.m.VerifyAll() self.m.VerifyAll()
@ -903,7 +903,7 @@ class ResourceTest(common.HeatTestCase):
self.assertEqual((res.INIT, res.COMPLETE), res.state) self.assertEqual((res.INIT, res.COMPLETE), res.state)
prop = {'Foo': 'abc'} prop = {'Foo': 'abc'}
self.assertRaises(resource.UpdateReplace, self.assertRaises(exception.UpdateReplace,
res._needs_update, tmpl, tmpl, prop, prop, res) res._needs_update, tmpl, tmpl, prop, prop, res)
def test_update_fail_missing_req_prop(self): def test_update_fail_missing_req_prop(self):

View File

@ -543,7 +543,7 @@ class StackResourceTest(StackResourceBaseTest):
self.parent_resource.state_set(self.parent_resource.INIT, self.parent_resource.state_set(self.parent_resource.INIT,
self.parent_resource.FAILED) self.parent_resource.FAILED)
self.parent_resource._nested = None self.parent_resource._nested = None
self.assertRaises(resource.UpdateReplace, self.assertRaises(exception.UpdateReplace,
self.parent_resource._needs_update, self.parent_resource._needs_update,
self.parent_resource.t, self.parent_resource.t,
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.state_set(self.parent_resource.INIT,
self.parent_resource.COMPLETE) self.parent_resource.COMPLETE)
self.parent_resource._nested = None self.parent_resource._nested = None
self.assertRaises(resource.UpdateReplace, self.assertRaises(exception.UpdateReplace,
self.parent_resource._needs_update, self.parent_resource._needs_update,
self.parent_resource.t, self.parent_resource.t,
self.parent_resource.t, self.parent_resource.t,

View File

@ -15,6 +15,7 @@ import copy
import mock import mock
from heat.common import exception
from heat.common import template_format from heat.common import template_format
from heat.engine import environment from heat.engine import environment
from heat.engine import resource from heat.engine import resource
@ -340,7 +341,7 @@ class StackUpdateTest(common.HeatTestCase):
def check_and_raise(*args): def check_and_raise(*args):
self.assertEqual('abc', self.stack['AResource'].properties['Foo']) self.assertEqual('abc', self.stack['AResource'].properties['Foo'])
raise resource.UpdateReplace raise exception.UpdateReplace
mock_upd = self.patchobject(generic_rsrc.ResourceWithProps, mock_upd = self.patchobject(generic_rsrc.ResourceWithProps,
'update_template_diff', 'update_template_diff',

View File

@ -16,7 +16,6 @@ import six
from heat.common import exception from heat.common import exception
from heat.common import template_format from heat.common import template_format
from heat.engine import resource
from heat.engine.resources.openstack.zaqar import queue from heat.engine.resources.openstack.zaqar import queue
from heat.engine import rsrc_defn from heat.engine import rsrc_defn
from heat.engine import scheduler from heat.engine import scheduler
@ -261,7 +260,7 @@ class ZaqarMessageQueueTest(common.HeatTestCase):
new_queue = resource_defns['MyQueue2'] new_queue = resource_defns['MyQueue2']
scheduler.TaskRunner(queue.create)() scheduler.TaskRunner(queue.create)()
err = self.assertRaises(resource.UpdateReplace, err = self.assertRaises(exception.UpdateReplace,
scheduler.TaskRunner(queue.update, scheduler.TaskRunner(queue.update,
new_queue)) new_queue))
msg = 'The Resource MyQueue2 requires replacement.' msg = 'The Resource MyQueue2 requires replacement.'