Commit aa402b6f by tarokkk

Merge branch 'master' of git.cloud.ik.bme.hu:circle/vmdriver

parents 4ca7d780 20423300
...@@ -16,6 +16,7 @@ class VMInstance: ...@@ -16,6 +16,7 @@ class VMInstance:
disk_list = list() disk_list = list()
graphics = dict graphics = dict
context = dict context = dict
raw_data = None
def __init__(self, def __init__(self,
name, name,
...@@ -29,7 +30,8 @@ class VMInstance: ...@@ -29,7 +30,8 @@ class VMInstance:
disk_list=None, disk_list=None,
context=None, context=None,
graphics=None, graphics=None,
acpi=True): acpi=True,
raw_data=None):
'''Default Virtual Machine constructor '''Default Virtual Machine constructor
name - unique name for the instance name - unique name for the instance
vcpu - nubmer of processors vcpu - nubmer of processors
...@@ -56,6 +58,7 @@ class VMInstance: ...@@ -56,6 +58,7 @@ class VMInstance:
self.conext = context self.conext = context
self.graphics = graphics self.graphics = graphics
self.acpi = acpi self.acpi = acpi
self.raw_data = raw_data
def build_xml(self): def build_xml(self):
'''Return the root Element Tree object '''Return the root Element Tree object
...@@ -95,10 +98,13 @@ class VMInstance: ...@@ -95,10 +98,13 @@ class VMInstance:
'port': self.graphics['port'], 'port': self.graphics['port'],
'passwd': self.graphics['passwd'], 'passwd': self.graphics['passwd'],
}) })
# Features # Features (TODO: features as list)
features = ET.SubElement(xml_top, 'features') features = ET.SubElement(xml_top, 'features')
if self.acpi: if self.acpi:
ET.SubElement(features, 'acpi') ET.SubElement(features, 'acpi')
# Building raw data into xml
if self.raw_data is not None:
xml_top.append(ET.fromstring(self.raw_data))
return xml_top return xml_top
def dump_xml(self): def dump_xml(self):
...@@ -174,7 +180,7 @@ class VMNetwork: ...@@ -174,7 +180,7 @@ class VMNetwork:
model -- available models in libvirt model -- available models in libvirt
QoS -- CIRCLE QoS class? QoS -- CIRCLE QoS class?
comment -- Any comment comment -- Any comment
managed -- Apply managed flow rules like Ip and mac spoofing prevent managed -- Apply managed flow rules for spoofing prevent
script -- Executable network script /bin/true by default script -- Executable network script /bin/true by default
''' '''
# Class attributes # Class attributes
......
...@@ -6,6 +6,16 @@ import logging ...@@ -6,6 +6,16 @@ import logging
connection = None connection = None
state_dict = {0: 'NOSTATE',
1: 'RUNNING',
2: 'BLOCKED',
3: 'PAUSED',
4: 'SHUTDOWN',
5: 'SHUTOFF',
6: 'CRASHED',
7: 'PMSUSPENDED'
}
def req_connection(original_function): def req_connection(original_function):
'''Connection checking decorator for libvirt. '''Connection checking decorator for libvirt.
...@@ -82,7 +92,14 @@ def delete(name): ...@@ -82,7 +92,14 @@ def delete(name):
@req_connection @req_connection
def list_domains(): def list_domains():
return connection.listDefinedDomains() '''
:return list: List of domains name in host
'''
domain_list = []
for i in connection.listDomainsID():
dom = connection.lookupByID(i)
domain_list += dom.name()
return domain_list
@req_connection @req_connection
...@@ -142,4 +159,44 @@ def reboot(name): ...@@ -142,4 +159,44 @@ def reboot(name):
''' '''
domain = lookupByName(name) domain = lookupByName(name)
domain.reboot() domain.reboot()
@req_connection
def node_info():
''' Get info from Host as dict:
model string indicating the CPU model
memory memory size in kilobytes
cpus the number of active CPUs
mhz expected CPU frequency
nodes the number of NUMA cell, 1 for unusual NUMA
topologies or uniform memory access;
check capabilities XML for the actual NUMA topology
sockets number of CPU sockets per node if nodes > 1,
1 in case of unusual NUMA topology
cores number of cores per socket, total number of
processors in case of unusual NUMA topolog
threads number of threads per core, 1 in case of unusual numa topology
'''
keys = ['model', 'memory', 'cpus', 'mhz',
'nodes', 'sockets', 'cores', 'threads']
values = connection.getInfo()
return dict(zip(keys, values))
@req_connection
def domain_info(name):
'''
state the running state, one of virDomainState
maxmem the maximum memory in KBytes allowed
memory the memory in KBytes used by the domain
virtcpunum the number of virtual CPUs for the domain
cputime the CPU time used in nanoseconds
'''
keys = ['state', 'maxmem', 'memory', 'virtcpunum', 'cputime']
dom = lookupByName(name)
values = dom.info()
# Change state to proper ENUM
info = dict(zip(keys, values))
info['state'] = state_dict[info['state']]
return info
# virDomainResume # virDomainResume
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment