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)
|
||||
if full_message.find('\n') > -1 and is_remote:
|
||||
message, msg_trace = full_message.split('\n', 1)
|
||||
elif isinstance(ex, exception.HeatException):
|
||||
message = ex.message
|
||||
else:
|
||||
message = full_message
|
||||
|
||||
|
@ -307,11 +309,12 @@ class StackResource(resource.Resource):
|
|||
# finish
|
||||
return
|
||||
|
||||
if isinstance(ex, exception.HeatException):
|
||||
message = ex.message
|
||||
if hasattr(exception, ex_type):
|
||||
local_ex = copy.copy(getattr(exception, ex_type))
|
||||
local_ex.msg_fmt = "%(message)s"
|
||||
raise local_ex(message=message)
|
||||
else:
|
||||
raise exception.ResourceFailure(ex, self, 'remote')
|
||||
|
||||
def check_create_complete(self, cookie=None):
|
||||
return self._check_status_complete(resource.Resource.CREATE)
|
||||
|
|
|
@ -16,6 +16,7 @@ import uuid
|
|||
|
||||
import mock
|
||||
from oslo_config import cfg
|
||||
from oslo_messaging import exceptions as msg_exceptions
|
||||
import six
|
||||
|
||||
from heat.common import exception
|
||||
|
@ -799,3 +800,22 @@ class WithTemplateTest(StackResourceBaseTest):
|
|||
rpcc.return_value.update_stack.assert_called_once_with(
|
||||
self.ctx, 'stack_identifier', self.empty_temp.t,
|
||||
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