python可视化管理kvm虚拟机(使用libvirt、qemu连接虚拟机)

这篇具有很好参考价值的文章主要介绍了python可视化管理kvm虚拟机(使用libvirt、qemu连接虚拟机)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简述

对于云计算的实践,在虚拟机上面布置kvm虚拟机后使用python调用libvirt库进行远程可视化管理,实现输出虚拟机信息、新建虚拟机、删除虚拟机等功能,并在虚拟机集群上面运行mpi代码。
用pycharm专业版连接kvm的步骤见本文章。

代码如下:

#encoding=utf-8

import libvirt
import tkinter as tk
import time
import os
import subprocess


def list_connection():#主机信息
    text=entryName1.get()
    print("---------主机信息---------")
    if (text=='master1'):
        conn=conn0
    if(text=='master0'):
        conn=conn1
    nodeinfo = conn.getInfo()  # 获取虚拟化主机信息
    print('模型: ' + str(nodeinfo[0]))  # cpu模型
    print('内存大小: ' + str(nodeinfo[1]) + 'MB')  # 内存
    print('CPU数量: ' + str(nodeinfo[2]))  # cpu数量
    print('虚拟类型: ' + conn.getType())  # 虚拟化类型
    uri = conn.getURI()  # 目前链接的uri
    print('连接URI: : ' + uri)
    mem = conn.getFreeMemory()
    print("空闲内存: " + str(mem) + " bytes.")
    print("-------------------------")



def show_machine():#显示虚拟机状态
#开启的域
    text=entryName1.get()
    vms_dict={}
    if(text=="master1"):
        conn=conn0
    if(text=="master0"):
        conn=conn1
    domain_list = conn.listDomainsID()
    for vm in domain_list:
        vms_dict[str(vm)]=conn.lookupByID(vm).name()
    print("""
处于开启状态的虚拟机
----------------
ID	Name
----------------""")
    if vms_dict:
        for id_part,name_part in vms_dict.items():
            print("{}	{}".format(id_part,name_part))
        #lableInit.config(text="开启状态:".format(vms_dict))
    else:
        print("None")
    print("----------------")

#关闭的域
    global vmd_list
    vmd_list=[]
    for i in conn.listDefinedDomains():
        vmd_list.append(i)
    print("""
处于关闭状态的虚拟机
----------------
Name
----------------""")
    if vmd_list:
        for name_part in vmd_list:
            print("{}".format(name_part))

    else:
        print("None")
    print("----------------")
    #lableInit.config(text="虚拟机信息已在终端显示")

def show_information():
    text = entryName1.get()

    if (text == 'master1'):
        conn = conn0
    if (text == 'master0'):
        conn = conn1

    for id in conn.listDomainsID():
        domain = conn.lookupByID(id)
        nodeinfo=domain.info()
        print('模型: ' + str(nodeinfo[0]))  # cpu模型
        print('内存大小: ' + str(nodeinfo[1]) + 'MB')  # 内存
        print('CPU数量: ' + str(nodeinfo[3]))  # cpu数量
        t1 = time.time()

        c1 = int(nodeinfo[4])

        time.sleep(1)

        t2 = time.time()

        c2 = int(nodeinfo[4])

        c_nums = int(nodeinfo[3])

        usage = (c2 - c1) * 100 / ((t2 - t1) * c_nums * 1e9)

        print('CPU使用率'+ str(usage))

#--------对虚拟机域进行操作---------
def temp():
    text = entryName1.get()

    if (text == 'master1'):
        conn = conn0
    if (text == 'master0'):
        conn = conn1
    name = entryName.get()
    os.system('cd /var/lib/libvirt/images')
    os.system('sudo qemu-img create -f qcow2 %s.qcow2 10G'%(name))
    os.system('sudo virt-install --connect qemu:///system --virt-type kvm --name %s --ram 1024 --vcpus 1 --network network=br0 --disk path=/var/lib/libvirt/images/%s.qcow2,size=15,format=qcow2 --cdrom /home/user/下载/CentOS-7-x86_64-DVD-2009.iso --noautoconsole'%(name,name))

def undefine():
    text = entryName1.get()

    if (text == 'master1'):
        conn = conn0
    if (text == 'master0'):
        conn = conn1
    dom = conn.lookupByName(entryName.get())
    dom.undefine()
    print("虚拟机 {} 已取消定义".format(entryName.get()))


