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
(cherry picked from commit 133271f250)
This commit is contained in:
Claudiu Belu 2017-02-09 01:07:08 +02:00
parent ddab37f8e6
commit 0795dc8818
2 changed files with 25 additions and 8 deletions

View File

@ -305,7 +305,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},
{})
@ -320,7 +319,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(
@ -328,7 +327,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)
@ -341,7 +339,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)