mirror of
https://github.com/retspen/webvirtcloud
synced 2025-07-31 12:41:08 +00:00
lint with black python. convert f style strings to old one. some small fixes
This commit is contained in:
parent
c20c353a40
commit
508e3609be
54 changed files with 2123 additions and 1824 deletions
|
|
@ -1,11 +1,12 @@
|
|||
import libvirt
|
||||
import threading
|
||||
import socket
|
||||
import re
|
||||
from vrtManager import util
|
||||
from vrtManager.rwlock import ReadWriteLock
|
||||
import socket
|
||||
import threading
|
||||
|
||||
import libvirt
|
||||
from django.conf import settings
|
||||
from libvirt import libvirtError
|
||||
from vrtManager import util
|
||||
from vrtManager.rwlock import ReadWriteLock
|
||||
|
||||
CONN_SOCKET = 4
|
||||
CONN_TLS = 3
|
||||
|
|
@ -18,6 +19,7 @@ TCP_PORT = 16509
|
|||
|
||||
class wvmEventLoop(threading.Thread):
|
||||
""" Event Loop Class"""
|
||||
|
||||
def __init__(self, group=None, target=None, name=None, args=(), kwargs={}):
|
||||
# register the default event implementation
|
||||
# of libvirt, as we do not have an existing
|
||||
|
|
@ -25,7 +27,7 @@ class wvmEventLoop(threading.Thread):
|
|||
libvirt.virEventRegisterDefaultImpl()
|
||||
|
||||
if name is None:
|
||||
name = 'libvirt event loop'
|
||||
name = "libvirt event loop"
|
||||
|
||||
super(wvmEventLoop, self).__init__(group, target, name, args, kwargs)
|
||||
|
||||
|
|
@ -46,6 +48,7 @@ class wvmConnection(object):
|
|||
class representing a single connection stored in the Connection Manager
|
||||
# to-do: may also need some locking to ensure to not connect simultaniously in 2 threads
|
||||
"""
|
||||
|
||||
def __init__(self, host, login, passwd, conn):
|
||||
"""
|
||||
Sets all class attributes and tries to open the connection
|
||||
|
|
@ -86,10 +89,12 @@ class wvmConnection(object):
|
|||
# * set keep alive interval
|
||||
# * set connection close/fail handler
|
||||
try:
|
||||
self.connection.setKeepAlive(connection_manager.keepalive_interval, connection_manager.keepalive_count)
|
||||
self.connection.setKeepAlive(
|
||||
connection_manager.keepalive_interval, connection_manager.keepalive_count
|
||||
)
|
||||
try:
|
||||
self.connection.registerCloseCallback(self.__connection_close_callback, None)
|
||||
except:
|
||||
except Exception:
|
||||
# Temporary fix for libvirt > libvirt-0.10.2-41
|
||||
pass
|
||||
except libvirtError as e:
|
||||
|
|
@ -134,49 +139,49 @@ class wvmConnection(object):
|
|||
def __connect_tcp(self):
|
||||
flags = [libvirt.VIR_CRED_AUTHNAME, libvirt.VIR_CRED_PASSPHRASE]
|
||||
auth = [flags, self.__libvirt_auth_credentials_callback, None]
|
||||
uri = f'qemu+tcp://{self.host}/system'
|
||||
uri = f"qemu+tcp://{self.host}/system"
|
||||
|
||||
try:
|
||||
self.connection = libvirt.openAuth(uri, auth, 0)
|
||||
self.last_error = None
|
||||
|
||||
except libvirtError as e:
|
||||
self.last_error = f'Connection Failed: {str(e)}'
|
||||
self.last_error = f"Connection Failed: {str(e)}"
|
||||
self.connection = None
|
||||
|
||||
def __connect_ssh(self):
|
||||
uri = 'qemu+ssh://%s@%s/system' % (self.login, self.host)
|
||||
uri = "qemu+ssh://%s@%s/system" % (self.login, self.host)
|
||||
|
||||
try:
|
||||
self.connection = libvirt.open(uri)
|
||||
self.last_error = None
|
||||
|
||||
except libvirtError as e:
|
||||
self.last_error = f'Connection Failed: {str(e)} --- ' + repr(libvirt.virGetLastError())
|
||||
self.last_error = f"Connection Failed: {str(e)} --- " + repr(libvirt.virGetLastError())
|
||||
self.connection = None
|
||||
|
||||
def __connect_tls(self):
|
||||
flags = [libvirt.VIR_CRED_AUTHNAME, libvirt.VIR_CRED_PASSPHRASE]
|
||||
auth = [flags, self.__libvirt_auth_credentials_callback, None]
|
||||
uri = 'qemu+tls://%s@%s/system' % (self.login, self.host)
|
||||
uri = "qemu+tls://%s@%s/system" % (self.login, self.host)
|
||||
|
||||
try:
|
||||
self.connection = libvirt.openAuth(uri, auth, 0)
|
||||
self.last_error = None
|
||||
|
||||
except libvirtError as e:
|
||||
self.last_error = f'Connection Failed: {str(e)}'
|
||||
self.last_error = f"Connection Failed: {str(e)}"
|
||||
self.connection = None
|
||||
|
||||
def __connect_socket(self):
|
||||
uri = 'qemu:///system'
|
||||
uri = "qemu:///system"
|
||||
|
||||
try:
|
||||
self.connection = libvirt.open(uri)
|
||||
self.last_error = None
|
||||
|
||||
except libvirtError as e:
|
||||
self.last_error = f'Connection Failed: {str(e)}'
|
||||
self.last_error = f"Connection Failed: {str(e)}"
|
||||
self.connection = None
|
||||
|
||||
def close(self):
|
||||
|
|
@ -202,23 +207,23 @@ class wvmConnection(object):
|
|||
# unregister callback (as it is no longer valid if this instance gets deleted)
|
||||
try:
|
||||
self.connection.unregisterCloseCallback()
|
||||
except:
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def __str__(self):
|
||||
if self.type == CONN_TCP:
|
||||
type_str = 'tcp'
|
||||
type_str = "tcp"
|
||||
elif self.type == CONN_SSH:
|
||||
type_str = 'ssh'
|
||||
type_str = "ssh"
|
||||
elif self.type == CONN_TLS:
|
||||
type_str = 'tls'
|
||||
type_str = "tls"
|
||||
else:
|
||||
type_str = 'invalid_type'
|
||||
type_str = "invalid_type"
|
||||
|
||||
return f'qemu+{type_str}://{self.login}@{self.host}/system'
|
||||
return f"qemu+{type_str}://{self.login}@{self.host}/system"
|
||||
|
||||
def __repr__(self):
|
||||
return f'<wvmConnection {str(self)}>'
|
||||
return f"<wvmConnection {str(self)}>"
|
||||
|
||||
|
||||
class wvmConnectionManager(object):
|
||||
|
|
@ -307,7 +312,7 @@ class wvmConnectionManager(object):
|
|||
socket_host = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
socket_host.settimeout(1)
|
||||
if conn_type == CONN_SSH:
|
||||
if ':' in hostname:
|
||||
if ":" in hostname:
|
||||
libvirt_host, PORT = hostname.split(":")
|
||||
PORT = int(PORT)
|
||||
else:
|
||||
|
|
@ -320,7 +325,7 @@ class wvmConnectionManager(object):
|
|||
socket_host.connect((hostname, TLS_PORT))
|
||||
if conn_type == CONN_SOCKET:
|
||||
socket_host = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||
socket_host.connect('/var/run/libvirt/libvirt-sock')
|
||||
socket_host.connect("/var/run/libvirt/libvirt-sock")
|
||||
socket_host.close()
|
||||
return True
|
||||
except Exception as err:
|
||||
|
|
@ -328,8 +333,8 @@ class wvmConnectionManager(object):
|
|||
|
||||
|
||||
connection_manager = wvmConnectionManager(
|
||||
settings.LIBVIRT_KEEPALIVE_INTERVAL if hasattr(settings, 'LIBVIRT_KEEPALIVE_INTERVAL') else 5,
|
||||
settings.LIBVIRT_KEEPALIVE_COUNT if hasattr(settings, 'LIBVIRT_KEEPALIVE_COUNT') else 5,
|
||||
settings.LIBVIRT_KEEPALIVE_INTERVAL if hasattr(settings, "LIBVIRT_KEEPALIVE_INTERVAL") else 5,
|
||||
settings.LIBVIRT_KEEPALIVE_COUNT if hasattr(settings, "LIBVIRT_KEEPALIVE_COUNT") else 5,
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -353,15 +358,16 @@ class wvmConnect(object):
|
|||
def get_dom_cap_xml(self, arch, machine):
|
||||
""" Return domain capabilities xml"""
|
||||
emulatorbin = self.get_emulator(arch)
|
||||
virttype = 'kvm' if 'kvm' in self.get_hypervisors_domain_types()[arch] else 'qemu'
|
||||
virttype = "kvm" if "kvm" in self.get_hypervisors_domain_types()[arch] else "qemu"
|
||||
|
||||
machine_types = self.get_machine_types(arch)
|
||||
if not machine or machine not in machine_types:
|
||||
machine = 'pc' if 'pc' in machine_types else machine_types[0]
|
||||
machine = "pc" if "pc" in machine_types else machine_types[0]
|
||||
return self.wvm.getDomainCapabilities(emulatorbin, arch, machine, virttype)
|
||||
|
||||
def get_capabilities(self, arch):
|
||||
""" Host Capabilities for specified architecture """
|
||||
|
||||
def guests(ctx):
|
||||
result = dict()
|
||||
for arch_el in ctx.xpath("/capabilities/guest/arch[@name='{}']".format(arch)):
|
||||
|
|
@ -371,11 +377,9 @@ class wvmConnect(object):
|
|||
|
||||
result["machines"] = []
|
||||
for m in arch_el.xpath("machine"):
|
||||
result["machines"].append({
|
||||
"machine": m.text,
|
||||
"max_cpu": m.get("maxCpus"),
|
||||
"canonical": m.get("canonical")
|
||||
})
|
||||
result["machines"].append(
|
||||
{"machine": m.text, "max_cpu": m.get("maxCpus"), "canonical": m.get("canonical")}
|
||||
)
|
||||
|
||||
guest_el = arch_el.getparent()
|
||||
for f in guest_el.xpath("features"):
|
||||
|
|
@ -400,7 +404,7 @@ class wvmConnect(object):
|
|||
result["os_support"] = util.get_xml_path(xml, "/domainCapabilities/os/@supported")
|
||||
|
||||
result["loader_support"] = util.get_xml_path(xml, "/domainCapabilities/os/loader/@supported")
|
||||
if result["loader_support"] == 'yes':
|
||||
if result["loader_support"] == "yes":
|
||||
result["loaders"] = self.get_os_loaders(arch, machine)
|
||||
result["loader_enums"] = self.get_os_loader_enums(arch, machine)
|
||||
|
||||
|
|
@ -410,27 +414,29 @@ class wvmConnect(object):
|
|||
result["cpu_custom_models"] = self.get_cpu_custom_types(arch, machine)
|
||||
|
||||
result["disk_support"] = util.get_xml_path(xml, "/domainCapabilities/devices/disk/@supported")
|
||||
if result["disk_support"] == 'yes':
|
||||
if result["disk_support"] == "yes":
|
||||
result["disk_devices"] = self.get_disk_device_types(arch, machine)
|
||||
result["disk_bus"] = self.get_disk_bus_types(arch, machine)
|
||||
|
||||
result["graphics_support"] = util.get_xml_path(xml, "/domainCapabilities/devices/graphics/@supported")
|
||||
if result["graphics_support"] == 'yes':
|
||||
if result["graphics_support"] == "yes":
|
||||
result["graphics_types"] = self.get_graphics_types(arch, machine)
|
||||
|
||||
result["video_support"] = util.get_xml_path(xml, "/domainCapabilities/devices/video/@supported")
|
||||
if result["video_support"] == 'yes':
|
||||
if result["video_support"] == "yes":
|
||||
result["video_types"] = self.get_video_models(arch, machine)
|
||||
|
||||
result["hostdev_support"] = util.get_xml_path(xml, "/domainCapabilities/devices/hostdev/@supported")
|
||||
if result["hostdev_support"] == 'yes':
|
||||
if result["hostdev_support"] == "yes":
|
||||
result["hostdev_types"] = self.get_hostdev_modes(arch, machine)
|
||||
result["hostdev_startup_policies"] = self.get_hostdev_startup_policies(arch, machine)
|
||||
result["hostdev_subsys_types"] = self.get_hostdev_subsys_types(arch, machine)
|
||||
|
||||
result["features_gic_support"] = util.get_xml_path(xml, "/domainCapabilities/features/gic/@supported")
|
||||
result["features_genid_support"] = util.get_xml_path(xml, "/domainCapabilities/features/genid/@supported")
|
||||
result["features_vmcoreinfo_support"] = util.get_xml_path(xml, "/domainCapabilities/features/vmcoreinfo/@supported")
|
||||
result["features_vmcoreinfo_support"] = util.get_xml_path(
|
||||
xml, "/domainCapabilities/features/vmcoreinfo/@supported"
|
||||
)
|
||||
result["features_sev_support"] = util.get_xml_path(xml, "/domainCapabilities/features/sev/@supported")
|
||||
|
||||
return result
|
||||
|
|
@ -510,12 +516,12 @@ class wvmConnect(object):
|
|||
:return: Get cache available modes
|
||||
"""
|
||||
return {
|
||||
'default': 'Default',
|
||||
'none': 'Disabled',
|
||||
'writethrough': 'Write through',
|
||||
'writeback': 'Write back',
|
||||
'directsync': 'Direct sync', # since libvirt 0.9.5
|
||||
'unsafe': 'Unsafe', # since libvirt 0.9.7
|
||||
"default": "Default",
|
||||
"none": "Disabled",
|
||||
"writethrough": "Write through",
|
||||
"writeback": "Write back",
|
||||
"directsync": "Direct sync", # since libvirt 0.9.5
|
||||
"unsafe": "Unsafe", # since libvirt 0.9.7
|
||||
}
|
||||
|
||||
def get_io_modes(self):
|
||||
|
|
@ -523,9 +529,9 @@ class wvmConnect(object):
|
|||
:return: available io modes
|
||||
"""
|
||||
return {
|
||||
'default': 'Default',
|
||||
'native': 'Native',
|
||||
'threads': 'Threads',
|
||||
"default": "Default",
|
||||
"native": "Native",
|
||||
"threads": "Threads",
|
||||
}
|
||||
|
||||
def get_discard_modes(self):
|
||||
|
|
@ -533,9 +539,9 @@ class wvmConnect(object):
|
|||
:return: available discard modes
|
||||
"""
|
||||
return {
|
||||
'default': 'Default',
|
||||
'ignore': 'Ignore',
|
||||
'unmap': 'Unmap',
|
||||
"default": "Default",
|
||||
"ignore": "Ignore",
|
||||
"unmap": "Unmap",
|
||||
}
|
||||
|
||||
def get_detect_zeroes_modes(self):
|
||||
|
|
@ -543,21 +549,22 @@ class wvmConnect(object):
|
|||
:return: available detect zeroes modes
|
||||
"""
|
||||
return {
|
||||
'default': 'Default',
|
||||
'on': 'On',
|
||||
'off': 'Off',
|
||||
'unmap': 'Unmap',
|
||||
"default": "Default",
|
||||
"on": "On",
|
||||
"off": "Off",
|
||||
"unmap": "Unmap",
|
||||
}
|
||||
|
||||
def get_hypervisors_domain_types(self):
|
||||
"""
|
||||
:return: hypervisor domain types
|
||||
"""
|
||||
|
||||
def hypervisors(ctx):
|
||||
result = {}
|
||||
for arch in ctx.xpath('/capabilities/guest/arch'):
|
||||
domain_types = arch.xpath('domain/@type')
|
||||
arch_name = arch.xpath('@name')[0]
|
||||
for arch in ctx.xpath("/capabilities/guest/arch"):
|
||||
domain_types = arch.xpath("domain/@type")
|
||||
arch_name = arch.xpath("@name")[0]
|
||||
result[arch_name] = domain_types
|
||||
return result
|
||||
|
||||
|
|
@ -567,9 +574,10 @@ class wvmConnect(object):
|
|||
"""
|
||||
:return: hypervisor and its machine types
|
||||
"""
|
||||
|
||||
def machines(ctx):
|
||||
result = dict()
|
||||
for arche in ctx.xpath('/capabilities/guest/arch'):
|
||||
for arche in ctx.xpath("/capabilities/guest/arch"):
|
||||
arch = arche.get("name")
|
||||
|
||||
result[arch] = self.get_machine_types(arch)
|
||||
|
|
@ -587,6 +595,7 @@ class wvmConnect(object):
|
|||
"""
|
||||
:return: canonical(if exist) name of machine types
|
||||
"""
|
||||
|
||||
def machines(ctx):
|
||||
result = list()
|
||||
canonical_name = ctx.xpath("/capabilities/guest/arch[@name='{}']/machine[@canonical]".format(arch))
|
||||
|
|
@ -602,22 +611,24 @@ class wvmConnect(object):
|
|||
"""
|
||||
:return: host emulators list
|
||||
"""
|
||||
|
||||
def emulators(ctx):
|
||||
result = {}
|
||||
for arch in ctx.xpath('/capabilities/guest/arch'):
|
||||
emulator = arch.xpath('emulator')
|
||||
arch_name = arch.xpath('@name')[0]
|
||||
for arch in ctx.xpath("/capabilities/guest/arch"):
|
||||
emulator = arch.xpath("emulator")
|
||||
arch_name = arch.xpath("@name")[0]
|
||||
result[arch_name] = emulator
|
||||
return result
|
||||
|
||||
return util.get_xml_path(self.get_cap_xml(), func=emulators)
|
||||
|
||||
def get_os_loaders(self, arch='x86_64', machine='pc'):
|
||||
def get_os_loaders(self, arch="x86_64", machine="pc"):
|
||||
"""
|
||||
:param arch: architecture
|
||||
:param machine:
|
||||
:return: available os loaders list
|
||||
"""
|
||||
|
||||
def get_os_loaders(ctx):
|
||||
return [v.text for v in ctx.xpath("/domainCapabilities/os/loader[@supported='yes']/value")]
|
||||
|
||||
|
|
@ -629,6 +640,7 @@ class wvmConnect(object):
|
|||
:param machine:
|
||||
:return: available os loaders list
|
||||
"""
|
||||
|
||||
def get_os_loader_enums(ctx):
|
||||
result = dict()
|
||||
enums = [v for v in ctx.xpath("/domainCapabilities/os/loader[@supported='yes']/enum/@name")]
|
||||
|
|
@ -645,6 +657,7 @@ class wvmConnect(object):
|
|||
:param arch:
|
||||
:return: available disk bus types list
|
||||
"""
|
||||
|
||||
def get_bus_list(ctx):
|
||||
return [v.text for v in ctx.xpath("/domainCapabilities/devices/disk/enum[@name='bus']/value")]
|
||||
|
||||
|
|
@ -657,6 +670,7 @@ class wvmConnect(object):
|
|||
:param machine:
|
||||
:return: available disk device type list
|
||||
"""
|
||||
|
||||
def get_device_list(ctx):
|
||||
return [v.text for v in ctx.xpath("/domainCapabilities/devices/disk/enum[@name='diskDevice']/value")]
|
||||
|
||||
|
|
@ -669,6 +683,7 @@ class wvmConnect(object):
|
|||
:param machine:
|
||||
:return: available graphics types
|
||||
"""
|
||||
|
||||
def get_graphics_list(ctx):
|
||||
return [v.text for v in ctx.xpath("/domainCapabilities/devices/graphics/enum[@name='type']/value")]
|
||||
|
||||
|
|
@ -680,6 +695,7 @@ class wvmConnect(object):
|
|||
:param machine:
|
||||
:return: available cpu modes
|
||||
"""
|
||||
|
||||
def get_cpu_modes(ctx):
|
||||
return [v for v in ctx.xpath("/domainCapabilities/cpu/mode[@supported='yes']/@name")]
|
||||
|
||||
|
|
@ -691,6 +707,7 @@ class wvmConnect(object):
|
|||
:param machine:
|
||||
:return: available graphics types
|
||||
"""
|
||||
|
||||
def get_custom_list(ctx):
|
||||
usable_yes = "/domainCapabilities/cpu/mode[@name='custom'][@supported='yes']/model[@usable='yes']"
|
||||
usable_unknown = "/domainCapabilities/cpu/mode[@name='custom'][@supported='yes']/model[@usable='unknown']"
|
||||
|
|
@ -706,6 +723,7 @@ class wvmConnect(object):
|
|||
:param machine:
|
||||
:return. available nodedev modes
|
||||
"""
|
||||
|
||||
def get_hostdev_list(ctx):
|
||||
return [v.text for v in ctx.xpath("/domainCapabilities/devices/hostdev/enum[@name='mode']/value")]
|
||||
|
||||
|
|
@ -717,6 +735,7 @@ class wvmConnect(object):
|
|||
:param machine:
|
||||
:return: available hostdev modes
|
||||
"""
|
||||
|
||||
def get_hostdev_list(ctx):
|
||||
return [v.text for v in ctx.xpath("/domainCapabilities/devices/hostdev/enum[@name='startupPolicy']/value")]
|
||||
|
||||
|
|
@ -728,6 +747,7 @@ class wvmConnect(object):
|
|||
:param machine:
|
||||
:return: available nodedev sub system types
|
||||
"""
|
||||
|
||||
def get_hostdev_list(ctx):
|
||||
return [v.text for v in ctx.xpath("/domainCapabilities/devices/hostdev/enum[@name='subsysType']/value")]
|
||||
|
||||
|
|
@ -737,19 +757,19 @@ class wvmConnect(object):
|
|||
"""
|
||||
:return: network card models
|
||||
"""
|
||||
return ['default', 'e1000', 'virtio']
|
||||
return ["default", "e1000", "virtio"]
|
||||
|
||||
def get_image_formats(self):
|
||||
"""
|
||||
:return: available image formats
|
||||
"""
|
||||
return ['raw', 'qcow', 'qcow2']
|
||||
return ["raw", "qcow", "qcow2"]
|
||||
|
||||
def get_file_extensions(self):
|
||||
"""
|
||||
:return: available image filename extensions
|
||||
"""
|
||||
return ['img', 'qcow', 'qcow2']
|
||||
return ["img", "qcow", "qcow2"]
|
||||
|
||||
def get_video_models(self, arch, machine):
|
||||
"""
|
||||
|
|
@ -757,9 +777,10 @@ class wvmConnect(object):
|
|||
:param machine:
|
||||
:return: available graphics video types
|
||||
"""
|
||||
|
||||
def get_video_list(ctx):
|
||||
result = []
|
||||
for video_enum in ctx.xpath('/domainCapabilities/devices/video/enum'):
|
||||
for video_enum in ctx.xpath("/domainCapabilities/devices/video/enum"):
|
||||
if video_enum.xpath("@name")[0] == "modelType":
|
||||
for values in video_enum:
|
||||
result.append(values.text)
|
||||
|
|
@ -787,8 +808,8 @@ class wvmConnect(object):
|
|||
|
||||
def get_network_forward(self, net_name):
|
||||
def get_forward(doc):
|
||||
forward_mode = util.get_xpath(doc, '/network/forward/@mode')
|
||||
return forward_mode or 'isolated'
|
||||
forward_mode = util.get_xpath(doc, "/network/forward/@mode")
|
||||
return forward_mode or "isolated"
|
||||
|
||||
net = self.get_network(net_name)
|
||||
xml = net.XMLDesc(0)
|
||||
|
|
@ -825,14 +846,14 @@ class wvmConnect(object):
|
|||
netdevice = []
|
||||
|
||||
def get_info(doc):
|
||||
dev_type = util.get_xpath(doc, '/device/capability/@type')
|
||||
interface = util.get_xpath(doc, '/device/capability/interface')
|
||||
dev_type = util.get_xpath(doc, "/device/capability/@type")
|
||||
interface = util.get_xpath(doc, "/device/capability/interface")
|
||||
return dev_type, interface
|
||||
|
||||
for dev in self.wvm.listAllDevices(0):
|
||||
xml = dev.XMLDesc(0)
|
||||
(dev_type, interface) = util.get_xml_path(xml, func=get_info)
|
||||
if dev_type == 'net':
|
||||
if dev_type == "net":
|
||||
netdevice.append(interface)
|
||||
return netdevice
|
||||
|
||||
|
|
@ -850,9 +871,9 @@ class wvmConnect(object):
|
|||
else:
|
||||
vcpu = util.get_xpath(doc, "/domain/vcpu")
|
||||
title = util.get_xpath(doc, "/domain/title")
|
||||
title = title if title else ''
|
||||
title = title if title else ""
|
||||
description = util.get_xpath(doc, "/domain/description")
|
||||
description = description if description else ''
|
||||
description = description if description else ""
|
||||
return mem, vcpu, title, description
|
||||
|
||||
for name in self.get_instances():
|
||||
|
|
@ -860,12 +881,12 @@ class wvmConnect(object):
|
|||
xml = dom.XMLDesc(0)
|
||||
(mem, vcpu, title, description) = util.get_xml_path(xml, func=get_info)
|
||||
vname[dom.name()] = {
|
||||
'status': dom.info()[0],
|
||||
'uuid': dom.UUIDString(),
|
||||
'vcpu': vcpu,
|
||||
'memory': mem,
|
||||
'title': title,
|
||||
'description': description,
|
||||
"status": dom.info()[0],
|
||||
"uuid": dom.UUIDString(),
|
||||
"vcpu": vcpu,
|
||||
"memory": mem,
|
||||
"title": title,
|
||||
"description": description,
|
||||
}
|
||||
return vname
|
||||
|
||||
|
|
@ -882,20 +903,20 @@ class wvmConnect(object):
|
|||
else:
|
||||
vcpu = util.get_xpath(ctx, "/domain/vcpu")
|
||||
title = util.get_xpath(ctx, "/domain/title")
|
||||
title = title if title else ''
|
||||
title = title if title else ""
|
||||
description = util.get_xpath(ctx, "/domain/description")
|
||||
description = description if description else ''
|
||||
description = description if description else ""
|
||||
return mem, vcpu, title, description
|
||||
|
||||
(mem, vcpu, title, description) = util.get_xml_path(xml, func=get_info)
|
||||
return {
|
||||
'name': dom.name(),
|
||||
'status': dom.info()[0],
|
||||
'uuid': dom.UUIDString(),
|
||||
'vcpu': vcpu,
|
||||
'memory': mem,
|
||||
'title': title,
|
||||
'description': description,
|
||||
"name": dom.name(),
|
||||
"status": dom.info()[0],
|
||||
"uuid": dom.UUIDString(),
|
||||
"vcpu": vcpu,
|
||||
"memory": mem,
|
||||
"title": title,
|
||||
"description": description,
|
||||
}
|
||||
|
||||
def close(self):
|
||||
|
|
@ -931,7 +952,7 @@ class wvmConnect(object):
|
|||
for arch, patterns in util.UEFI_ARCH_PATTERNS.items():
|
||||
for pattern in patterns:
|
||||
if re.match(pattern, path):
|
||||
return ("UEFI %(arch)s: %(path)s" % {"arch": arch, "path": path})
|
||||
return "UEFI %(arch)s: %(path)s" % {"arch": arch, "path": path}
|
||||
|
||||
return "Custom: %(path)s" % {"path": path}
|
||||
|
||||
|
|
@ -945,15 +966,17 @@ class wvmConnect(object):
|
|||
"""
|
||||
Return True if libvirt advertises support for proper UEFI setup
|
||||
"""
|
||||
return ("readonly" in loader_enums and "yes" in loader_enums.get("readonly"))
|
||||
return "readonly" in loader_enums and "yes" in loader_enums.get("readonly")
|
||||
|
||||
def is_supports_virtio(self, arch, machine):
|
||||
if not self.is_qemu():
|
||||
return False
|
||||
|
||||
# These _only_ support virtio so don't check the OS
|
||||
if arch in ["aarch64", "armv7l", "ppc64", "ppc64le", "s390x", "riscv64", "riscv32"] and \
|
||||
machine in ["virt", "pseries"]:
|
||||
if arch in ["aarch64", "armv7l", "ppc64", "ppc64le", "s390x", "riscv64", "riscv32"] and machine in [
|
||||
"virt",
|
||||
"pseries",
|
||||
]:
|
||||
return True
|
||||
|
||||
if arch in ["x86_64", "i686"]:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue