Merge "Rehome test case"

This commit is contained in:
Zuul
2025-04-28 14:30:04 +00:00
committed by Gerrit Code Review
7 changed files with 167 additions and 1 deletions

View File

@@ -35,5 +35,6 @@
"subclouds": {
"subcloud1": "config/lab/files/template_subcloud1.json5",
"subcloud2": "config/lab/files/template_subcloud2.json5"
}
},
"secondary_system_controller": "config/lab/files/secondary_system_controller.json5",
}

View File

@@ -0,0 +1,39 @@
{
"floating_ip": "10.2.3.125",
"lab_name": "MyDCLab",
"lab_type": "Standard",
"admin_credentials": {
"user_name": "fake_user",
"password": "fake_password"
},
"bm_password": "",
"use_jump_server": false,
"horizon_url": "https://10.2.3.125:8443/",
"lab_capabilities": [],
"nodes": {
"controller-0": {
"ip": "10.2.3.126",
"node_type": "Controller",
"node_capabilities": []
},
"controller-1": {
"ip": "10.2.3.127",
"node_type": "Controller",
"node_capabilities": []
},
"compute-0": {
"ip": "10.2.3.128",
"node_type": "Compute",
"node_capabilities": []
},
"compute-1": {
"ip": "10.2.3.129",
"node_type": "Compute",
"node_capabilities": []
}
},
"subclouds": {
"subcloud1": "config/lab/files/template_subcloud1.json5",
"subcloud2": "config/lab/files/template_subcloud2.json5"
}
}

View File

@@ -85,6 +85,12 @@ class LabConfig:
if "system_controller_name" in lab_dict:
self.system_controller_name = lab_dict["system_controller_name"]
self.secondary_system_controller = None
if "secondary_system_controller" in lab_dict:
secondary_system_controller = lab_dict["secondary_system_controller"]
secondary_lab_file = get_stx_resource_path(secondary_system_controller)
self.secondary_system_controller = LabConfig(secondary_lab_file)
self.lab_config_file = config
def get_floating_ip(self) -> str:
@@ -429,6 +435,24 @@ class LabConfig:
"""
self.system_controller_name = system_controller_name
def get_secondary_system_controller_config(self) -> object:
"""
Get the secondary system controller object.
Returns:
object: Secondary dc configuration.
"""
return self.secondary_system_controller
def get_secondary_system_controller_name(self) -> str:
"""
Gets the secondary controller host name
Returns:
str: Secondary lab name.
"""
return self.secondary_system_controller.get_lab_name()
def to_log_strings(self) -> List[str]:
"""
Convert lab configuration to a list of loggable strings.

View File

@@ -47,3 +47,23 @@ class DcManagerSubcloudAddKeywords(BaseKeyword):
# validate subcloud status until complete
dc_manager_sc_list_kw = DcManagerSubcloudListKeywords(self.ssh_connection)
dc_manager_sc_list_kw.validate_subcloud_status(subcloud_name, "complete")
def dcmanager_subcloud_add_migrate(self, subcloud_name: str, bootstrap_values: str, install_values: str):
"""
Runs 'dcmanager subcloud add --migrate' command.
Args:
subcloud_name (str): Subcloud name.
bootstrap_values (str): Bootstrap values file name.
install_values (str): Install values file name.
"""
lab_config = ConfigurationManager.get_lab_config()
subcloud_obj = lab_config.get_subcloud(subcloud_name)
subcloud_ip = subcloud_obj.get_floating_ip()
subcloud_psswr = subcloud_obj.get_admin_credentials().get_password()
cmd = source_openrc(f"dcmanager subcloud add --migrate --bootstrap-address {subcloud_ip} " f"--bootstrap-values {bootstrap_values} --install-values {install_values}" f" --sysadmin-password {subcloud_psswr} --bmc-password {subcloud_psswr}")
self.ssh_connection.send(cmd)
self.validate_success_return_code(self.ssh_connection)

View File

@@ -146,3 +146,29 @@ class LabConnectionKeywords(BaseKeyword):
)
return connection
def get_secondary_active_controller_ssh(self) -> SSHConnection:
"""Gets an SSH connection to the secondary active controller node.
Returns:
SSHConnection: the ssh for the secondary active controller
"""
lab_config = ConfigurationManager.get_lab_config()
secondary_lab_config = lab_config.get_secondary_system_controller_config()
if not secondary_lab_config:
raise ValueError(f"There is no {secondary_lab_config} defined in your config file.")
jump_host_config = None
if lab_config.is_use_jump_server():
jump_host_config = lab_config.get_jump_host_configuration()
connection = SSHConnectionManager.create_ssh_connection(
secondary_lab_config.get_floating_ip(),
secondary_lab_config.get_admin_credentials().get_user_name(),
secondary_lab_config.get_admin_credentials().get_password(),
ssh_port=secondary_lab_config.get_ssh_port(),
jump_host=jump_host_config,
)
return connection

