From 1f07f9015b4dc88bbda03bde4f3d0dabdaa64341 Mon Sep 17 00:00:00 2001 From: Raphael Date: Thu, 4 Sep 2025 13:41:19 -0300 Subject: [PATCH] Support N-1 subcloud rehoming with N playbook This commit updates the rehoming procedure to execute the ansible playbook from the system's controller current version, stored in /usr/share. This way, N-1 subclouds from a N system controller will use the playbook from N release instead of the one from N-1. Test plan: 1. PASS: Deploy and manage a N-1 subcloud in a N system controller. 2. PASS: Verify the subcloud's kubernetes and software endpoints are out-of-sync. 3. PASS: Rehome the N-1 subcloud to another N system controller. 5. PASS: Manage the N-1 subcloud in the new system controller. 6. PASS: Verify the kubernetes, kube-rootca and software endpoints are out-of-sync in the rehomed subcloud. 7. PASS: Prestage the N-1 subcloud for sw-deploy to the N release. 8. PASS: Upgrade the N-1 subcloud. 9. PASS: Orchestrate the kubernetes upgrade for the subcloud. 10. PASS: Orchestrate the kube-rootca update for the subcloud. 11. PASS: Verify the subcloud becomes in-sync. 12. PASS: After rehoming the N-1 subcloud, locally apply a patch using software upload and sw-manager. 13. PASS: Rehome a N subcloud in a N system controller and verify it uses the correct playbook. Depends-On: https://review.opendev.org/c/starlingx/ansible-playbooks/+/959563 Closes-Bug: 2122331 Change-Id: I764c25386803982644ce05403810dedc3bb7ddcf Signed-off-by: Raphael --- .../dcmanager/manager/subcloud_manager.py | 16 +++++++++++----- .../tests/unit/manager/test_subcloud_manager.py | 14 ++++++++------ 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/distributedcloud/dcmanager/manager/subcloud_manager.py b/distributedcloud/dcmanager/manager/subcloud_manager.py index 3ded41b9c..57f9f30ba 100644 --- a/distributedcloud/dcmanager/manager/subcloud_manager.py +++ b/distributedcloud/dcmanager/manager/subcloud_manager.py @@ -241,8 +241,10 @@ class SubcloudManager(manager.Manager): secret_name = SubcloudManager._get_subcloud_cert_secret_name(subcloud_region) cert = { - "apiVersion": "%s/%s" - % (kubeoperator.CERT_MANAGER_GROUP, kubeoperator.CERT_MANAGER_VERSION), + "apiVersion": ( + "%s/%s" + % (kubeoperator.CERT_MANAGER_GROUP, kubeoperator.CERT_MANAGER_VERSION) + ), "kind": "Certificate", "metadata": {"namespace": CERT_NAMESPACE, "name": cert_name}, "spec": { @@ -582,9 +584,7 @@ class SubcloudManager(manager.Manager): rehome_command = [ "ansible-playbook", - utils.get_playbook_for_software_version( - ANSIBLE_SUBCLOUD_REHOME_PLAYBOOK, software_version - ), + ANSIBLE_SUBCLOUD_REHOME_PLAYBOOK, "-i", ansible_subcloud_inventory_file, "--limit", @@ -592,6 +592,12 @@ class SubcloudManager(manager.Manager): "--timeout", REHOME_PLAYBOOK_TIMEOUT, "-e", + ( + "install_release_version=%s" % software_version + if software_version + else SW_VERSION + ), + "-e", extra_vars, ] return rehome_command diff --git a/distributedcloud/dcmanager/tests/unit/manager/test_subcloud_manager.py b/distributedcloud/dcmanager/tests/unit/manager/test_subcloud_manager.py index d69495727..e05b7533a 100644 --- a/distributedcloud/dcmanager/tests/unit/manager/test_subcloud_manager.py +++ b/distributedcloud/dcmanager/tests/unit/manager/test_subcloud_manager.py @@ -3013,9 +3013,7 @@ class TestSubcloudCompose(BaseTestSubcloudManager): rehome_command, [ "ansible-playbook", - cutils.get_playbook_for_software_version( - subcloud_manager.ANSIBLE_SUBCLOUD_REHOME_PLAYBOOK, SW_VERSION - ), + subcloud_manager.ANSIBLE_SUBCLOUD_REHOME_PLAYBOOK, "-i", f"{ANS_PATH}/subcloud1_inventory.yml", "--limit", @@ -3023,6 +3021,8 @@ class TestSubcloudCompose(BaseTestSubcloudManager): "--timeout", subcloud_manager.REHOME_PLAYBOOK_TIMEOUT, "-e", + f"install_release_version={SW_VERSION}", + "-e", str("override_files_dir='%s' region_name=%s") % (ANS_PATH, subcloud_region), ], @@ -4332,9 +4332,11 @@ class TestSubcloudMigrate(BaseTestSubcloudManager): ) self.saved_payload = { "deploy_status": consts.DEPLOY_STATE_DONE, - "rehome_data": '{"saved_payload": {"system_mode": "simplex",\ - "name": "testsub", "bootstrap-address": "128.224.119.56",\ - "admin_password": "TGk2OW51eA=="}}', + "rehome_data": ( + '{"saved_payload": {"system_mode": "simplex",\ + "name": "testsub", "bootstrap-address": "128.224.119.56",\ + "admin_password": "TGk2OW51eA=="}}' + ), } @mock.patch.object(subcloud_manager, "db_api", side_effect=db_api)