def destroy_volume(self, id): volume = self.describe_volume(id) attached_to = volume.get('attached_to') if attached_to: raise StorageError('Can not destroy volume: volume attached to instance %s' % attached_to) lvm2.lvremove(volume['host_path'])
def create_snapshot(self, volume_id): assert volume_id in self.volumes, 'Volume "%s" not found' % volume_id volume = self.volumes[volume_id] snapshot_id = str(uuid.uuid4())[:7] if not os.path.isdir(snapshot_dir): os.makedirs(snapshot_dir) snap_path = self._get_snapshot_path(snapshot_id) lvm2.lvcreate(os.path.join('/dev', vg_name, volume['id']), snapshot=True, name=snapshot_id, size=snap_size) lv_info = None try: lv_info = lvm2.lvs(lvm2.lvpath(vg_name, snapshot_id)).values()[0] system('dd if=%s | cp --sparse=always /dev/stdin %s' % (lv_info.lv_path, snap_path), shell=True) finally: if lv_info: lvm2.lvremove(lv_info.lv_path) else: lvm2.lvremove(os.path.join('/dev', vg_name, snapshot_id)) snapshot = dict(id=snapshot_id, size=volume['size']) self.snapshots[snapshot_id] = snapshot return snapshot
def lvm_snapshot(self, name=None, size=None): long_kwds = { 'name': name or '%ssnap' % self.name, 'snapshot': '%s/%s' % (self.vg, self.name) } if size: size=str(size) if '%' in size: long_kwds['extents'] = size else: long_kwds['size'] = size else: long_kwds['extents'] = '1%ORIGIN' lvol = '%s/%s' % (self.vg, long_kwds['name']) if lvol in lvm2.lvs(): lvm2.lvremove(lvol) lvm2.lvcreate(**long_kwds) lv_info = lvm2.lvs(lvol).values()[0] return storage2.snapshot( type='lvm_native', name=lv_info.lv_name, vg=lv_info.vg_name, device=lv_info.lv_path)
def destroy_volume(self, id): volume = self.describe_volume(id) attached_to = volume.get('attached_to') if attached_to: raise StorageError( 'Can not destroy volume: volume attached to instance %s' % attached_to) lvm2.lvremove(volume['host_path'])
def _destroy(self, force, **kwds): try: lvm2.lvremove(self.device) except lvm2.NotFound: pass if force: try: vg_info = lvm2.vgs(self.vg).values()[0] except lvm2.NotFound: pass else: if not (int(vg_info.snap_count) and not int(vg_info.lv_count)): pv_disks = [device for device, pv_info in lvm2.pvs().items() if pv_info.vg_name == self.vg] lvm2.vgremove(self.vg) for device in pv_disks: lvm2.pvremove(device) for pv in self.pvs: pv.destroy(force=True)
def _destroy(self, force, **kwds): try: lvm2.lvremove(self.device) except lvm2.NotFound: pass if force: try: vg_info = lvm2.vgs(self.vg).values()[0] except lvm2.NotFound: pass else: if not (int(vg_info.snap_count) and not int(vg_info.lv_count)): pv_disks = [ device for device, pv_info in lvm2.pvs().items() if pv_info.vg_name == self.vg ] lvm2.vgremove(self.vg) for device in pv_disks: lvm2.pvremove(device) for pv in self.pvs: pv.destroy(force=True)
def lvm_snapshot(self, name=None, size=None): long_kwds = { 'name': name or '%ssnap' % self.name, 'snapshot': '%s/%s' % (self.vg, self.name) } if size: size = str(size) if '%' in size: long_kwds['extents'] = size else: long_kwds['size'] = size else: long_kwds['extents'] = '1%ORIGIN' lvol = '%s/%s' % (self.vg, long_kwds['name']) if lvol in lvm2.lvs(): lvm2.lvremove(lvol) lvm2.lvcreate(**long_kwds) lv_info = lvm2.lvs(lvol).values()[0] return storage2.snapshot(type='lvm_native', name=lv_info.lv_name, vg=lv_info.vg_name, device=lv_info.lv_path)
def _destroy(self): lvm2.lvremove(self.device)