def run_audit(self, volume, lock=None, callback=None): spawn(lock, self.audit, volume, callback=callback, skip_fork=self.skip_fork, interruptible=True)
def delete(self, volume_id, callback=None, lock=None): volume = self.get(volume_id) # If origin exists, this volume is a snapshot if volume['origin']: # scrub and remove snapshots synchronously self.remove_lvm_snapshot(volume) return # This is a normal volume delete if 'zero' not in volume['id']: # Does this volume have a snapshot? if self._get_snapshot(volume['id']): raise ServiceUnavailable("Refusing to delete volume '%s' " "with an active backup" % volume['id']) try: self.update_tags(volume, {'zero': True}) except NotFound: pass volume = self.get(volume_id) spawn(lock, self.remove_lvm_volume, volume, callback=callback, skip_fork=self.skip_fork)
def delete(self, volume, backup_id, callback=None, lock=None): spawn(lock, self.prune, volume, backup_id, callback=callback, skip_fork=self.skip_fork)
def cleanup_tmp_vol(self, tmp_vol, convert_dir, scrub_callback): if not tmp_vol: raise ValueError("No tmp_vol") if not os.path.exists(tmp_vol['path']): raise ValueError("tmp_vol doesn't exist") if convert_dir: execute('umount', convert_dir) rmtree(convert_dir) spawn(NullResource(), self.remove_lvm_volume, tmp_vol, callback=scrub_callback, skip_fork=self.skip_fork)
def create(self, snapshot, backup_id, callback=None, lock=None, cinder=None, error_callback=None): spawn( lock, self.save, snapshot, backup_id, cinder, callback=callback, error_callback=error_callback, skip_fork=self.skip_fork, )
def create(self, snapshot, backup_id, callback=None, lock=None, cinder=None, error_callback=None): spawn(lock, self.save, snapshot, backup_id, cinder, callback=callback, error_callback=error_callback, skip_fork=self.skip_fork)
def delete(self, volume_id, callback=None, lock=None): volume = self.get(volume_id) # If origin exists, this volume is a snapshot if volume['origin']: # scrub and remove snapshots synchronously self.remove_lvm_snapshot(volume) return # This is a normal volume delete if 'zero' not in volume['id']: # Does this volume have a snapshot? if self._get_snapshot(volume['id']): raise ServiceUnavailable( "Refusing to delete volume '%s' " "with an active backup" % volume['id']) try: self.update_tags(volume, {'zero': True}) except NotFound: pass volume = self.get(volume_id) spawn(lock, self.remove_lvm_volume, volume, callback=callback, skip_fork=self.skip_fork)
def create_clone(self, volume_id, clone_id, iqn, iscsi_ip, iscsi_port, callback=None, lock=None, cinder=None): volume = self.get(volume_id) size = volume['size'] / 1024 / 1024 / 1024 logger.info("Cloning source '%s' to volume '%s'" % (volume_id, clone_id)) snapshot_name = uuid.uuid4() snapshot = self.create_snapshot(volume_id, snapshot_name, clone_id=clone_id, type_='clone') logger.info("Snapshot to clone id: '%s'" % snapshot['id']) try: new_volume = ISCSIDevice(iqn, iscsi_ip, iscsi_port) new_volume.connect() except (ISCSILoginFailed, ISCSINotConnected): msg = "Unable to open iscsi connection to %s:%s - %s" % \ (iscsi_ip, iscsi_port, iqn) logger.error(msg) self.delete(snapshot['id']) raise ServiceUnavailable(msg) spawn(lock, self._copy_clone, snapshot, clone_id, size, new_volume, cinder, callback=callback, skip_fork=self.skip_fork)
raise InvalidImage("Error fetching image: %s" % image_id) # Create a tag to apply to the lvm volume tag = encode_tag(backup_source_volume_id=backup_source_volume_id, backup_id=backup_id) try: self._do_create(volume_id, size_str, tag, backup_source_volume_id) except Exception, e: # If we ran out of space due to the tmp_vol logger.error('Failed to create volume: %s' % e) # Update cinder immediately. if callback: callback() if tmp_vol: spawn(NullResource(), self.remove_lvm_volume, tmp_vol, callback=scrub_callback, skip_fork=self.skip_fork) raise def log_duration(): duration = time() - op_start parts = ['STAT: Create Volume'] if volume_id: parts.append('Volume_ID: %s' % (volume_id,)) if backup_id: parts.append('Backup_ID: %s' % (backup_id,)) if backup_source_volume_id: parts.append('Backup_Source_Volume_ID: %s' % (backup_id,)) if image_id: parts.append('Image_ID: %s' % (image_id,)) parts.append('Size: %s' % size)
# Create a tag to apply to the lvm volume tag = encode_tag(backup_source_volume_id=backup_source_volume_id, backup_id=backup_id) try: self._do_create(volume_id, size_str, tag, backup_source_volume_id) except Exception, e: # If we ran out of space due to the tmp_vol logger.error('Failed to create volume: %s' % e) # Update cinder immediately. if callback: callback() if tmp_vol: spawn(NullResource(), self.remove_lvm_volume, tmp_vol, callback=scrub_callback, skip_fork=self.skip_fork) raise def log_duration(): duration = time() - op_start parts = ['STAT: Create Volume'] if volume_id: parts.append('Volume_ID: %s' % (volume_id, )) if backup_id: parts.append('Backup_ID: %s' % (backup_id, )) if backup_source_volume_id: parts.append('Backup_Source_Volume_ID: %s' % (backup_id, )) if image_id: