Merge "Do not specify a host for live-migration for non homogeneous nodes"
diff --git a/releasenotes/notes/add-can-migrate-between-any-hosts-config-option-x8ah4f9737a28e9b.yaml b/releasenotes/notes/add-can-migrate-between-any-hosts-config-option-x8ah4f9737a28e9b.yaml
new file mode 100644
index 0000000..26fe01a
--- /dev/null
+++ b/releasenotes/notes/add-can-migrate-between-any-hosts-config-option-x8ah4f9737a28e9b.yaml
@@ -0,0 +1,9 @@
+---
+features:
+ - Add a new config option can_migrate_between_any_hosts in the
+ compute-feature-enabled section, which can be set to False for environment
+ with non homogeneous compute nodes, so that it can select a destination
+ host for migrating automatically, otherwise the testcase may fail
+ unexpectedly. e.g., if source host is with CPU "E5-2699 v4" and the
+ selected target host is with CPU "E5-2670 v3", the live-migration will
+ fail because of the downgrade issue.
diff --git a/tempest/api/compute/admin/test_live_migration.py b/tempest/api/compute/admin/test_live_migration.py
index 064949f..941315e 100644
--- a/tempest/api/compute/admin/test_live_migration.py
+++ b/tempest/api/compute/admin/test_live_migration.py
@@ -71,6 +71,10 @@
def _live_migrate(self, server_id, target_host, state,
volume_backed=False):
+ # If target_host is None, check whether source host is different with
+ # the new host after migration.
+ if target_host is None:
+ source_host = self.get_host_for_server(server_id)
self._migrate_server_to(server_id, target_host, volume_backed)
waiters.wait_for_server_status(self.servers_client, server_id, state)
migration_list = (self.admin_migration_client.list_migrations()
@@ -82,8 +86,12 @@
if (live_migration['instance_uuid'] == server_id):
msg += "\n%s" % live_migration
msg += "]"
- self.assertEqual(target_host, self.get_host_for_server(server_id),
- msg)
+ if target_host is None:
+ self.assertNotEqual(source_host,
+ self.get_host_for_server(server_id), msg)
+ else:
+ self.assertEqual(target_host, self.get_host_for_server(server_id),
+ msg)
class LiveMigrationTest(LiveMigrationTestBase):
@@ -105,7 +113,11 @@
server_id = self.create_test_server(wait_until="ACTIVE",
volume_backed=volume_backed)['id']
source_host = self.get_host_for_server(server_id)
- destination_host = self.get_host_other_than(server_id)
+ if not CONF.compute_feature_enabled.can_migrate_between_any_hosts:
+ # not to specify a host so that the scheduler will pick one
+ destination_host = None
+ else:
+ destination_host = self.get_host_other_than(server_id)
if state == 'PAUSED':
self.admin_servers_client.pause_server(server_id)
@@ -161,7 +173,11 @@
"""Test live migrating a server with volume attached"""
server = self.create_test_server(wait_until="ACTIVE")
server_id = server['id']
- target_host = self.get_host_other_than(server_id)
+ if not CONF.compute_feature_enabled.can_migrate_between_any_hosts:
+ # not to specify a host so that the scheduler will pick one
+ target_host = None
+ else:
+ target_host = self.get_host_other_than(server_id)
volume = self.create_volume()
diff --git a/tempest/config.py b/tempest/config.py
index eca2023..989b8ef 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -481,6 +481,12 @@
'MIN_LIBVIRT_VERSION is >= 1.2.17 on all '
'branches from stable/rocky and will be '
'removed in a future release.'),
+ cfg.BoolOpt('can_migrate_between_any_hosts',
+ default=True,
+ help="Does the test environment support migrating between "
+ "any hosts? In environments with non-homogeneous compute "
+ "nodes you can set this to False so that it will select "
+ "destination host for migrating automatically"),
cfg.BoolOpt('vnc_console',
default=False,
help='Enable VNC console. This configuration value should '