Fix resource_signal with convergence

When doing a stack delete, we update it with an
empty template. Therefore checking for the resource
in the template would fail in resource_signal.

Change-Id: Id8c2226e78ed74138ce9065c4435aa5778726656
Closes-Bug: #1635610
This commit is contained in:
rabi 2016-10-21 16:51:10 +05:30
parent 90372215e5
commit 26aa33eb66
2 changed files with 17 additions and 4 deletions

View File

@ -1773,11 +1773,11 @@ class EngineService(service.Service):
return stack.access_allowed(access_key, resource_name)
def _verify_stack_resource(self, stack, resource_name):
if resource_name not in stack:
resource = stack.resource_get(resource_name)
if not resource:
raise exception.ResourceNotFound(resource_name=resource_name,
stack_name=stack.name)
resource = stack[resource_name]
if resource.id is None:
raise exception.ResourceNotAvailable(resource_name=resource_name)
@ -1834,7 +1834,7 @@ class EngineService(service.Service):
stack = parser.Stack.load(cnxt, stack=s, use_stored_context=True)
self._verify_stack_resource(stack, resource_name)
rsrc = stack[resource_name]
rsrc = stack.resource_get(resource_name)
if callable(rsrc.signal):
rsrc._signal_check_action()

View File

@ -332,7 +332,6 @@ class StackResourcesServiceTest(common.HeatTestCase):
stack_name = 'signal_reception_async'
self.stack = self._stack_create(stack_name)
test_data = {'food': 'yum'}
self.eng.resource_signal(self.ctx,
dict(self.stack.identifier()),
'WebServerScaleDownPolicy',
@ -356,6 +355,20 @@ class StackResourcesServiceTest(common.HeatTestCase):
sync_call=True)
mock_signal.assert_called_once_with(mock.ANY, False)
def test_signal_reception_get_resource_none(self):
stack_name = 'signal_reception_no_resource'
self.stack = self._stack_create(stack_name)
test_data = {'food': 'yum'}
self.patchobject(stack.Stack, 'resource_get',
return_value=None)
ex = self.assertRaises(dispatcher.ExpectedException,
self.eng.resource_signal, self.ctx,
dict(self.stack.identifier()),
'WebServerScaleDownPolicy',
test_data)
self.assertEqual(exception.ResourceNotFound, ex.exc_info[0])
def test_signal_reception_no_resource(self):
stack_name = 'signal_reception_no_resource'
self.stack = self._stack_create(stack_name)