mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
ee3cfa4184
Use configure --enable-python_bindings to generate them. Note that the Makefiles do not yet control the owner or permissions of the two new files on installation.
126 lines
3.3 KiB
Python
126 lines
3.3 KiB
Python
#
|
|
# 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 <http://www.gnu.org/licenses/>.
|
|
#
|
|
#-----------------------------
|
|
# 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()
|