Skip to content

Commit

Permalink
Version details for all DR components
Browse files Browse the repository at this point in the history
Signed-off-by: oviner <[email protected]>
  • Loading branch information
OdedViner committed Jul 23, 2024
1 parent 47d4f8c commit 3106ab2
Show file tree
Hide file tree
Showing 7 changed files with 260 additions and 4 deletions.
27 changes: 27 additions & 0 deletions ocs_ci/framework/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,33 @@ def switch_to_cluster_by_cluster_type(self, cluster_type, num_of_cluster=0):
self.get_cluster_type_indices_list(cluster_type)[num_of_cluster]
)

class RunWithConfigContext(object):
def __init__(self, config_index):
self.original_config_index = config.cur_index
self.config_index = config_index

def __enter__(self):
config.switch_ctx(self.config_index)
return self

def __exit__(self, exc_type, exc_value, exc_traceback):
config.switch_ctx(self.original_config_index)

class RunWithAcmConfigContext(RunWithConfigContext):
def __init__(self):
from ocs_ci.ocs.utils import get_all_acm_indexes

acm_index = get_all_acm_indexes()[0]
super().__init__(acm_index)

class RunWithPrimaryConfigContext(RunWithConfigContext):
def __init__(self):
from ocs_ci.ocs.utils import get_primary_cluster_config

primary_config = get_primary_cluster_config()
primary_index = primary_config.MULTICLUSTER.get("multicluster_index")
super().__init__(primary_index)


config = MultiClusterConfig()

Expand Down
1 change: 1 addition & 0 deletions ocs_ci/ocs/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,7 @@
TEST_FILES_BUCKET = "ocsci-test-files"
ROOK_REPOSITORY = "https://github.com/rook/rook.git"
OPENSHIFT_STORAGE_NAMESPACE = "openshift-storage"
OPENSHIFT_NAMESPACE = "openshift"
OPENSHIFT_STORAGE_CLIENT_NAMESPACE = "openshift-storage-client"
OPENSHIFT_STORAGE_EXTENDED_NAMESPACE = "openshift-storage-extended"
OPENSHIFT_STORAGE_CLIENT_NAMESPACE = "openshift-storage-client"
Expand Down
46 changes: 45 additions & 1 deletion ocs_ci/ocs/resources/ocs.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,15 @@
from ocs_ci.ocs.exceptions import CSVNotFound
from ocs_ci.utility import templating, utils
from ocs_ci.utility.version import get_semantic_ocs_version_from_config, VERSION_4_9

from ocs_ci.utility.version import (
get_dr_hub_operator_version,
get_ocp_dr_cluster_operator_version,
get_odf_multicluster_orchestrator_version,
get_ocp_gitops_operator_version,
get_submariner_operator_version,
get_volsync_operator_version,
)
from ocs_ci.utility.utils import get_oadp_version, get_acm_version

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -205,6 +213,42 @@ def get_version_info(namespace=None):
csv_name = package_manifest.get_current_csv(channel)
csv_pre = CSV(resource_name=csv_name, namespace=namespace)
info = get_images(csv_pre.get())
from ocs_ci.ocs.utils import is_dr_scenario

if is_dr_scenario():
with config.RunWithAcmConfigContext():
acm_operator_version = get_acm_version()
if acm_operator_version:
info["acm_version"] = acm_operator_version
ocp_dr_hub_operator_version = get_dr_hub_operator_version()
if ocp_dr_hub_operator_version:
info["dr_hub_version"] = ocp_dr_hub_operator_version
odf_multicluster_orchestrator_version = (
get_odf_multicluster_orchestrator_version()
)
if odf_multicluster_orchestrator_version:
info[
"odf_multicluster_orchestrator_version"
] = odf_multicluster_orchestrator_version
gitops_operator_version = get_ocp_gitops_operator_version()
if gitops_operator_version:
info["gitops_version"] = gitops_operator_version
with config.RunWithPrimaryConfigContext():
oadp_operator_version = get_oadp_version()
if oadp_operator_version:
info["oadp_version"] = oadp_operator_version
ocp_dr_cluster_operator_version = get_ocp_dr_cluster_operator_version()
if ocp_dr_cluster_operator_version:
info["ocp_dr_cluster_version"] = ocp_dr_cluster_operator_version
gitops_operator_version = get_ocp_gitops_operator_version()
if gitops_operator_version:
info["gitops_version"] = gitops_operator_version
volsync_operator_version = get_volsync_operator_version()
if volsync_operator_version:
info["volsync_version"] = volsync_operator_version
submariner_operator_version = get_submariner_operator_version()
if submariner_operator_version:
info["submariner_version"] = submariner_operator_version
return info


