Serialize pool configuration to XML
This commit is contained in:
parent
47e89d84b6
commit
c791cb1935
@ -36,8 +36,6 @@ __author__ = 'Invisible Things Lab'
|
|||||||
__license__ = 'GPLv2 or later'
|
__license__ = 'GPLv2 or later'
|
||||||
__version__ = 'R3'
|
__version__ = 'R3'
|
||||||
|
|
||||||
import ast
|
|
||||||
import atexit
|
|
||||||
import collections
|
import collections
|
||||||
import errno
|
import errno
|
||||||
import grp
|
import grp
|
||||||
@ -47,7 +45,6 @@ import os.path
|
|||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
import time
|
import time
|
||||||
import warnings
|
|
||||||
|
|
||||||
import __builtin__
|
import __builtin__
|
||||||
|
|
||||||
@ -1181,7 +1178,6 @@ class Qubes(PropertyHolder):
|
|||||||
default=True,
|
default=True,
|
||||||
doc='check for updates inside qubes')
|
doc='check for updates inside qubes')
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, store=None, load=True, **kwargs):
|
def __init__(self, store=None, load=True, **kwargs):
|
||||||
#: logger instance for logging global messages
|
#: logger instance for logging global messages
|
||||||
self.log = logging.getLogger('app')
|
self.log = logging.getLogger('app')
|
||||||
@ -1194,6 +1190,9 @@ class Qubes(PropertyHolder):
|
|||||||
#: collection of all available labels for VMs
|
#: collection of all available labels for VMs
|
||||||
self.labels = {}
|
self.labels = {}
|
||||||
|
|
||||||
|
#: collection of all available pool configurations
|
||||||
|
self.pool_configs = {}
|
||||||
|
|
||||||
#: Connection to VMM
|
#: Connection to VMM
|
||||||
self.vmm = VMMConnection()
|
self.vmm = VMMConnection()
|
||||||
|
|
||||||
@ -1235,7 +1234,7 @@ class Qubes(PropertyHolder):
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
try:
|
try:
|
||||||
fd = os.open(self._store, os.O_RDWR) # no O_CREAT
|
fd = os.open(self._store, os.O_RDWR) # no O_CREAT
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
if e.errno != errno.ENOENT:
|
if e.errno != errno.ENOENT:
|
||||||
raise
|
raise
|
||||||
@ -1256,11 +1255,17 @@ class Qubes(PropertyHolder):
|
|||||||
|
|
||||||
self.xml = lxml.etree.parse(fh)
|
self.xml = lxml.etree.parse(fh)
|
||||||
|
|
||||||
# stage 1: load labels
|
# stage 1: load labels and pools
|
||||||
for node in self.xml.xpath('./labels/label'):
|
for node in self.xml.xpath('./labels/label'):
|
||||||
label = Label.fromxml(node)
|
label = Label.fromxml(node)
|
||||||
self.labels[label.index] = label
|
self.labels[label.index] = label
|
||||||
|
|
||||||
|
for node in self.xml.xpath('./pools/pool'):
|
||||||
|
name = node.get('name')
|
||||||
|
config_data = node.attrib
|
||||||
|
del(config_data['name'])
|
||||||
|
self.pool_configs[name] = config_data
|
||||||
|
|
||||||
# stage 2: load VMs
|
# stage 2: load VMs
|
||||||
for node in self.xml.xpath('./domains/domain'):
|
for node in self.xml.xpath('./domains/domain'):
|
||||||
# pylint: disable=no-member
|
# pylint: disable=no-member
|
||||||
@ -1270,7 +1275,7 @@ class Qubes(PropertyHolder):
|
|||||||
vm.init_log()
|
vm.init_log()
|
||||||
self.domains.add(vm)
|
self.domains.add(vm)
|
||||||
|
|
||||||
if not 0 in self.domains:
|
if 0 not in self.domains:
|
||||||
self.domains.add(qubes.vm.adminvm.AdminVM(
|
self.domains.add(qubes.vm.adminvm.AdminVM(
|
||||||
self, None, qid=0, name='dom0'))
|
self, None, qid=0, name='dom0'))
|
||||||
|
|
||||||
@ -1310,11 +1315,11 @@ class Qubes(PropertyHolder):
|
|||||||
fh.close()
|
fh.close()
|
||||||
del fh
|
del fh
|
||||||
|
|
||||||
|
|
||||||
def __xml__(self):
|
def __xml__(self):
|
||||||
element = lxml.etree.Element('qubes')
|
element = lxml.etree.Element('qubes')
|
||||||
|
|
||||||
element.append(self.xml_labels())
|
element.append(self.xml_labels())
|
||||||
|
element.append(self.xml_pool_configs())
|
||||||
element.append(self.xml_properties())
|
element.append(self.xml_properties())
|
||||||
|
|
||||||
domains = lxml.etree.Element('domains')
|
domains = lxml.etree.Element('domains')
|
||||||
@ -1395,6 +1400,7 @@ class Qubes(PropertyHolder):
|
|||||||
7: Label(7, '0x75507b', 'purple'),
|
7: Label(7, '0x75507b', 'purple'),
|
||||||
8: Label(8, '0x000000', 'black'),
|
8: Label(8, '0x000000', 'black'),
|
||||||
}
|
}
|
||||||
|
self.pool_configs['default'] = qubes.config.defaults['pool_config']
|
||||||
self.domains.add(
|
self.domains.add(
|
||||||
qubes.vm.adminvm.AdminVM(self, None, qid=0, name='dom0'))
|
qubes.vm.adminvm.AdminVM(self, None, qid=0, name='dom0'))
|
||||||
self.save()
|
self.save()
|
||||||
@ -1413,6 +1419,14 @@ class Qubes(PropertyHolder):
|
|||||||
labels.append(label.__xml__())
|
labels.append(label.__xml__())
|
||||||
return labels
|
return labels
|
||||||
|
|
||||||
|
def xml_pool_configs(self):
|
||||||
|
""" Helper for converting pools config to xml """
|
||||||
|
pools = lxml.etree.Element('pools')
|
||||||
|
for config_data in self.pool_configs.values():
|
||||||
|
p = lxml.etree.Element('pool', **config_data)
|
||||||
|
pools.append(p)
|
||||||
|
|
||||||
|
return pools
|
||||||
|
|
||||||
def get_vm_class(self, clsname):
|
def get_vm_class(self, clsname):
|
||||||
'''Find the class for a domain.
|
'''Find the class for a domain.
|
||||||
|
@ -83,7 +83,7 @@ defaults = {
|
|||||||
'private_img_size': 2*1024*1024*1024,
|
'private_img_size': 2*1024*1024*1024,
|
||||||
'root_img_size': 10*1024*1024*1024,
|
'root_img_size': 10*1024*1024*1024,
|
||||||
|
|
||||||
'pool_config': {'dir_path': '/var/lib/qubes'},
|
'pool_config': {'dir_path': '/var/lib/qubes/', 'driver': 'xen'},
|
||||||
|
|
||||||
# how long (in sec) to wait for VMs to shutdown,
|
# how long (in sec) to wait for VMs to shutdown,
|
||||||
# before killing them (when used qvm-run with --wait option),
|
# before killing them (when used qvm-run with --wait option),
|
||||||
|
Loading…
Reference in New Issue
Block a user