def _clean_up(): #Clear out the testing PVs, but only if they contain stuff #this unit test created for vg_n in TestLvm._vg_names(): TestLvm._remove_vg(vg_n) for d in TestLvm._get_pv_device_names(): lvm.pvRemove(d) lvm.pvCreate(d)
def add_devices_to_localstorage(devices): """Initializes KD volume group: Creates vg if it not exists, activates it if not active. Adds devices to VG. """ all_names = lvm.listVgNames() if KD_VG_NAME not in all_names: vg = lvm.vgCreate(KD_VG_NAME) else: vg = lvm.vgOpen(KD_VG_NAME, 'w') try: pvs = {item.getName(): item for item in vg.listPVs()} lv = None for dev in devices: if dev in pvs: continue lvm.pvCreate(dev) vg.extend(dev) new_pv = [ item for item in vg.listPVs() if item.getName() == dev ][0] pvs[dev] = new_pv for item in vg.listLVs(): if item.getName() == KD_LV_NAME: lv = item break #dev = os.path.join('/dev', KD_VG_NAME, KD_LV_NAME) if not os.path.isdir(LOCAL_STORAGE_MOUNT_POINT): os.makedirs(LOCAL_STORAGE_MOUNT_POINT) if not lv: lv = vg.createLvLinear(KD_LV_NAME, vg.getFreeSize()) dev = lv.getProperty('lv_path')[0] ok, message = make_fs(dev) if not ok: return ERROR, {'message': message} else: dev = lv.getProperty('lv_path')[0] if vg.getFreeSize(): lv.resize(lv.getSize() + vg.getFreeSize()) if not is_mounted(LOCAL_STORAGE_MOUNT_POINT): ok, message = mount(dev, LOCAL_STORAGE_MOUNT_POINT) if not ok: return ERROR, {'message': message} extend_fs_size(LOCAL_STORAGE_MOUNT_POINT) pv_info = { key: {'size': item.getDevSize()} for key, item in pvs.iteritems() } finally: vg.close() make_permanent_mount(dev, LOCAL_STORAGE_MOUNT_POINT) return OK, { 'lsUsage': get_fs_usage(LOCAL_STORAGE_MOUNT_POINT), 'PV': pv_info }
def thinpool_LV(): device = '/dev/sdd' vg_name = 'TEST_VG' lv_pool = 'TEST_POOL' lv_thin = 'TEST_THIN' lvm.pvCreate(device) vg = lvm.vgCreate(vg_name) vg.extend('/dev/sdd') pv_list = vg.listPVs() for pv in pv_list: print 'PV name: ', pv.getName(), ' ID: ', pv.getUuid( ), 'Size: ', pv.getSize() lv = vg.createLvThinpool(lv_pool, 1024 * 1024 * 1024) lv2 = vg.createLvThin(lv.getName(), lv_thin, 1024 * 1024 * 1024 * 1024) print lv2.deactivate() print lv2.getAttr() print lv.deactivate() print lv.getAttr() raw_input('acticate?') print lv.activate() print lv.getAttr() print lv2.activate() print lv2.getAttr() vg.close() raw_input('??') #vg.reduce('/dev/sdd') vg = lvm.vgOpen(vg_name, 'w') lv = vg.lvFromName(lv_thin) lv.remove() lv = vg.lvFromName(lv_pool) lv.remove() vg.remove() lvm.configReload() lvm.pvRemove(device) return True
def test_pv_empty_listing(self): #We had a bug where we would seg. fault if we had no PVs. l('testPVemptylisting entry') device_names = TestLvm._get_pv_device_names() for d in device_names: l("Removing %s" % d) lvm.pvRemove(d) count = 0 with lvm.listPvs() as pvs: for p in pvs: count += 1 l('pv= %s' % p.getName()) self.assertTrue(count == 0) for d in device_names: lvm.pvCreate(d)
def test_pv_life_cycle(self): """ Test removing and re-creating a PV """ target_name = None with AllowedPVS() as pvs: pv = pvs[0] target_name = pv.getName() lvm.pvRemove(target_name) with AllowedPVS() as pvs: for p in pvs: self.assertTrue(p.getName() != target_name) lvm.pvCreate(target_name, 0) with AllowedPVS() as pvs: found = False for p in pvs: if p.getName() == target_name: found = True self.assertTrue(found)
def test_pv_create(self): size = [0, 1024 * 1024 * 4] pvmeta_copies = [0, 1, 2] pvmeta_size = [0, 255, 512, 1024] data_alignment = [0, 2048, 4096] zero = [0, 1] device_names = TestLvm._get_pv_device_names() for d in device_names: lvm.pvRemove(d) d = device_names[0] #Test some error cases self.assertRaises(TypeError, lvm.pvCreate, None) self.assertRaises(lvm.LibLVMError, lvm.pvCreate, '') self.assertRaises(lvm.LibLVMError, lvm.pvCreate, d, 4) self.assertRaises(lvm.LibLVMError, lvm.pvCreate, d, 0, 4) self.assertRaises(lvm.LibLVMError, lvm.pvCreate, d, 0, 0, 0, 2 ** 34) self.assertRaises( lvm.LibLVMError, lvm.pvCreate, d, 0, 0, 0, 4096, 2 ** 34) #Try a number of combinations and permutations for s in size: for copies in pvmeta_copies: for pv_size in pvmeta_size: for align in data_alignment: for z in zero: lvm.pvCreate(d, s, copies, pv_size, align, align, z) lvm.pvRemove(d) #Restore for d in device_names: lvm.pvCreate(d)
def testPVlifecycle(self): """ Test removing and re-creating a PV """ target = None with lvm.listPvs() as pvs: pv = pvs[TestLvm.RESIZE_PV] target = pv.getName() lvm.pvRemove(target) with lvm.listPvs() as pvs: for p in pvs: self.assertTrue(p.getName() != target) lvm.pvCreate(target, 0) with lvm.listPvs() as pvs: found = False for p in pvs: if p.getName() == target: found = True self.assertTrue(found)
def normal_LV(): lvm.pvCreate(device) vg = lvm.vgCreate(vg_name) vg.extend('/dev/sdd') pv_list = vg.listPVs() for pv in pv_list: print 'PV name: ', pv.getName(), ' ID: ', pv.getUuid( ), 'Size: ', pv.getSize() lv = vg.createLvLinear(lv_name, 1024 * 1024 * 1024) print lv.deactivate() print lv.getAttr() raw_input('acticate?') print lv.activate() print lv.getAttr() vg.close() raw_input('??') #vg.reduce('/dev/sdd') vg = lvm.vgOpen(vg_name, 'w') lv = vg.lvFromName(lv_name) lv.remove() vg.remove() lvm.configReload() lvm.pvRemove(device) return True
def test_pv_create(self): size = [0, 1024 * 1024 * 8] pvmeta_copies = [0, 1, 2] pvmeta_size = [0, 255, 512, 1024] data_alignment = [0, 2048, 4096] zero = [0, 1] device_names = TestLvm._get_pv_device_names() for d in device_names: lvm.pvRemove(d) d = device_names[0] #Test some error cases self.assertRaises(TypeError, lvm.pvCreate, None) self.assertRaises(lvm.LibLVMError, lvm.pvCreate, '') self.assertRaises(lvm.LibLVMError, lvm.pvCreate, d, 4) self.assertRaises(lvm.LibLVMError, lvm.pvCreate, d, 0, 4) self.assertRaises(lvm.LibLVMError, lvm.pvCreate, d, 0, 0, 0, 2 ** 34) self.assertRaises( lvm.LibLVMError, lvm.pvCreate, d, 0, 0, 0, 4096, 2 ** 34) #Try a number of combinations and permutations for s in size: for copies in pvmeta_copies: for pv_size in pvmeta_size: for align in data_alignment: for z in zero: lvm.pvCreate(d, s, copies, pv_size, align, align, z) lvm.pvRemove(d) #Restore for d in device_names: lvm.pvCreate(d)
def test_vg_reduce(self): # Test the case where we try to reduce a vg where the last PV has # no metadata copies. In this case the reduce should fail. vg_name = TestLvm.VG_P + 'reduce_test' device_names = TestLvm._get_pv_device_names() for d in device_names: lvm.pvRemove(d) lvm.pvCreate(device_names[0], 0, 0) # Size all, pvmetadatacopies 0 lvm.pvCreate(device_names[1]) lvm.pvCreate(device_names[2]) lvm.pvCreate(device_names[3]) vg = lvm.vgCreate(vg_name) vg.extend(device_names[3]) vg.extend(device_names[2]) vg.extend(device_names[1]) vg.extend(device_names[0]) vg.close() vg = None vg = lvm.vgOpen(vg_name, 'w') vg.reduce(device_names[3]) vg.reduce(device_names[2]) self.assertRaises(lvm.LibLVMError, vg.reduce, device_names[1]) vg.close() vg = None vg = lvm.vgOpen(vg_name, 'w') vg.remove() vg.close()
def pv_create(device): return lvm.pvCreate(device)
def pv_create(req, path): lvm.pvCreate(path) return [{}]