Expand Down
11 changes: 11 additions & 0 deletions ocs_ci/ocs/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -1681,3 +1681,14 @@ def collect_pod_container_rpm_package(dir_name):
go_log_file_name = f"{package_log_dir_path}/{pod_obj.name}-{container_name}-go-version.log"
with open(go_log_file_name, "w") as f:
f.write(go_output)


def is_dr_scenario():
"""
Check if it is RDR or MDR setup
Returns:
bool: return True if it is rdr or mdr setup otherwise False
"""
return ocsci_config.MULTICLUSTER["multicluster_mode"] in ("metro-dr", "regional-dr")
6 changes: 3 additions & 3 deletions ocs_ci/utility/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4824,7 +4824,7 @@ def add_time_report_to_email(session, soup):
summary_tag.insert_after(time_div)


def get_oadp_version(namespace=constants.ACM_HUB_BACKUP_NAMESPACE):
def get_oadp_version(namespace=constants.OADP_NAMESPACE):
"""
Returns:
str: returns version string
Expand All @@ -4839,7 +4839,7 @@ def get_oadp_version(namespace=constants.ACM_HUB_BACKUP_NAMESPACE):
return csv["spec"]["version"]


def get_acm_version():
def get_acm_version(namespace=constants.ACM_HUB_NAMESPACE):
"""
Get ACM version from CSV
Expand All @@ -4850,7 +4850,7 @@ def get_acm_version():
from ocs_ci.ocs.resources.csv import get_csvs_start_with_prefix

csv_list = get_csvs_start_with_prefix(
"advanced-cluster-management", namespace=constants.ACM_HUB_NAMESPACE
"advanced-cluster-management", namespace=namespace
)
for csv in csv_list:
if "advanced-cluster-management" in csv["metadata"]["name"]:
Expand Down
119 changes: 119 additions & 0 deletions ocs_ci/utility/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from ocs_ci.framework import config
from ocs_ci.ocs import defaults
from ocs_ci.ocs.exceptions import WrongVersionExpression
from ocs_ci.ocs import constants


