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:
@@ -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)
|
Reference in New Issue
Block a user