vm/dispvm: place all volumes in the same pool as DispVM's template
Make all volume's pool controlled by DisposableVM Template. This specifically makes DispVM's volatile volume to be placed directly in the same pool as its template. Fixes QubesOS/qubes-issues#5933
This commit is contained in:
parent
410a0728cc
commit
8b760451a6
@ -168,3 +168,28 @@ class TC_00_DispVM(qubes.tests.QubesTestCase):
|
|||||||
self.app.add_new_vm(qubes.vm.dispvm.DispVM,
|
self.app.add_new_vm(qubes.vm.dispvm.DispVM,
|
||||||
name='test-dispvm', template=self.appvm)
|
name='test-dispvm', template=self.appvm)
|
||||||
self.assertFalse(mock_domains.get_new_unused_dispid.called)
|
self.assertFalse(mock_domains.get_new_unused_dispid.called)
|
||||||
|
|
||||||
|
@mock.patch('os.symlink')
|
||||||
|
@mock.patch('os.makedirs')
|
||||||
|
def test_020_copy_storage_pool(self, mock_makedirs, mock_symlink):
|
||||||
|
self.app.pools['alternative'] = qubes.tests.vm.appvm.TestPool(name='alternative')
|
||||||
|
self.appvm.template_for_dispvms = True
|
||||||
|
self.loop.run_until_complete(self.template.create_on_disk())
|
||||||
|
self.loop.run_until_complete(self.appvm.create_on_disk(pool='alternative'))
|
||||||
|
orig_getitem = self.app.domains.__getitem__
|
||||||
|
with mock.patch.object(self.app, 'domains', wraps=self.app.domains) \
|
||||||
|
as mock_domains:
|
||||||
|
mock_domains.configure_mock(**{
|
||||||
|
'get_new_unused_dispid': mock.Mock(return_value=42),
|
||||||
|
'__getitem__.side_effect': orig_getitem
|
||||||
|
})
|
||||||
|
dispvm = self.app.add_new_vm(qubes.vm.dispvm.DispVM,
|
||||||
|
name='test-dispvm', template=self.appvm)
|
||||||
|
self.loop.run_until_complete(dispvm.create_on_disk())
|
||||||
|
self.assertEqual(dispvm.template, self.appvm)
|
||||||
|
self.assertEqual(dispvm.volumes['private'].pool,
|
||||||
|
self.appvm.volumes['private'].pool)
|
||||||
|
self.assertEqual(dispvm.volumes['root'].pool,
|
||||||
|
self.appvm.volumes['root'].pool)
|
||||||
|
self.assertEqual(dispvm.volumes['volatile'].pool,
|
||||||
|
self.appvm.volumes['volatile'].pool)
|
||||||
|
@ -109,6 +109,12 @@ class DispVM(qubes.vm.qubesvm.QubesVM):
|
|||||||
self.volume_config[name] = config.copy()
|
self.volume_config[name] = config.copy()
|
||||||
if 'vid' in self.volume_config[name]:
|
if 'vid' in self.volume_config[name]:
|
||||||
del self.volume_config[name]['vid']
|
del self.volume_config[name]['vid']
|
||||||
|
# copy pool setting from base AppVM; root and private would be
|
||||||
|
# in the same pool anyway (because of snap_on_start),
|
||||||
|
# but not volatile, which could be surprising
|
||||||
|
elif 'pool' not in self.volume_config[name] \
|
||||||
|
and 'pool' in config:
|
||||||
|
self.volume_config[name]['pool'] = config['pool']
|
||||||
|
|
||||||
super(DispVM, self).__init__(app, xml, *args, **kwargs)
|
super(DispVM, self).__init__(app, xml, *args, **kwargs)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user