Merge remote-tracking branch 'qubesos/pr/180'
* qubesos/pr/180: vm/qubesvm: default to PVH unless PCI devices are assigned vm/qubesvm: expose 'start_time' property over Admin API vm/qubesvm: revert backup_timestamp to '%s' format doc: link qvm-device man page for qvm-block, qvm-pci, qvm-usb
This commit is contained in:
commit
f1a5ca64fd
4
Makefile
4
Makefile
@ -152,6 +152,10 @@ endif
|
||||
ln -s qvm-device $(DESTDIR)/usr/bin/qvm-block
|
||||
ln -s qvm-device $(DESTDIR)/usr/bin/qvm-pci
|
||||
ln -s qvm-device $(DESTDIR)/usr/bin/qvm-usb
|
||||
install -d $(DESTDIR)/usr/share/man/man1
|
||||
ln -s qvm-device.1.gz $(DESTDIR)/usr/share/man/man1/qvm-block.1.gz
|
||||
ln -s qvm-device.1.gz $(DESTDIR)/usr/share/man/man1/qvm-pci.1.gz
|
||||
ln -s qvm-device.1.gz $(DESTDIR)/usr/share/man/man1/qvm-usb.1.gz
|
||||
# $(MAKE) install -C tests
|
||||
$(MAKE) install -C relaxng
|
||||
mkdir -p $(DESTDIR)/etc/qubes
|
||||
|
@ -819,7 +819,8 @@ class Backup(object):
|
||||
# Save date of last backup, only when backup succeeded
|
||||
for qid, vm_info in files_to_backup.items():
|
||||
if vm_info.vm:
|
||||
vm_info.vm.backup_timestamp = datetime.datetime.now()
|
||||
vm_info.vm.backup_timestamp = \
|
||||
int(datetime.datetime.now().strftime('%s'))
|
||||
|
||||
self.app.save()
|
||||
|
||||
|
@ -513,12 +513,12 @@ class TC_90_QubesVM(QubesVMTestsMixin, qubes.tests.QubesTestCase):
|
||||
timestamp = datetime.datetime(2016, 1, 1, 12, 14, 2)
|
||||
timestamp_str = timestamp.strftime('%s')
|
||||
self.assertPropertyDefaultValue(vm, 'backup_timestamp', None)
|
||||
self.assertPropertyValue(vm, 'backup_timestamp', timestamp,
|
||||
timestamp, timestamp_str)
|
||||
self.assertPropertyValue(vm, 'backup_timestamp', int(timestamp_str),
|
||||
int(timestamp_str), timestamp_str)
|
||||
del vm.backup_timestamp
|
||||
self.assertPropertyDefaultValue(vm, 'backup_timestamp', None)
|
||||
self.assertPropertyValue(vm, 'backup_timestamp', timestamp_str,
|
||||
timestamp)
|
||||
int(timestamp_str))
|
||||
|
||||
def test_401_backup_timestamp_invalid(self):
|
||||
vm = self.get_vm()
|
||||
|
@ -24,7 +24,6 @@ from __future__ import absolute_import
|
||||
|
||||
import asyncio
|
||||
import base64
|
||||
import datetime
|
||||
import errno
|
||||
import grp
|
||||
import os
|
||||
@ -100,6 +99,11 @@ def _setter_virt_mode(self, prop, value):
|
||||
"pvh mode can't be set if pci devices are attached")
|
||||
return value
|
||||
|
||||
def _default_virt_mode(self):
|
||||
if self.devices['pci'].persistent():
|
||||
return 'hvm'
|
||||
return 'pvh'
|
||||
|
||||
|
||||
class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM):
|
||||
'''Base functionality of Qubes VM shared between all VMs.
|
||||
@ -386,9 +390,9 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM):
|
||||
|
||||
virt_mode = qubes.property('virt_mode',
|
||||
type=str, setter=_setter_virt_mode,
|
||||
default='hvm',
|
||||
default=_default_virt_mode,
|
||||
doc='''Virtualisation mode: full virtualisation ("hvm"),
|
||||
or paravirtualisation ("pv")''')
|
||||
or paravirtualisation ("pv"), or hybrid ("pvh")''')
|
||||
|
||||
installed_by_rpm = qubes.property('installed_by_rpm',
|
||||
type=bool, setter=qubes.property.bool,
|
||||
@ -476,13 +480,9 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM):
|
||||
type=bool, setter=qubes.property.bool,
|
||||
doc='If this domain is to be included in default backup.')
|
||||
|
||||
# format got changed from %s to str(datetime.datetime)
|
||||
backup_timestamp = qubes.property('backup_timestamp', default=None,
|
||||
setter=(lambda self, prop, value:
|
||||
value if isinstance(value, datetime.datetime) else
|
||||
datetime.datetime.fromtimestamp(int(value))),
|
||||
saver=(lambda self, prop, value: value.strftime('%s')),
|
||||
doc='FIXME')
|
||||
type=int,
|
||||
doc='Time of last backup of the qube, in seconds since unix epoch')
|
||||
|
||||
default_dispvm = qubes.VMProperty('default_dispvm',
|
||||
load_stage=4,
|
||||
@ -1766,10 +1766,11 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM):
|
||||
|
||||
# miscellanous
|
||||
|
||||
def get_start_time(self):
|
||||
@qubes.stateless_property
|
||||
def start_time(self):
|
||||
'''Tell when machine was started.
|
||||
|
||||
:rtype: datetime.datetime
|
||||
:rtype: float or None
|
||||
'''
|
||||
if not self.is_running():
|
||||
return None
|
||||
@ -1778,7 +1779,7 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM):
|
||||
start_time = self.app.vmm.xs.read('',
|
||||
'/vm/{}/start_time'.format(self.uuid))
|
||||
if start_time != '':
|
||||
return datetime.datetime.fromtimestamp(float(start_time))
|
||||
return float(start_time)
|
||||
|
||||
return None
|
||||
|
||||
|
@ -216,6 +216,7 @@ fi
|
||||
|
||||
%{_mandir}/man1/qrexec-policy-graph.1*
|
||||
%{_mandir}/man1/qubes*.1*
|
||||
%{_mandir}/man1/qvm-*.1*
|
||||
|
||||
%dir %{python3_sitelib}/qubes-*.egg-info
|
||||
%{python3_sitelib}/qubes-*.egg-info/*
|
||||
|
Loading…
Reference in New Issue
Block a user