Not all exceptions from remote stacks are internal exceptions
The code in stack_resource assumed all exceptions raised in the remote stack were from heat/common/exceptions.py but oslo messaging also raises exceptions (timeout). Change-Id: I91e1497ebf731a69fa86a574b42cccfe59430df1 Closes-bug: #1459837
This commit is contained in:
parent
65b8c87e48
commit
c1bb5fb384
|
@ -297,6 +297,8 @@ class StackResource(resource.Resource):
|
||||||
full_message = six.text_type(ex)
|
full_message = six.text_type(ex)
|
||||||
if full_message.find('\n') > -1 and is_remote:
|
if full_message.find('\n') > -1 and is_remote:
|
||||||
message, msg_trace = full_message.split('\n', 1)
|
message, msg_trace = full_message.split('\n', 1)
|
||||||
|
elif isinstance(ex, exception.HeatException):
|
||||||
|
message = ex.message
|
||||||
else:
|
else:
|
||||||
message = full_message
|
message = full_message
|
||||||
|
|
||||||
|
@ -307,11 +309,12 @@ class StackResource(resource.Resource):
|
||||||
# finish
|
# finish
|
||||||
return
|
return
|
||||||
|
|
||||||
if isinstance(ex, exception.HeatException):
|
if hasattr(exception, ex_type):
|
||||||
message = ex.message
|
|
||||||
local_ex = copy.copy(getattr(exception, ex_type))
|
local_ex = copy.copy(getattr(exception, ex_type))
|
||||||
local_ex.msg_fmt = "%(message)s"
|
local_ex.msg_fmt = "%(message)s"
|
||||||
raise local_ex(message=message)
|
raise local_ex(message=message)
|
||||||
|
else:
|
||||||
|
raise exception.ResourceFailure(ex, self, 'remote')
|
||||||
|
|
||||||
def check_create_complete(self, cookie=None):
|
def check_create_complete(self, cookie=None):
|
||||||
return self._check_status_complete(resource.Resource.CREATE)
|
return self._check_status_complete(resource.Resource.CREATE)
|
||||||
|
|
|
@ -16,6 +16,7 @@ import uuid
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
|
from oslo_messaging import exceptions as msg_exceptions
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from heat.common import exception
|
from heat.common import exception
|
||||||
|
@ -799,3 +800,22 @@ class WithTemplateTest(StackResourceBaseTest):
|
||||||
rpcc.return_value.update_stack.assert_called_once_with(
|
rpcc.return_value.update_stack.assert_called_once_with(
|
||||||
self.ctx, 'stack_identifier', self.empty_temp.t,
|
self.ctx, 'stack_identifier', self.empty_temp.t,
|
||||||
child_env, {}, {'timeout_mins': self.timeout_mins})
|
child_env, {}, {'timeout_mins': self.timeout_mins})
|
||||||
|
|
||||||
|
|
||||||
|
class RaiseLocalException(StackResourceBaseTest):
|
||||||
|
|
||||||
|
def test_heat_exception(self):
|
||||||
|
local = exception.InvalidResourceType(message='test')
|
||||||
|
self.assertRaises(exception.InvalidResourceType,
|
||||||
|
self.parent_resource.raise_local_exception, local)
|
||||||
|
|
||||||
|
def test_messaging_timeout(self):
|
||||||
|
local = msg_exceptions.MessagingTimeout('took too long')
|
||||||
|
self.assertRaises(exception.ResourceFailure,
|
||||||
|
self.parent_resource.raise_local_exception, local)
|
||||||
|
|
||||||
|
def test_remote_heat_ex(self):
|
||||||
|
InvalidResourceType_Remote = exception.InvalidResourceType
|
||||||
|
local = InvalidResourceType_Remote(message='test')
|
||||||
|
self.assertRaises(exception.InvalidResourceType,
|
||||||
|
self.parent_resource.raise_local_exception, local)
|
||||||
|
|
Loading…
Reference in New Issue