From 95208710c0ba4efb189554ea35c1b20edf044a97 Mon Sep 17 00:00:00 2001 From: Ghanshyam Mann Date: Mon, 30 Jun 2025 16:38:56 -0700 Subject: [PATCH] Move migration scenario tests to use project manager Nova new policy[depends-on] allow project manager to do migration if no host is specified. Modifying the scenario migration tests to (without specifying the host) to use the project manager. Depends-On: https://review.opendev.org/c/openstack/nova/+/953063 Depends-On: https://review.opendev.org/c/openstack/devstack/+/954167 Change-Id: I8d913893db3cdf667a53beff954eaf76bc7db683 Signed-off-by: Ghanshyam Mann --- .../test_network_advanced_server_ops.py | 33 +++++++++++++++---- tempest/scenario/test_shelve_instance.py | 14 ++++++-- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/tempest/scenario/test_network_advanced_server_ops.py b/tempest/scenario/test_network_advanced_server_ops.py index f4ee98dc62..d8ffa5433b 100644 --- a/tempest/scenario/test_network_advanced_server_ops.py +++ b/tempest/scenario/test_network_advanced_server_ops.py @@ -33,6 +33,8 @@ LOG = log.getLogger(__name__) class BaseTestNetworkAdvancedServerOps(manager.NetworkScenarioTest): """Base class for defining methods used in tests.""" + credentials = ['primary', 'admin', 'project_manager'] + @classmethod def skip_checks(cls): super(BaseTestNetworkAdvancedServerOps, cls).skip_checks() @@ -47,7 +49,7 @@ class BaseTestNetworkAdvancedServerOps(manager.NetworkScenarioTest): @classmethod def setup_clients(cls): super(BaseTestNetworkAdvancedServerOps, cls).setup_clients() - cls.admin_servers_client = cls.os_admin.servers_client + cls.mgr_server_client = cls.os_admin.servers_client cls.sec_group_rules_client = \ cls.os_primary.security_group_rules_client cls.sec_groups_client = cls.os_primary.security_groups_client @@ -159,7 +161,13 @@ class BaseTestNetworkAdvancedServerOps(manager.NetworkScenarioTest): self._wait_server_status_and_check_network_connectivity( server, keypair, floating_ip) - self.admin_servers_client.migrate_server( + if (not dest_host and CONF.enforce_scope.nova and 'manager' in + CONF.compute_feature_enabled.nova_policy_roles): + self.mgr_server_client = self.os_project_manager.servers_client + LOG.info("Using project manager for migrating server: %s, " + "project manager user id: %s", + server['id'], self.mgr_server_client.user_id) + self.mgr_server_client.migrate_server( server['id'], host=dest_host) waiters.wait_for_server_status(self.servers_client, server['id'], 'VERIFY_RESIZE') @@ -210,8 +218,13 @@ class BaseTestNetworkAdvancedServerOps(manager.NetworkScenarioTest): if dest_host: migration_kwargs['host'] = dest_host - - self.admin_servers_client.live_migrate_server( + elif (CONF.enforce_scope.nova and 'manager' in + CONF.compute_feature_enabled.nova_policy_roles): + self.mgr_server_client = self.os_project_manager.servers_client + LOG.info("Using project manager for migrating server: %s, " + "project manager user id: %s", + server['id'], self.mgr_server_client.user_id) + self.mgr_server_client.live_migrate_server( server['id'], **migration_kwargs) waiters.wait_for_server_status(self.servers_client, server['id'], 'ACTIVE') @@ -260,7 +273,13 @@ class BaseTestNetworkAdvancedServerOps(manager.NetworkScenarioTest): self._wait_server_status_and_check_network_connectivity( server, keypair, floating_ip) - self.admin_servers_client.migrate_server( + if (not dest_host and CONF.enforce_scope.nova and 'manager' in + CONF.compute_feature_enabled.nova_policy_roles): + self.mgr_server_client = self.os_project_manager.servers_client + LOG.info("Using project manager for migrating server: %s, " + "project manager user id: %s", + server['id'], self.mgr_server_client.user_id) + self.mgr_server_client.migrate_server( server['id'], host=dest_host) waiters.wait_for_server_status(self.servers_client, server['id'], 'VERIFY_RESIZE') @@ -415,7 +434,7 @@ class TestNetworkAdvancedServerMigrationWithHost( - Cold Migration with revert - Live Migration """ - credentials = ['primary', 'admin'] + credentials = ['primary', 'admin', 'project_manager'] compute_min_microversion = "2.74" @classmethod @@ -441,7 +460,7 @@ class TestNetworkAdvancedServerMigrationWithHost( cls.keypairs_client = cls.os_admin.keypairs_client cls.floating_ips_client = cls.os_admin.floating_ips_client cls.servers_client = cls.os_admin.servers_client - cls.admin_servers_client = cls.os_admin.servers_client + cls.mgr_server_client = cls.os_admin.servers_client @decorators.idempotent_id('06e23934-79ae-11ee-b962-0242ac120002') @testtools.skipUnless(CONF.compute_feature_enabled.resize, diff --git a/tempest/scenario/test_shelve_instance.py b/tempest/scenario/test_shelve_instance.py index 204471e367..d53e918763 100644 --- a/tempest/scenario/test_shelve_instance.py +++ b/tempest/scenario/test_shelve_instance.py @@ -13,6 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. +from oslo_log import log as logging import testtools from tempest.common import compute @@ -23,6 +24,7 @@ from tempest.lib import decorators from tempest.scenario import manager CONF = config.CONF +LOG = logging.getLogger(__name__) class TestShelveInstance(manager.ScenarioTest): @@ -38,12 +40,18 @@ class TestShelveInstance(manager.ScenarioTest): """ - credentials = ['primary', 'admin'] + credentials = ['primary', 'admin', 'project_manager'] @classmethod def setup_clients(cls): super(TestShelveInstance, cls).setup_clients() - cls.admin_servers_client = cls.os_admin.servers_client + cls.mgr_servers_client = cls.os_admin.servers_client + if (CONF.enforce_scope.nova and 'manager' in + CONF.compute_feature_enabled.nova_policy_roles): + cls.mgr_servers_client = cls.os_project_manager.servers_client + LOG.info("Using project manager for migrating server, " + "project manager user id: %s", + cls.mgr_servers_client.user_id) @classmethod def skip_checks(cls): @@ -62,7 +70,7 @@ class TestShelveInstance(manager.ScenarioTest): def _cold_migrate_server(self, server): src_host = self.get_host_for_server(server['id']) - self.admin_servers_client.migrate_server(server['id']) + self.mgr_servers_client.migrate_server(server['id']) waiters.wait_for_server_status(self.servers_client, server['id'], 'VERIFY_RESIZE') self.servers_client.confirm_resize_server(server['id'])