“数据未来·携手跨越” 云祺产品新版本发布暨全国巡展—武汉站 4月26日 星期五 14:00 云祺视频号准时直播
vinchin linked
delta 扫码预约直播,观看精彩内容!
closed
logo
关于我们

技术分享

技术分享 利用python 编写 简单 虚拟机管理

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

2020-10-22

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

         <domaintype='kvm'>

                   <name>demo</name>#虚拟机名字

                   <memory>1048576</memory>#内存大小换算成MB需要除以1024

                   <vcpu>1</vcpu># cpu个数

                   <os>#系统类型不用管

                            <typearch='x86_64' machine='pc'>hvm</type>

                            <bootdev='hd'/>

                   </os>

                   <features>

                            <acpi/>

                            <apic/>

                            <pae/>

                   </features>

                   <clockoffset='localtime'/>

                   <on_poweroff>destroy</on_poweroff>

                   <on_reboot>restart</on_reboot>

                   <on_crash>destroy</on_crash>

                   <devices>

                            <emulator>/usr/bin/kvm-spice</emulator>

                            <disktype='file' device='disk'>

                                     <sourcefile='/home/tu/img/ubuntu.img'/> #镜像路径修改成自己的

                                     <drivername='qemu' type='raw'/>

                                     <targetdev='hda' bus='ide'/>

                            </disk>

                            <inputtype='mouse' bus='ps2'/>

                            <graphicstype='vnc' port='-1' autoport='yes' keymap='en-us'/>

                   </devices>

         </domain>


                                   
云祺备份软件,云祺容灾备份系统,虚拟机备份,数据库备份,文件备份,实时备份,勒索软件,美国,图书馆
  • 标签:
  • 行业资讯

您可能感兴趣的新闻 换一批

现在下载,可享30天免费试用

立即下载