利用python 编写 简单 虚拟机管理

利用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文件分析 ' # ' 后面为注释

        

                   demo# 虚拟机名字

                   1048576# 内存大小 换算成MB需要除以1024

                   1# cpu个数

                   # 系统类型 不用管

                            hvm

                           

                  

                  

                           

                           

                           

                  

                  

                   destroy

                   restart

                   destroy

                  

                            /usr/bin/kvm-spice

                           

                                     # 镜像路径 修改成自己的

                                    

                                    

                           

                           

                           

                  

        


你可能感兴趣的:(虚拟机管理)