diff --git a/heat/engine/resources/volume.py b/heat/engine/resources/volume.py index efaeab489b..b199fcb3ff 100644 --- a/heat/engine/resources/volume.py +++ b/heat/engine/resources/volume.py @@ -468,7 +468,12 @@ class VolumeAttachment(resource.Resource): def handle_delete(self): server_id = self.properties[self.INSTANCE_ID] detach_task = VolumeDetachTask(self.stack, server_id, self.resource_id) - scheduler.TaskRunner(detach_task)() + detach_runner = scheduler.TaskRunner(detach_task) + detach_runner.start() + return detach_runner + + def check_delete_complete(self, detach_runner): + return detach_runner.step() class CinderVolume(Volume): diff --git a/heat/tests/test_volume.py b/heat/tests/test_volume.py index d296d3cfdc..1067ee031c 100644 --- a/heat/tests/test_volume.py +++ b/heat/tests/test_volume.py @@ -265,10 +265,13 @@ class VolumeTest(BaseVolumeTest): # delete script self.m.StubOutWithMock(instance.Instance, 'handle_delete') self.m.StubOutWithMock(vol.VolumeAttachment, 'handle_delete') + self.m.StubOutWithMock(vol.VolumeAttachment, 'check_delete_complete') instance.Instance.handle_delete().AndReturn(None) self.cinder_fc.volumes.get('vol-123').AndRaise( cinder_exp.NotFound('Not found')) - vol.VolumeAttachment.handle_delete().AndReturn(None) + cookie = object() + vol.VolumeAttachment.handle_delete().AndReturn(cookie) + vol.VolumeAttachment.check_delete_complete(cookie).AndReturn(True) self.m.ReplayAll() stack = utils.parse_stack(self.t, stack_name=stack_name)