def get_semantic_version(
Expand Down Expand Up @@ -172,3 +173,121 @@ def get_previous_version(version, count=1):
new_minor = version.minor - count
previous_version = f"{version.major}.{new_minor}"
return previous_version


def get_dr_hub_operator_version(namespace=constants.OPENSHIFT_NAMESPACE):
"""
Get DR Hub Operator Version
Returns:
str: returns version string
"""
# Importing here to avoid circular dependency
from ocs_ci.ocs.resources.csv import get_csvs_start_with_prefix

csv_list = get_csvs_start_with_prefix(
constants.ACM_ODR_HUB_OPERATOR_RESOURCE, namespace=namespace
)
for csv in csv_list:
if constants.ACM_ODR_HUB_OPERATOR_RESOURCE in csv["metadata"]["name"]:
# extract version string
return csv["spec"]["version"]


def get_ocp_dr_cluster_operator_version(namespace=constants.OPENSHIFT_NAMESPACE):
"""
Get DR Hub Operator Version
Returns:
str: returns version string
"""
# Importing here to avoid circular dependency
from ocs_ci.ocs.resources.csv import get_csvs_start_with_prefix

csv_list = get_csvs_start_with_prefix("odr-cluster-operator", namespace=namespace)
for csv in csv_list:
if "odr-cluster-operator" in csv["metadata"]["name"]:
# extract version string
return csv["spec"]["version"]


def get_odf_multicluster_orchestrator_version(namespace=constants.ACM_HUB_NAMESPACE):
"""
Get ODF Multicluster Orchestrator Version
Returns:
str: returns version string
"""
# Importing here to avoid circular dependency
from ocs_ci.ocs.resources.csv import get_csvs_start_with_prefix

csv_list = get_csvs_start_with_prefix(
constants.ACM_ODF_MULTICLUSTER_ORCHESTRATOR_RESOURCE,
namespace=namespace,
)
for csv in csv_list:
if (
constants.ACM_ODF_MULTICLUSTER_ORCHESTRATOR_RESOURCE
in csv["metadata"]["name"]
):
# extract version string
return csv["spec"]["version"]


def get_ocp_gitops_operator_version(namespace=constants.OPENSHIFT_NAMESPACE):
"""
Get OCP Gitops Operator Version
Returns:
str: returns version string
"""
# Importing here to avoid circular dependency
from ocs_ci.ocs.resources.csv import get_csvs_start_with_prefix

csv_list = get_csvs_start_with_prefix(
"openshift-gitops-operator", namespace=namespace
)
for csv in csv_list:
if "openshift-gitops-operator" in csv["metadata"]["name"]:
# extract version string
return csv["spec"]["version"]


def get_submariner_operator_version(namespace=constants.SUBMARINER_OPERATOR_NAMESPACE):
"""
Get Submariner Operator Version
Returns:
str: returns version string
"""
# Importing here to avoid circular dependency
from ocs_ci.ocs.resources.csv import get_csvs_start_with_prefix

csv_list = get_csvs_start_with_prefix("submariner", namespace=namespace)
for csv in csv_list:
if "submariner" in csv["metadata"]["name"]:
# extract version string
return csv["spec"]["version"]


def get_volsync_operator_version(namespace=constants.SUBMARINER_OPERATOR_NAMESPACE):
"""
Get VolSync Operator Version
Returns:
str: returns version string
"""
# Importing here to avoid circular dependency
from ocs_ci.ocs.resources.csv import get_csvs_start_with_prefix

csv_list = get_csvs_start_with_prefix("volsync", namespace=namespace)
for csv in csv_list:
if "volsync" in csv["metadata"]["name"]:
# extract version string
return csv["spec"]["version"]
54 changes: 54 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
setup_ceph_toolbox,
collect_ocs_logs,
collect_pod_container_rpm_package,
is_dr_scenario,
)
from ocs_ci.ocs.resources.deployment import Deployment
from ocs_ci.ocs.resources.job import get_job_obj
Expand Down Expand Up @@ -146,6 +147,8 @@
skipif_ui_not_support,
run_cmd,
ceph_health_check_multi_storagecluster_external,
get_oadp_version,
get_acm_version,
)
from ocs_ci.helpers import helpers, dr_helpers
from ocs_ci.helpers.helpers import (
Expand All @@ -171,6 +174,14 @@
)
from ocs_ci.ocs.longevity import start_app_workload
from ocs_ci.utility.decorators import switch_to_default_cluster_index_at_last
from ocs_ci.utility.version import (
get_dr_hub_operator_version,
get_ocp_dr_cluster_operator_version,
get_odf_multicluster_orchestrator_version,
get_ocp_gitops_operator_version,
get_submariner_operator_version,
get_volsync_operator_version,
)

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -1592,6 +1603,49 @@ def additional_testsuite_properties(record_testsuite_property, pytestconfig):
# add markers as separated property
markers = ocsci_config.RUN["cli_params"].get("-m", "").replace(" ", "-")
record_testsuite_property("rp_markers", markers)
if is_dr_scenario():
with ocsci_config.RunWithAcmConfigContext():
acm_operator_version = get_acm_version()
if acm_operator_version:
record_testsuite_property("rp_acm_version", acm_operator_version)
ocp_dr_hub_operator_version = get_dr_hub_operator_version()
if ocp_dr_hub_operator_version:
record_testsuite_property(
"rp_dr_hub_version", ocp_dr_hub_operator_version
)
odf_multicluster_orchestrator_version = (
get_odf_multicluster_orchestrator_version()
)
if odf_multicluster_orchestrator_version:
record_testsuite_property(
"rp_odf_multicluster_orchestrator_version",
odf_multicluster_orchestrator_version,
)
gitops_operator_version = get_ocp_gitops_operator_version()
if gitops_operator_version:
record_testsuite_property("rp_gitops_version", gitops_operator_version)
with ocsci_config.RunWithPrimaryConfigContext():
oadp_operator_version = get_oadp_version()
if oadp_operator_version:
record_testsuite_property("rp_oadp_version", oadp_operator_version)
ocp_dr_cluster_operator_version = get_ocp_dr_cluster_operator_version()
if ocp_dr_cluster_operator_version:
record_testsuite_property(
"rp_ocp_dr_cluster_version", ocp_dr_cluster_operator_version
)
gitops_operator_version = get_ocp_gitops_operator_version()
if gitops_operator_version:
record_testsuite_property("rp_gitops_version", gitops_operator_version)
volsync_operator_version = get_volsync_operator_version()
if volsync_operator_version:
record_testsuite_property(
"rp_volsync_version", volsync_operator_version
)
submariner_operator_version = get_submariner_operator_version()
if submariner_operator_version:
record_testsuite_property(
"rp_submariner_version", submariner_operator_version
)


@pytest.fixture(scope="session")
Expand Down

0 comments on commit 3106ab2

Please sign in to comment.