利用python 编写 类似于 virsh 的虚拟机管理软件
第一步 请下载linux (本次演示利用 ubuntu 16.04 desktop 64位 下载链接 请自行百度)
第二步 虚拟机安装ubuntu 网络 记得选择 桥接 cpu 记得打开 虚拟化
第三步 进入 root 权限 更新 ubuntu 命令:apt-get update apt-get upgrade
第四步 安装三个包
第一个 qemu-kvm 命令 apt-get install qemu-kvm
第二个 libvirt-bin 命令 apt-get install libvirt-bin
第三个 python-libvirt 命令 apt-get install python-libvirt
第五步 编写 python 代码
基础的api 函数:
conn = libvirt.open("qemu:///system") # 打开系统的 qemu 获取conn 连接
dom = conn.createXML(xmlconfig) # 创建一个临时的虚拟机
dom = conn.defineXML(xmlconfig) # 创建一个永久的虚拟机
dom.create( ) # 启动一个永久虚拟机(临时虚拟机创建自动启动)
dom.destroy( ) # 关闭一个虚拟机
dom.undefine( ) # 销毁一个虚拟机
dom.suspend( ) # 虚拟机暂停
dom.resume( ) # 虚拟机恢复
api简单分析:
conn =libvirt.open("qemu:///system")
获取一个qemu的系统连接 创建虚拟机 需要conn 连接
dom = conn.createXML(xmlconfig)
创建一个临时的虚拟机 需要获取一个 xml的信息 根据xml信息来创建 虚拟机
如果创建成功 返回一个dom 的域(虚拟机)的对象
conn.defineXML(xmlconfig)
创建一个临时的虚拟机 需要获取一个 xml的信息 根据xml信息来创建 虚拟机
如果创建成功 返回一个dom 的域(虚拟机)的对象
dom.create( )
启动dom这个域 利用 virsh 工具 可以查看 虚拟机已经运行 list –all
dom.destroy( )
关闭dom这个域(虚拟机)
dom.undefine( )
销毁一个(域)虚拟机
dom.suspend( )
暂停一个(域)虚拟机
dom.resume( )
恢复暂停中的(域)虚拟机
代码分析:
import sys
import libvirt
导包(模块)
xmlfile =open("/home/tu/xml/demo.xml","r")
xmltext =xmlfile.read()
xmlconfig = xmltext
这是读取一个xml文件 把xml内容读取成一个字符串
def open_qemu():
conn =libvirt.open("qemu:///system")
if conn ==None:
print('打开qemu 错误qemu:///system')
exit(1)
returnconn
这是一个打开 系统qemu的函数 如果成功 返回一个conn 连接 下面函数需要使用
如果失败 打印错误 退出程序
defcreate_domain(conn):
domVar =conn.createXML(xmlconfig)
if domVar== None:
print('创建 临时虚拟机错误')
exit(1)
returndomVar
这是一个创建临时虚拟机的函数 如果创建成功 返回一个 虚拟机对象 domVar 下面程序 可以使用
如果失败 打印错误 退出程序
def create_domain_permanent(conn):
domVar =conn.defineXML(xmlconfig)
if domVar== None:
print('创建 永久虚拟机错误')
exit(1)
returndomVar
这是一个创建永久虚拟机的函数 如果创建成功 返回一个 虚拟机对象 domVar 下面程序 可以使用
如果失败 打印错误 退出程序
defstart_domain(domVar):
if domVar== None:
print('启动虚拟机失败')
exit(1)
else:
domVar.create()
从上面获取的虚拟机对象domVar 来启动虚拟机(只能启动永久虚拟机 临时虚拟机创建 就启动)
defstop_domain(domVar):
if domVar== None:
print('停止虚拟机失败')
exit(1)
else:
domVar.destroy()
从上面获取的虚拟机对象domVar 来停止虚拟机(只能停止正在运行虚拟机)
defdestory_domain(domVar):
if domVar== None:
print('销毁虚拟机失败')
exit(1)
else:
domVar.undefine()
从上面获取的虚拟机对象domVar 来销毁虚拟机
defsuspend_domain(domVar):
if domVar== None:
print('暂停虚拟机')
exit(1)
else:
domVar.suspend()
从上面获取的虚拟机对象domVar 来暂停虚拟机
defresume_domain(domVar):
if domVar== None:
print('恢复虚拟机')
exit(1)
else:
domVar.resume()
从上面获取的虚拟机对象domVar 来恢复虚拟机
注:上面的函数名 都可以自定义
fuction_dictionary ={"create_domain":"创建临时域",\
"create_domain_permanent":"创建永久域",\
"start_domain":"启动域",\
"stop_domain":"停止域",\
"destory_domain":"删除域",\
"suspend_domain":"暂停域",\
"resume_domain":"恢复域",\
"help":"帮助",\
"quit":"退出"}
defshow_fuction(fuction_dictionary):
for k,v infuction_dictionary.items():
print("%s\t\t\t%s"%(k,v))
输出帮助信息
这是一个字典 存的是函数的名字 和对应的 中文意思
你们可以直接利用print 来输出帮助信息
def main():
conn =open_qemu()
whileconn:
chose= raw_input("CMD>>>").strip()
ifchose == "help":
show_fuction(fuction_dictionary)
elifchose == "create_domain":
creat_domain(conn)
elifchose == "create_domain_permanent":
create_domain_permanent(conn)
elifchose == "start_domain":
start_domain(conn)
elifchose == "stop_domain":
stop_domain(conn)
elifchose == "destory_domain":
destory_domain(conn)
elifchose == "suspend_domain":
suspend_domain(conn)
elifchose == "resume_domain":
resume_domain(conn)
elifchose == "quit":
conn.close()
print("Bye")
sys.exit()
else:
print("错误的命令 请输入help 显示帮助")
主函数 接受用户输入的命令
执行相应的功能 顺序为 创建 启动 暂停 恢复 停止 销毁 (永久虚拟机)
创建 暂停 恢复 停止 销毁 (临时虚拟机)
Xml文件分析 ' # ' 后面为注释