if backup.status != 'available':
raise exception.Error(backup.status)
+ @scheduler.wrappertask
def _delete(self, backup=False):
if self.resource_id is not None:
try:
vol = self.cinder().volumes.get(self.resource_id)
if backup:
- scheduler.TaskRunner(self._backup)()
+ yield self._backup()
vol.get()
if vol.status == 'in-use':
logger.warn('cant delete volume when in-use')
raise exception.Error('Volume in use')
- self.cinder().volumes.delete(self.resource_id)
+ vol.delete()
+ while True:
+ yield
+ vol.get()
except clients.cinderclient.exceptions.NotFound:
- pass
+ self.resource_id = None
if volume_backups is not None:
def handle_snapshot_delete(self, state):
backup = state not in ((self.CREATE, self.FAILED),
(self.UPDATE, self.FAILED))
- return self._delete(backup=backup)
+
+ delete_task = scheduler.TaskRunner(self._delete, backup=backup)
+ delete_task.start()
+ return delete_task
def handle_delete(self):
- return self._delete()
+ delete_task = scheduler.TaskRunner(self._delete)
+ delete_task.start()
+ return delete_task
+
+ def check_delete_complete(self, delete_task):
+ return delete_task.step()
class VolumeAttachTask(object):
display_description=vol_name,
display_name=vol_name).AndReturn(fv)
+ def _stubout_delete_volume(self, fv):
+ self.m.StubOutWithMock(fv, 'delete')
+ fv.delete().AndReturn(True)
+ self.m.StubOutWithMock(fv, 'get')
+ fv.get().AndReturn(None)
+ fv.get().AndRaise(
+ clients.cinderclient.exceptions.NotFound('Not found'))
+ self.m.ReplayAll()
+
def _mock_create_server_volume_script(self, fva):
clients.OpenStackClients.nova().MultipleTimes().AndReturn(self.fc)
self.fc.volumes.create_server_volume(
self.cinder_fc.volumes.get('vol-123').AndReturn(fv)
self.cinder_fc.volumes.get('vol-123').AndReturn(fv)
- self.cinder_fc.volumes.delete('vol-123').AndReturn(None)
-
- self.cinder_fc.volumes.get('vol-123').AndRaise(
- clients.cinderclient.exceptions.NotFound('Not found'))
self.m.ReplayAll()
t = template_format.parse(volume_template)
fv.status = 'in-use'
self.assertRaises(exception.ResourceFailure,
scheduler.TaskRunner(rsrc.destroy))
+
+ self._stubout_delete_volume(fv)
fv.status = 'available'
scheduler.TaskRunner(rsrc.destroy)()
self.m.StubOutWithMock(self.cinder_fc.backups, 'create')
self.cinder_fc.backups.create('vol-123').AndReturn(fb)
self.cinder_fc.volumes.get('vol-123').AndReturn(fv)
- self.cinder_fc.volumes.delete('vol-123').AndReturn(None)
+
self.m.ReplayAll()
t = template_format.parse(volume_template)
rsrc = self.create_volume(t, stack, 'DataVolume')
+ self._stubout_delete_volume(fv)
scheduler.TaskRunner(rsrc.destroy)()
self.m.VerifyAll()
self._mock_create_volume(fv, stack_name)
self.cinder_fc.volumes.get('vol-123').AndReturn(fv)
- self.cinder_fc.volumes.delete('vol-123').AndReturn(None)
self.m.ReplayAll()
create = scheduler.TaskRunner(rsrc.create)
self.assertRaises(exception.ResourceFailure, create)
+ self._stubout_delete_volume(fv)
scheduler.TaskRunner(rsrc.destroy)()
self.m.VerifyAll()
def update(self, **kw):
pass
+ def delete(self):
+ pass
+
class FakeLatencyVolume(object):
status = 'attaching'