# # Copyright (C) 2012 Red Hat, Inc. All rights reserved. # # This file is part of LVM2. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 2.1 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . # #----------------------------- # Python example code: #----------------------------- import lvm # Note: This example will create a logical unit, tag it and # delete it, don't run this on production box! #Dump information about PV def print_pv(pv): print 'PV name: ', pv.getName(), ' ID: ', pv.getUuid(), 'Size: ', pv.getSize() #Dump some information about a specific volume group def print_vg(h, vg_name): #Open read only vg = h.vgOpen(vg_name, 'r') print 'Volume group:', vg_name, 'Size: ', vg.getSize() #Retrieve a list of Physical volumes for this volume group pv_list = vg.listPVs() #Print out the physical volumes for p in pv_list: print_pv(p) #Get a list of logical volumes in this volume group lv_list = vg.listLVs() if len(lv_list): for l in lv_list: print 'LV name: ', l.getName(), ' ID: ', l.getUuid() else: print 'No logical volumes present!' vg.close() #Returns the name of a vg with space available def find_vg_with_free_space(h): free_space = 0 rc = None vg_names = l.listVgNames() for v in vg_names: vg = h.vgOpen(v, 'r') c_free = vg.getFreeSize() if c_free > free_space: free_space = c_free rc = v vg.close() return rc #Walk through the volume groups and fine one with space in which we can #create a new logical volume def create_delete_logical_volume(h): vg_name = find_vg_with_free_space(h) print 'Using volume group ', vg_name, ' for example' if vg_name: vg = h.vgOpen(vg_name, 'w') lv = vg.createLvLinear('python_lvm_ok_to_delete', vg.getFreeSize()) if lv: print 'New lv, id= ', lv.getUuid() #Create a tag lv.addTag('Demo_tag') #Get the tags tags = lv.getTags() for t in tags: #Remove tag lv.removeTag(t) #Try to rename lv.rename("python_lvm_ok_to_be_removed_shortly") print 'LV name= ', lv.getName() lv.deactivate() lv.remove() vg.close() else: print 'No free space available to create demo lv!' if __name__ == '__main__': #Create a new LVM instance l = lvm.Liblvm() #What version print 'lvm version=', l.getVersion() #Get a list of volume group names vg_names = l.listVgNames() #For each volume group display some information about each of them for vg_i in vg_names: print_vg(l, vg_i) #Demo creating a logical volume create_delete_logical_volume(l) #Close l.close()