def suspand():
    text = entryName1.get()

    if (text == 'master1'):
        conn = conn0
    if (text == 'master0'):
        conn = conn1
    dom = conn.lookupByName(entryName.get())
    dom.suspend()
    print("虚拟机 {} 暂停成功".format(entryName.get()))


def resume():
    text = entryName1.get()

    if (text == 'master1'):
        conn = conn0
    if (text == 'master0'):
        conn = conn1
    dom = conn.lookupByName(entryName.get())
    dom.resume()
    print("虚拟机 {} 运行成功".format(entryName.get()))



def destroy():
    text = entryName1.get()

    if (text == 'master1'):
        conn = conn0
    if (text == 'master0'):
        conn = conn1
    dom = conn.lookupByName(entryName.get())
    dom.destroy()
    dom.undefine()
    print("虚拟机 {} 销毁成功".format(entryName.get()))



def start():
    text = entryName1.get()

    if (text == 'master1'):
        conn = conn0
    if (text == 'master0'):
        conn = conn1
    dom = conn.lookupByName(entryName.get())
    dom.create()
    print("虚拟机 {} 启动成功".format(entryName.get()))


def shutdown():
    text = entryName1.get()

    if (text == 'master1'):
        conn = conn0
    if (text == 'master0'):
        conn = conn1

    dom = conn.lookupByName(entryName.get())
    dom.shutdown()
    print("虚拟机 {} 关闭成功".format(entryName.get()))




#------------菜单控制-------------
def test():
    name=str(entryName.get())
    print(name)

#--------------------------------
conn0 = libvirt.open("qemu:///system")#链接
conn1=libvirt.open('qemu+ssh://user@master0:22/system')
top=tk.Tk(screenName=':0')
top.title("虚拟机管理平台")



labelHello = tk.Label(top,fg='#c71585',font = 'Helvetica -18 bold', text = "请输入虚拟机的名称:")
labelHello.grid(row=1,column=0,padx=2,pady=6,sticky='E')

entryName=tk.Entry(top,width=24)
entryName.grid(row=1,column=1,padx=2,sticky='W')

labelHello1 = tk.Label(top,fg='#c71585',font = 'Helvetica -18 bold', text = "请输入主节点的名称:")
labelHello1.grid(row=0,column=0,padx=2,pady=6,sticky='E')

entryName1=tk.Entry(top,width=24)
entryName1.grid(row=0,column=1,padx=2,sticky='W')
#-------操作------


showHost =tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold', text="显示主机信息",command=list_connection)
showHost.grid(row=3,column=0,padx=4,pady=4,sticky='E')

showVM =tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold', text="显示虚拟机状态",command=show_machine)
showVM.grid(row=3,column=2,padx=4,pady=4,sticky='W')

showVM1 =tk.Button(top,bg='#00BFFF',fg='white',width=36,height=2,font = 'Helvetica -15 bold', text="显示虚拟机信息",command=show_information)
showVM1.grid(row=2,column=1,padx=4,pady=4)

tempVM =tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold',text="创建虚拟机",command=temp)
tempVM.grid(row=4,column=0,padx=4,pady=4,sticky='E')

destroyVM = tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold', text="销毁虚拟机", command=destroy)
destroyVM.grid(row=4,column=2,padx=4,pady=4,sticky='W')

suspandVM =tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold',text="暂停虚拟机",command=suspand)
suspandVM.grid(row=5,column=0,padx=4,pady=4,sticky='E')

resumeVM = tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold', text="运行虚拟机", command=resume)
resumeVM.grid(row=5,column=2,padx=4,pady=4,sticky='W')

startVM = tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold', text="开启虚拟机", command=start)
startVM.grid(row=6,column=0,padx=4,pady=4,sticky='E')

shutdownVM = tk.Button(top,bg='#00BFFF',fg='white',width=18,height=2,font = 'Helvetica -15 bold', text="关闭虚拟机", command=shutdown)
shutdownVM.grid(row=6,column=2,padx=4,pady=4,sticky='W')




top.mainloop()

mpi代码见本文章。文章来源地址https://www.toymoban.com/news/detail-571343.html

