
import tkinter as tk
from tkinter import *
from tkinter import messagebox
from tkinter import ttk
import libvirt
import os
import paramiko
root = tk.Tk()
host_id=1
def create():
def updata():
global host_id
host_id=r.get()
def definekvm():
virt_name = e_virt_name.get()
num_cpu = e_num_cpu.get()
meo_size = e_meo_size.get()
disk_size = e_disk_size.get()
path1='/home/manxu/Desktop/CentOS-7-x86_64-DVD-2003.iso'
path2='/home/mpiuser/CentOS-7-x86_64-DVD-2009.iso'
if host_id==1:
iso_path=path1
conn=libvirt.open('qemu:///system')
instruction = 'cd /usr/local/img && qemu-img create -f qcow2 {}.qcow2 {}G'.format(virt_name, disk_size)
os.system(instruction)
else:
iso_path=path2
conn = libvirt.open('qemu+ssh://root@node2/system')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
command='cd /usr/local/img'+';'+'qemu-img create -f qcow2 {}.qcow2 {}G'.format(virt_name,disk_size)
ssh.connect('192.168.0.14', '22', 'root')
ssh.exec_command(command)
qcow_path='/usr/local/img/{}.qcow2'.format(virt_name)
domain_list1 = conn.listDomainsID()
domain_list2=conn.listDefinedDomains()
xmldesc = '''
'''.format(virt_name,int(meo_size)*1024*1024,int(meo_size)*1024*1024,int(num_cpu),qcow_path,iso_path,5900+len(domain_list1)+len(domain_list2))
conn.defineXML(xmldesc)
if host_id==1:
information=[virt_name,'closed','host1']
else:
information=[virt_name,'closed','host2']
tree.insert('',END,values=information)
conn.close()
child_window=tk.Toplevel()
child_window.geometry('300x520')
child_window.title('创建虚拟机')
r = tk.IntVar()
r.set(1)
label1 = tk.Label(child_window, text='选择创建的主机:', font=20)
label1.pack(anchor="w",pady=10)
radio1 = tk.Radiobutton(child_window, text="host1", value=1, variable=r,command=updata,font=12)
radio1.pack(anchor="w")
radio2 = tk.Radiobutton(child_window, text="host2", value=2, variable=r,command=updata,font=12)
radio2.pack(anchor="w")
label2=tk.Label(child_window,text='虚拟机名称:',font=20)
label2.pack(anchor="w",pady=20)
e_virt_name=tk.Entry(child_window,width=15,font=20)
e_virt_name.pack(anchor="w")
label3 = tk.Label(child_window, text='CPU个数:', font=20)
label3.pack(anchor="w", pady=20)
e_num_cpu = tk.Entry(child_window, width=15, font=20)
e_num_cpu.pack(anchor="w")
label4 = tk.Label(child_window, text='内存空间(GB):', font=20)
label4.pack(anchor="w", pady=20)
e_meo_size = tk.Entry(child_window, width=15, font=20)
e_meo_size.pack(anchor="w")
label5 = tk.Label(child_window, text='磁盘空间(GB):', font=20)
label5.pack(anchor="w", pady=20)
e_disk_size = tk.Entry(child_window, width=15, font=20)
e_disk_size.pack(anchor="w")
button = tk.Button(child_window, text='信息输入完毕', font=16,command=definekvm)
button.pack(anchor="w", pady=20)
child_window.mainloop()
def onClick(event):
button2.config(state=tk.DISABLED)
button3.config(state=tk.DISABLED)
button4.config(state=tk.DISABLED)
global item
item=tree.selection()[0]
virt_name=tree.item(item)['values'][0]
mach_states=tree.item(item)['values'][1]
host_name=tree.item(item)['values'][2]
if mach_states=='closed':
button2.config(state=tk.NORMAL)
if mach_states=='open':
button3.config(state=tk.NORMAL)
button4.config(state=tk.NORMAL)
def open_virt():
virt_name = tree.item(item)['values'][0]
host_name = tree.item(item)['values'][2]
if host_name=='host1':
conn = libvirt.open('qemu:///system')
else:
conn = libvirt.open('qemu+ssh://root@node2/system')
dom = conn.lookupByName(virt_name)
dom.create()
value=[virt_name,'open',host_name]
tree.item(item,values=value)
conn.close()
def delete_virt():
virt_name = tree.item(item)['values'][0]
host_name = tree.item(item)['values'][2]
if host_name=='host1':
conn = libvirt.open('qemu:///system')
else:
conn = libvirt.open('qemu+ssh://root@node2/system')
dom = conn.lookupByName(virt_name)
dom.destroy()
tree.delete(item)
conn.close()
def close_virt():
virt_name = tree.item(item)['values'][0]
host_name = tree.item(item)['values'][2]
if host_name=='host1':
conn = libvirt.open('qemu:///system')
else:
conn = libvirt.open('qemu+ssh://root@node2/system')
dom = conn.lookupByName(virt_name)
dom.shutdown()
value=[virt_name,'closed',host_name]
tree.item(item,values=value)
conn.close()
def update_state():
x = tree.get_children()
for item in x:
tree.delete(item)
conn1 = libvirt.open('qemu:///system')
vms_list = []
domain_list = conn1.listDomainsID()
for id in domain_list:
vms_list.append(conn1.lookupByID(id).name())
for item_ in vms_list:
value = [item_, 'open', 'host1']
tree.insert('', END, values=value)
vms_list = []
for id in conn1.listDefinedDomains():
vms_list.append(id)
for item_ in vms_list:
value = [item_, 'closed', 'host1']
tree.insert('', END, values=value)
conn1.close()
conn2 = libvirt.open('qemu+ssh://root@node2/system')
vms_list = []
domain_list = conn2.listDomainsID()
for id in domain_list:
vms_list.append(conn2.lookupByID(id).name())
for item_ in vms_list:
value = [item_, 'open', 'host2']
tree.insert('', END, values=value)
vms_list = []
for id in conn2.listDefinedDomains():
vms_list.append(id)
for item_ in vms_list:
value = [item_, 'closed', 'host2']
tree.insert('', END, values=value)
conn2.close()
root.geometry('600x400')
root.title('虚拟机管理系统')
button1=tk.Button(root,text='创建虚拟机',font=('Arial', 16),command=create)
button1.place(relx=0.04,rely=0.08)
button5=tk.Button(root,text='更新状态',font=('Arial', 16),command=update_state)
button5.place(relx=0.34,rely=0.08)
yscroll = Scrollbar(root, orient=VERTICAL)
tree = ttk.Treeview(root,height=10,show='headings', yscrollcommand=yscroll.set)
tree.place(relx=0.04,rely=0.25)
tree["columns"] = ("虚拟机名称", "虚拟机状态",'虚拟机来源')
tree.column("虚拟机名称", width=200)
tree.column("虚拟机状态", width=200)
tree.column("虚拟机来源", width=150)
tree.heading("虚拟机名称", text="虚拟机名称")
tree.heading("虚拟机状态", text="虚拟机状态")
tree.heading("虚拟机来源", text="虚拟机来源")
yscroll.pack(side=RIGHT, fill=Y)
yscroll.config(command=tree.yview)
button2=tk.Button(root,text='开启虚拟机',font=('Arial', 16),command=open_virt)
button2.place(relx=0.04,rely=0.85)
button2.config(state=tk.DISABLED)
button3=tk.Button(root,text='关闭虚拟机',font=('Arial', 16),command=close_virt)
button3.place(relx=0.34,rely=0.85)
button3.config(state=tk.DISABLED)
button4=tk.Button(root,text='删除虚拟机',font=('Arial', 16),command=delete_virt)
button4.place(relx=0.64,rely=0.85)
button4.config(state=tk.DISABLED)
conn1 = libvirt.open('qemu:///system')
vms_list = []
domain_list = conn1.listDomainsID()
for id in domain_list:
vms_list.append(conn1.lookupByID(id).name())
for item_ in vms_list:
value=[item_,'open','host1']
tree.insert('', END, values=value)
vms_list = []
for id in conn1.listDefinedDomains():
vms_list.append(id)
for item_ in vms_list:
value=[item_,'closed','host1']
tree.insert('', END, values=value)
conn1.close()
conn2 = libvirt.open('qemu+ssh://root@node2/system')
vms_list = []
domain_list = conn2.listDomainsID()
for id in domain_list:
vms_list.append(conn2.lookupByID(id).name())
for item_ in vms_list:
value=[item_,'open','host2']
tree.insert('', END, values=value)
vms_list = []
for id in conn2.listDefinedDomains():
vms_list.append(id)
for item_ in vms_list:
value=[item_,'closed','host2']
tree.insert('', END, values=value)
conn2.close()
tree.bind("
root.mainloop()
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)