vmutils: set all *DataRoot paths to the same value

In order to maintain consistency with create_vm, update_vm
should also set the *DataRoot paths to the same given value.

Furthermore, this will be required for planned VMs, in order to
prevent having instances running on different compute nodes and
different storages to have some of the *DataRoot paths pointing to
the old compute node.

Partial-Bug: #1663238

Change-Id: Ic9248f44de6ff097b8080a80fd3212eeef6712f6
This commit is contained in:
Claudiu Belu 2017-02-09 01:07:08 +02:00
parent bf89f0bab7
commit 133271f250
2 changed files with 25 additions and 8 deletions

View File

@ -304,7 +304,6 @@ class VMUtilsTestCase(test_base.OsWinBaseTestCase):
@ddt.data(
{'configuration_root_dir': mock.sentinel.configuration_root_dir},
{'snapshot_dir': mock.sentinel.snapshot_dir, 'is_planned_vm': True},
{'is_planned_vm': True},
{'host_shutdown_action': mock.sentinel.shutdown_action},
{})
@ -319,7 +318,7 @@ class VMUtilsTestCase(test_base.OsWinBaseTestCase):
mock_modify_virtual_system,
host_shutdown_action=None,
configuration_root_dir=None,
snapshot_dir=None, is_planned_vm=False):
is_planned_vm=False):
mock_vmsettings = mock_lookup_vm_check.return_value
virtual_system_type = mock_get_virtual_system_type.return_value
self._vmutils.update_vm(
@ -327,7 +326,6 @@ class VMUtilsTestCase(test_base.OsWinBaseTestCase):
mock.sentinel.memory_per_numa, mock.sentinel.vcpus_num,
mock.sentinel.vcpus_per_numa, mock.sentinel.limit_cpu_features,
mock.sentinel.dynamic_mem_ratio, configuration_root_dir,
snapshot_dir,
host_shutdown_action=host_shutdown_action,
is_planned_vm=is_planned_vm)
@ -340,7 +338,22 @@ class VMUtilsTestCase(test_base.OsWinBaseTestCase):
mock_set_vcpus.assert_called_once_with(
mock_vmsettings, mock.sentinel.vcpus_num,
mock.sentinel.vcpus_per_numa, mock.sentinel.limit_cpu_features)
if configuration_root_dir or snapshot_dir or host_shutdown_action:
if configuration_root_dir:
self.assertEqual(configuration_root_dir,
mock_vmsettings.ConfigurationDataRoot)
self.assertEqual(configuration_root_dir,
mock_vmsettings.LogDataRoot)
self.assertEqual(configuration_root_dir,
mock_vmsettings.SnapshotDataRoot)
self.assertEqual(configuration_root_dir,
mock_vmsettings.SuspendDataRoot)
self.assertEqual(configuration_root_dir,
mock_vmsettings.SwapFileDataRoot)
if host_shutdown_action:
self.assertEqual(host_shutdown_action,
mock_vmsettings.AutomaticShutdownAction)
if configuration_root_dir or host_shutdown_action:
mock_modify_virtual_system.assert_called_once_with(
mock_vmsettings)
else:

View File

@ -292,16 +292,20 @@ class VMUtils(baseutils.BaseUtilsVirt):
if host_shutdown_action:
vmsetting.AutomaticShutdownAction = host_shutdown_action
if configuration_root_dir:
# Created VMs must have their *DataRoot paths in the same location
# as the VM's path.
vmsetting.ConfigurationDataRoot = configuration_root_dir
if snapshot_dir:
vmsetting.SnapshotDataRoot = snapshot_dir
vmsetting.LogDataRoot = configuration_root_dir
vmsetting.SnapshotDataRoot = configuration_root_dir
vmsetting.SuspendDataRoot = configuration_root_dir
vmsetting.SwapFileDataRoot = configuration_root_dir
self._set_vm_memory(vmsetting, memory_mb, memory_per_numa_node,
dynamic_mem_ratio)
self._set_vm_vcpus(vmsetting, vcpus_num, vcpus_per_numa_node,
limit_cpu_features)
update_needed = (configuration_root_dir or snapshot_dir or
host_shutdown_action)
update_needed = configuration_root_dir or host_shutdown_action
if update_needed:
self._modify_virtual_system(vmsetting)