View File

@@ -0,0 +1,55 @@
from pytest import mark
from config.configuration_manager import ConfigurationManager
from framework.logging.automation_logger import get_logger
from keywords.cloud_platform.dcmanager.dcmanager_subcloud_add_keywords import DcManagerSubcloudAddKeywords
from keywords.cloud_platform.dcmanager.dcmanager_subcloud_delete_keywords import DcManagerSubcloudDeleteKeywords
from keywords.cloud_platform.dcmanager.dcmanager_subcloud_list_keywords import DcManagerSubcloudListKeywords
from keywords.cloud_platform.dcmanager.dcmanager_subcloud_manager_keywords import DcManagerSubcloudManagerKeywords
from keywords.cloud_platform.ssh.lab_connection_keywords import LabConnectionKeywords
@mark.p2
@mark.lab_has_subcloud
@mark.lab_has_secondary_system_controller
def test_rehome_one_subcloud(request):
"""
Execute a subcloud rehome
Test Steps:
- Ensure both initial and target system controllers have the same date.
- Unmanage the subcloud to be rehomed.
- Shutdown both initial controller and subcloud
- run dcmanager subcloud migration command.
"""
deployment_assets_config = ConfigurationManager.get_deployment_assets_config()
origin_system_controller_ssh = LabConnectionKeywords().get_active_controller_ssh()
destination_system_controller_ssh = LabConnectionKeywords().get_secondary_active_controller_ssh()
# Gets the lowest subcloud (the subcloud with the lowest id).
dcmanager_subcloud_list_keywords = DcManagerSubcloudListKeywords(origin_system_controller_ssh)
lowest_subcloud = dcmanager_subcloud_list_keywords.get_dcmanager_subcloud_list().get_healthy_subcloud_with_lowest_id()
subcloud_name = lowest_subcloud.get_name()
subcloud_bootstrap_values = deployment_assets_config.get_subcloud_deployment_assets(subcloud_name).get_bootstrap_file()
subcloud_install_values = deployment_assets_config.get_subcloud_deployment_assets(subcloud_name).get_install_file()
get_logger().log_info(f"Running rehome command on {destination_system_controller_ssh}")
DcManagerSubcloudAddKeywords(destination_system_controller_ssh).dcmanager_subcloud_add_migrate(subcloud_name, bootstrap_values=subcloud_bootstrap_values, install_values=subcloud_install_values)
DcManagerSubcloudListKeywords(destination_system_controller_ssh).validate_subcloud_status(subcloud_name=subcloud_name, status="rehoming")
DcManagerSubcloudListKeywords(destination_system_controller_ssh).validate_subcloud_status(subcloud_name=subcloud_name, status="complete")
get_logger().log_info(f"Deleting subcloud from {origin_system_controller_ssh}")
DcManagerSubcloudManagerKeywords(origin_system_controller_ssh).get_dcmanager_subcloud_unmanage(subcloud_name=subcloud_name, timeout=30)
DcManagerSubcloudDeleteKeywords(origin_system_controller_ssh).dcmanager_subcloud_delete(subcloud_name=subcloud_name)
get_logger().log_info(f"Running rehome command on {origin_system_controller_ssh}")
DcManagerSubcloudAddKeywords(origin_system_controller_ssh).dcmanager_subcloud_add_migrate(subcloud_name, bootstrap_values=subcloud_bootstrap_values, install_values=subcloud_install_values)
dcmanager_subcloud_list_keywords.validate_subcloud_status(subcloud_name=subcloud_name, status="rehoming")
dcmanager_subcloud_list_keywords.validate_subcloud_status(subcloud_name=subcloud_name, status="complete")
get_logger().log_info(f"Deleting subcloud from {destination_system_controller_ssh}")
DcManagerSubcloudDeleteKeywords(destination_system_controller_ssh).dcmanager_subcloud_delete(subcloud_name=subcloud_name)

View File

@@ -32,6 +32,7 @@ markers=
lab_has_min_2_subclouds: mark tests that require at least 2 subcloud
lab_has_compute: mark tests that require at least one compute node
subcloud_lab_has_compute: mark tests that require at least one subcloud containing at least one compute node
lab_has_secondary_system_controller: mark tests that require a secondary system controller
#TODO: add 'lab_has_bmc_ipmi', 'lab_has_bmc_redfish', 'lab_has_bmc_dynamic', and 'lab_bmc_sensor'