HyperV: ensure config drives are copied as well during resizes

During cold migration, vhd config drive images are not copied
over, on the wrong assumption that the instance is already
configured and does not need the config drive.

For this reason, migrating instances using vhd config drives
will fail, as there is a check ensuring that the config drive
is present, if required.

This change addresses the issue, removing the check that was
preventing the config drive from being copied.

Change-Id: I8cd42bed4515f4f75c92e595c4d8b847b16058dd
Closes-Bug: #1619602
(cherry picked from commit 2dd231cff1)
This commit is contained in:
Lucian Petrut 2016-09-02 13:39:29 +03:00 committed by Matt Riedemann
parent 59653c6f46
commit d39f4c8e90
2 changed files with 15 additions and 9 deletions

View File

@ -61,6 +61,11 @@ class MigrationOpsTestCase(test_base.HyperVBaseTestCase):
check_shared_storage.return_value = shared_storage
self._migrationops._pathutils.exists.return_value = True
fake_disk_files = [os.path.join(instance_path, disk_name)
for disk_name in
['root.vhd', 'configdrive.vhd', 'configdrive.iso',
'eph0.vhd', 'eph1.vhdx']]
expected_get_dir = [mock.call(mock.sentinel.instance_name),
mock.call(mock.sentinel.instance_name,
mock.sentinel.dest_path)]
@ -69,7 +74,7 @@ class MigrationOpsTestCase(test_base.HyperVBaseTestCase):
self._migrationops._migrate_disk_files(
instance_name=mock.sentinel.instance_name,
disk_files=[self._FAKE_DISK],
disk_files=fake_disk_files,
dest=mock.sentinel.dest_path)
self._migrationops._pathutils.exists.assert_called_once_with(
@ -94,8 +99,11 @@ class MigrationOpsTestCase(test_base.HyperVBaseTestCase):
self._migrationops._pathutils.get_instance_dir.assert_has_calls(
expected_get_dir)
self._migrationops._pathutils.copy.assert_called_once_with(
self._FAKE_DISK, fake_dest_path)
self._migrationops._pathutils.copy.assert_has_calls(
mock.call(fake_disk_file, fake_dest_path)
for fake_disk_file in fake_disk_files)
self.assertEqual(len(fake_disk_files),
self._migrationops._pathutils.copy.call_count)
self._migrationops._pathutils.move_folder_files.assert_has_calls(
expected_move_calls)

View File

@ -72,12 +72,10 @@ class MigrationOps(object):
self._pathutils.makedirs(dest_path)
for disk_file in disk_files:
# Skip the config drive as the instance is already configured
if os.path.basename(disk_file).lower() != 'configdrive.vhd':
LOG.debug('Copying disk "%(disk_file)s" to '
'"%(dest_path)s"',
{'disk_file': disk_file, 'dest_path': dest_path})
self._pathutils.copy(disk_file, dest_path)
LOG.debug('Copying disk "%(disk_file)s" to '
'"%(dest_path)s"',
{'disk_file': disk_file, 'dest_path': dest_path})
self._pathutils.copy(disk_file, dest_path)
self._pathutils.move_folder_files(instance_path, revert_path)