Testcase for geo redundancy sub part

Description:
	- Implementing Geo redundancy steps for subcloud rehoming
	- Completed upto peer group association add in source so that subcloud that is to be rehomed can be seen in destination.
	- Further validations will be added in upcoming sprints as the next steps are implemented

Change-Id: I3f1ed1189c21e5a15de41e4ae6f4713f4e04b426
Signed-off-by: aabhinav <ayyapasetti.abhinav@windriver.com>
This commit is contained in:
aabhinav
2025-07-18 02:47:40 -04:00
parent 263c46edac
commit ab511ed620

View File

@@ -0,0 +1,129 @@
from pytest import mark
from config.configuration_manager import ConfigurationManager
from framework.logging.automation_logger import get_logger
from framework.ssh.ssh_connection import SSHConnection
from keywords.cloud_platform.dcmanager.dcmanager_peer_group_association_add_keywords import DcManagerPeerGroupAssociationAddKeywords
from keywords.cloud_platform.dcmanager.dcmanager_peer_group_association_list_keywords import DcManagerPeerGroupAssociationListKeywords
from keywords.cloud_platform.dcmanager.dcmanager_subcloud_list_keywords import DcManagerSubcloudListKeywords
from keywords.cloud_platform.dcmanager.dcmanager_subcloud_peer_group_add_keywords import DcManagerSubcloudPeerGroupAddKeywords
from keywords.cloud_platform.dcmanager.dcmanager_subcloud_peer_group_list_keywords import DcManagerSubcloudPeerGroupListKeywords
from keywords.cloud_platform.dcmanager.dcmanager_subcloud_peer_group_list_subclouds_keywords import DcManagerSubcloudPeerGroupListSubcloudsKeywords
from keywords.cloud_platform.dcmanager.dcmanager_subcloud_update_keywords import DcManagerSubcloudUpdateKeywords
from keywords.cloud_platform.dcmanager.dcmanager_system_peer_add_keywords import DcManagerSystemPeerAddKeywords
from keywords.cloud_platform.dcmanager.dcmanager_system_peer_list_keywords import DcManagerSystemPeerListKeywords
from keywords.cloud_platform.openstack.endpoint.objects.openstack_endpoint_list_object_filter import OpenStackEndpointListObjectFilter
from keywords.cloud_platform.openstack.endpoint.openstack_endpoint_list_keywords import OpenStackEndpointListKeywords
from keywords.cloud_platform.ssh.lab_connection_keywords import LabConnectionKeywords
from keywords.cloud_platform.system.host.system_host_route_keywords import SystemHostRouteKeywords
from keywords.cloud_platform.system.show.system_show_keywords import SystemShowKeywords
def configure_system_peer_site(origin_ssh_connection: SSHConnection, target_ssh_connection: SSHConnection) -> None:
"""Configures a system peer on the target site using details gathered from the origin site.
This function connects to the origin site via `origin_ssh_connection` to retrieve necessary
system information (such as UUID, identity endpoint URL, and gateway). It then uses
`target_ssh_connection` to configure the system peer on the target site.
Args:
origin_ssh_connection (SSHConnection): SSH connection to the origin site (the site being peered from).
target_ssh_connection (SSHConnection): SSH connection to the target site (the site where the peer is added).
"""
# get the endpoint url
# openstack endpoint list | grep identity | grep public | grep RegionOne
os_ep_list_fltr = OpenStackEndpointListObjectFilter().set_region("RegionOne").set_interface("public").set_service_type("identity")
os_ep_list = OpenStackEndpointListKeywords(origin_ssh_connection).endpoint_list().get_endpoints_list_objects_filtered(os_ep_list_fltr)
if not os_ep_list:
raise Exception("No endpoints found in the source site.")
manager_endpoint_url = os_ep_list[0].get_url()
peer_controller_gateway_address = SystemHostRouteKeywords(origin_ssh_connection).get_system_host_route_list("controller-0").get_gateway_address()
peer_uuid = SystemShowKeywords(origin_ssh_connection).system_show().get_system_show_object().get_uuid()
peer_name = f"{target_ssh_connection.get_name()}-{origin_ssh_connection.get_name()}-system-peer"
manager_password = ConfigurationManager.get_lab_config().get_admin_credentials().get_password()
DcManagerSystemPeerAddKeywords(target_ssh_connection).dcmanager_system_peer_add(peer_uuid, peer_name, manager_endpoint_url, peer_controller_gateway_address, manager_password)
def subcloud_update(controller_ssh: SSHConnection, subcloud_name: str) -> None:
"""Updates the specified subcloud on the source site using its bootstrap address and configuration files.
Args:
controller_ssh (SSHConnection): SSH connection to the site's controller.
subcloud_name (str): Name of the subcloud to update
"""
# Get the subcloud config
sc_config = ConfigurationManager.get_lab_config().get_subcloud(subcloud_name)
# Get the subcloud bootstrap address
boot_add = sc_config.get_first_controller().get_ip()
# Get the subcloud deployment assets
deployment_assets_config = ConfigurationManager.get_deployment_assets_config()
sc_assets = deployment_assets_config.get_subcloud_deployment_assets(subcloud_name)
bootstrap_file = sc_assets.get_bootstrap_file()
# Update the subcloud details for rehoming purpose.
# We need to import bootstrap_file first for remove
DcManagerSubcloudUpdateKeywords(controller_ssh).dcmanager_subcloud_update(subcloud_name, "bootstrap-values", bootstrap_file)
DcManagerSubcloudUpdateKeywords(controller_ssh).dcmanager_subcloud_update(subcloud_name, "bootstrap-address", boot_add)
@mark.p0
@mark.lab_has_subcloud
@mark.lab_has_secondary_system_controller
def test_geo_redundancy():
"""
Test to verify the geo-redundancy setup rehoming subcloud from one site to another
Assuming the Site A is the Source site from which subcloud will move,
and Site B is the Destination site where the subcloud will be moved.
"""
src_site_ssh_conn = LabConnectionKeywords().get_active_controller_ssh()
dest_site_ssh_conn = LabConnectionKeywords().get_secondary_active_controller_ssh()
# Assign site names to SSH connections
src_site_ssh_conn.set_name(ConfigurationManager.get_lab_config().get_lab_name())
dest_site_ssh_conn.set_name(ConfigurationManager.get_lab_config().get_secondary_system_controller_config().get_lab_name())
get_logger().log_test_case_step("Source site: Retrieve subcloud name for rehoming")
subcloud_name = DcManagerSubcloudListKeywords(src_site_ssh_conn).get_dcmanager_subcloud_list().get_healthy_subcloud_with_lowest_id().get_name()
get_logger().log_test_case_step("Source site: Update subcloud bootstrap values")
subcloud_update(src_site_ssh_conn, subcloud_name)
# get Site B Destination info and add system-peer in Site A source
get_logger().log_test_case_step("Source site: Add system-peer in Site A (source) using Site B (destination) details and list system peers")
configure_system_peer_site(dest_site_ssh_conn, src_site_ssh_conn)
DcManagerSystemPeerListKeywords(src_site_ssh_conn).get_dcmanager_system_peer_list()
# get Site A Destination info and add system-peer in Site B Destination
get_logger().log_test_case_step("Destination site: Add system-peer in Site B (destination) using Site A (source) details and list system peers")
configure_system_peer_site(src_site_ssh_conn, dest_site_ssh_conn)
DcManagerSystemPeerListKeywords(dest_site_ssh_conn).get_dcmanager_system_peer_list()
get_logger().log_test_case_step("Source site: Add subcloud peer group (derived from source site name) and list subcloud peer groups")
peer_group_name = f"{src_site_ssh_conn.get_name()}--subcloud-peer-group"
DcManagerSubcloudPeerGroupAddKeywords(src_site_ssh_conn).dcmanager_subcloud_peer_group_add(peer_group_name)
DcManagerSubcloudPeerGroupListKeywords(src_site_ssh_conn).get_dcmanager_subcloud_peer_group_list()
get_logger().log_test_case_step("Source site: Retrieve subcloud peer group ID and Update subcloud with peer group ID")
subcloud_peer_group_id = DcManagerSubcloudPeerGroupListKeywords(src_site_ssh_conn).get_dcmanager_subcloud_peer_group_list().get_latest_subcloud_peer_group_id()
DcManagerSubcloudUpdateKeywords(src_site_ssh_conn).dcmanager_subcloud_update(subcloud_name, "peer-group", subcloud_peer_group_id)
# Add peer group association using subcloud peer group ID, system peer ID, and peer group priority
get_logger().log_test_case_step("Source site: Retrieve system peer ID, add peer group association with priority 1, and list peer group associations")
system_peer_id = DcManagerSystemPeerListKeywords(src_site_ssh_conn).get_dcmanager_system_peer_list().get_latest_system_peer_id()
DcManagerPeerGroupAssociationAddKeywords(src_site_ssh_conn).dcmanager_peer_group_association_add(subcloud_peer_group_id, system_peer_id, 1)
DcManagerPeerGroupAssociationListKeywords(src_site_ssh_conn).get_dcmanager_peer_group_association_list()
get_logger().log_test_case_step("Destination site: List subcloud peer groups, peer group associations, and all subclouds")
DcManagerSubcloudPeerGroupListKeywords(dest_site_ssh_conn).get_dcmanager_subcloud_peer_group_list()
DcManagerPeerGroupAssociationListKeywords(dest_site_ssh_conn).get_dcmanager_peer_group_association_list()
DcManagerSubcloudListKeywords(dest_site_ssh_conn).get_dcmanager_subcloud_list_all()
get_logger().log_test_case_step("Destination site: Retrieve subcloud peer group ID and list associated subclouds")
subcloud_peer_group_id = DcManagerSubcloudPeerGroupListKeywords(dest_site_ssh_conn).get_dcmanager_subcloud_peer_group_list().get_latest_subcloud_peer_group_id()
DcManagerSubcloudPeerGroupListSubcloudsKeywords(dest_site_ssh_conn).get_dcmanager_subcloud_peer_group_list_subclouds(subcloud_peer_group_id)