到了这里,关于python可视化管理kvm虚拟机(使用libvirt、qemu连接虚拟机)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用 Python 制作可视化 GUI 界面,一键实现自动分类管理文件!

    经常杂乱无章的文件夹会让我们找不到所想要的文件,因此小编特意制作了一个 可视化GUI界面 ,通过输入路径一键点击实现文件分门别类的归档。 不同的文件后缀归类为不同的类别 我们先罗列一下大致有几类文件,根据文件的后缀来设定,大致如下 上面所罗列出来的文件

    2024年01月19日
    浏览(40)
  • Docker可视化管理工具Portainer多机器安装使用

    Docker安装并指定主目录:https://blog.csdn.net/wdy_2099/article/details/77367107 安装命令如下: 启动成功后,输入http://你的ip:8999/访问portainer 刚进入需要设置admin的密码,设置好密码后进入主页面: 然后添加环境: 然后,选择Socket,输入一个名称(名称最好和机器/业务关联),点击Conn

    2024年02月16日
    浏览(43)
  • 信息管理毕设分享(含算法) python大数据房价预测与可视化系统

    # 0 简介 今天学长向大家介绍一个适合作为毕设的项目 毕设分享 python大数据房价预测与可视化系统 项目获取: https://gitee.com/sinonfin/algorithm-sharing 1.需求描述 对于数据挖掘工程师来说,有时候需要抓取地理位置信息,比如统计房子周边基础设施信息,比如医院、公交车站、写

    2024年02月03日
    浏览(33)
  • 使用Python进行三维可视化

    使用Python进行三维可视化 Python是一种易于学习和使用的编程语言,它拥有强大的图形处理能力。在科学、工程或数据分析等领域,Python可以用来处理和生成各种图表和图像。本文将介绍如何使用Python进行三维可视化,并提供相应的源代码。 首先,我们需要安装必要的Python库

    2024年02月14日
    浏览(34)
  • 【100天精通Python】Day71:Python可视化_一文掌握Seaborn库的使用《一》_数据分布可视化,数据关系可视化,示例+代码

    目录 1. 数据分布的可视化 1.1 直方图(Histograms) 1.2 核密度估计图(Kernel Density Estimation Plot)

    2024年02月06日
    浏览(38)
  • python-数据可视化-使用API

    使用Web应用程序编程接口 (API)自动请求网站的特定信息而不是整个网页,再对这些信息进行可视化 Web API是网站的一部分,用于与使用具体URL请求特定信息的程序交互。这种请求称为API调用 。请求的数据将以易于处理的格式(如JSON或CSV)返回。依赖于外部数据源的大多数

    2024年02月11日
    浏览(31)
  • 如何使用Python进行数据可视化

    数据可视化是一种将数据呈现为图形或图表的技术,它有助于理解和发现数据中的模式和趋势。Python是一种流行的编程语言,有很多库可以帮助我们进行数据可视化。在本文中,我们将介绍使用Python进行数据可视化的基本步骤。 第一步:导入必要的库 在开始之前,我们需要

    2024年02月08日
    浏览(34)
  • GPT模型结合Python-GEE遥感云大数据分析、管理与可视化技术

    查看原文GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例应用 目录 第一章、理论基础 第二章、开发环境搭建 第三章、遥感大数据处理基础与ChatGPT等AI模型交互 第四章、典型案例操作实践 第五章、输入输出及数据资产高效管理 第六章、云端数据

    2024年02月08日
    浏览(84)
  • 【100天精通Python】Day72:Python可视化_一文掌握Seaborn库的使用《二》_分类数据可视化,线性模型和参数拟合的可视化,示例+代码

    目录 1. 分类数据的可视化 1.1 类别散点图(Categorical Scatter Plot) 1.2 类别分布图(Categorical Distribution Plot)

    2024年02月08日
    浏览(32)
  • python GUI编程--实现计算器和图书管理系统注册和登录的可视化操作

    1.简易计算器:编写程序,实现两个数的“加减乘除”,界面如图所示  2.利用tkinter设计一个登录界面,并实现各个命令按钮的功能: 3.利用tkinter设计一个下面的界面, 该界面的功能是:当单击“insert point”按钮时,第一个文本框的内容复制一份显示在第二个文本框内,当单

    2024年02月10日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包