migration: Updates the VM before VM disk checks

In the case of multiple CSVs scenario, disks are not migrated on
cold migration. Thus, pathutils relies on the VM's ConfigurationDataRoot
when determining its disk file locations, but the VM's
ConfigurationDataRoot is set after checking the disks, resulting in
a DiskNotFoundException.

This commit addresses this issue.

Change-Id: I589239c6ebcd3cf706bc188179a74c97bb831a0d
Closes-Bug: #1716886
This commit is contained in:
Claudiu Belu 2017-09-13 12:32:39 +03:00
parent e00240f5d7
commit 0c673d5c5c
2 changed files with 7 additions and 8 deletions

View File

@ -281,8 +281,10 @@ class MigrationOps(object):
block_device_info, resize_instance=False):
vm_gen = self._vmops.get_image_vm_generation(instance.uuid, image_meta)
self._import_vm(instance_dir)
self._volumeops.connect_volumes(block_device_info)
self._vmops.update_vm_resources(instance, vm_gen, image_meta,
instance_dir, resize_instance)
self._volumeops.connect_volumes(block_device_info)
self._update_disk_image_paths(instance, instance_dir)
self._check_and_update_disks(context, instance, vm_gen, image_meta,
block_device_info,
@ -290,9 +292,6 @@ class MigrationOps(object):
self._volumeops.fix_instance_volume_disk_paths(
instance.name, block_device_info)
self._vmops.update_vm_resources(instance, vm_gen, image_meta,
instance_dir, resize_instance)
self._migrationutils.realize_vm(instance.name)
self._vmops.configure_remotefx(instance, vm_gen, resize_instance)

View File

@ -362,6 +362,10 @@ class MigrationOpsTestCase(test_base.HyperVBaseTestCase):
get_image_vm_gen.assert_called_once_with(mock_instance.uuid,
mock.sentinel.image_meta)
mock_import_vm.assert_called_once_with(mock.sentinel.instance_dir)
self._migrationops._vmops.update_vm_resources.assert_called_once_with(
mock_instance, get_image_vm_gen.return_value,
mock.sentinel.image_meta, mock.sentinel.instance_dir,
mock.sentinel.resize_instance)
self._migrationops._volumeops.connect_volumes.assert_called_once_with(
mock.sentinel.block_device_info)
mock_update_disk_image_paths.assert_called_once_with(
@ -372,10 +376,6 @@ class MigrationOpsTestCase(test_base.HyperVBaseTestCase):
resize_instance=mock.sentinel.resize_instance)
self._volumeops.fix_instance_volume_disk_paths.assert_called_once_with(
mock_instance.name, mock.sentinel.block_device_info)
self._migrationops._vmops.update_vm_resources.assert_called_once_with(
mock_instance, get_image_vm_gen.return_value,
mock.sentinel.image_meta, mock.sentinel.instance_dir,
mock.sentinel.resize_instance)
self._migrationops._migrationutils.realize_vm.assert_called_once_with(
mock_instance.name)
self._migrationops._vmops.configure_remotefx.assert_called_once_with(