使用python cgi创建逻辑卷

时间:2016-05-07 19:41:59

标签: python cgi

我正在创建python CGI脚本,它接受来自客户端的lv大小,然后使用nfs创建和装载逻辑卷。 这是我的代码:

#!/usr/bin/python
print "Content-type:text/html"
print ""
import cgi,commands,os,socket,time,getpass
form = cgi.FieldStorage()
st=form.getvalue("st")
mount=form.getvalue('mount')
backup=form.getvalue('backup')
ip=os.environ["REMOTE_ADDR"]
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(("192.168.1.100",4444))
a,b=s.recvfrom(100)
print a
s.sendto(mount,b)
if(backup=='Yes'):
    os.system("lvcreate --size "+st+" --thin volume/pooL1")
    os.system("lvcreate -V "+st+" --name "+ip+" --thin volume/pooL1")
    os.system("mkfs.ext4 /dev/volume/"+ip)  
    os.system("mkdir /mnt/"+ip) 
    os.system("mount  /dev/volume/"+ip+"  /mnt/"+ip+"" )
    os.system("lvcreate -s --name snap"+ip+" /dev/volume/"+ip)
    os.system("mkdir /media/snap"+ip)
    os.system("mount /dev/volume/snap"+ip+"  /media/snap"+ip+"")
else:
    os.system("lvcreate --size "+st+" --thin volume/pooL1")
    os.system("lvcreate -V "+st+" --name "+ip+" --thin volume/pooL1")
    os.system("mkfs.ext4 /dev/volume/"+ip)
    os.system("mkdir /mnt/"+ip) 
    os.system("mount /dev/volume/"+ip+" /mnt/"+ip+"/" )
f=open('/etc/fstab','a+')
f.write("/mnt/"+ip+"  /dev/volume/"+ip+"  ext4  defaults 0  0")
f.close()
f=open('/etc/exports','a+')
f.write("/mnt/"+ip+"    "+ip+ "(rw,sync,no_root_squash) \n")
f.close()
os.system("exportfs -a")
s.sendto("now you can use your storage",b)
s.close()

st是存储大小。 我已经授予apache创建逻辑卷的权限。问题是lv没有挂载。即使在服务器上创建lv,客户端也会收到内部服务器错误。

1 个答案:

答案 0 :(得分:2)

如果您使用的是rhel版本7.2,则需要在os.system('sudo ...')之类的每个命令之前编写sudo。

对于工作sudo用户,您必须配置/etc/sudoers文件并在任何行添加额外的行#apache ALL=(ALL) NOPASSWD:ALL