From 55031ae8bc6eb581145fc92091bd689f145dd964 Mon Sep 17 00:00:00 2001 From: shylesh Date: Thu, 24 Aug 2023 09:14:39 +0100 Subject: [PATCH] Provide option for choosing specific upstream submariner based on tags (#8308) * Provide option for choosing specific upstream submariner based on tags * Handle subctl CLI based on versions * Handle submariner connectivity test failure exceptions Signed-off-by: Shylesh Kumar Mohan --- conf/ocsci/submariner_upstream.yaml | 2 ++ ocs_ci/deployment/acm.py | 37 ++++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/conf/ocsci/submariner_upstream.yaml b/conf/ocsci/submariner_upstream.yaml index af0371677ef..3547667df00 100644 --- a/conf/ocsci/submariner_upstream.yaml +++ b/conf/ocsci/submariner_upstream.yaml @@ -4,5 +4,7 @@ ENV_DATA: submariner_info_file: "broker-info.subm" # Timeout for submeriner cli prompts submariner_prompt_timeout: 5 + submariner_upstream_version_tag: "devel" + submariner_ignore_connectivity_test: True diff --git a/ocs_ci/deployment/acm.py b/ocs_ci/deployment/acm.py index d026ed97f9c..3268842de61 100644 --- a/ocs_ci/deployment/acm.py +++ b/ocs_ci/deployment/acm.py @@ -8,6 +8,8 @@ import shutil import requests +import semantic_version + from ocs_ci.framework import config from ocs_ci.ocs import constants from ocs_ci.ocs.exceptions import ( @@ -112,6 +114,10 @@ def download_binary(self): tempf.write(resp.content) # Actual submariner binary download + if config.ENV_DATA.get("submariner_upstream_version_tag"): + os.environ["VERSION"] = config.ENV_DATA.get( + "submariner_upstream_version_tag" + ) cmd = f"bash {tempf.name}" try: run_cmd(cmd) @@ -185,14 +191,39 @@ def submariner_configure_upstream(self): kubeconf_list = [] for i in self.dr_only_list: kubeconf_list.append(config.clusters[i].RUN["kubeconfig"]) - connct_check = f"verify {' '.join(kubeconf_list)} --only connectivity" + + connct_check = None + if config.ENV_DATA.get("submariner_upstream_version_tag") != "devel": + subctl_vers = self.get_subctl_version() + if subctl_vers.minor <= 15: + connct_check = f"verify {' '.join(kubeconf_list)} --only connectivity" + if not connct_check: + # New cmd format + connct_check = f"verify --kubeconfig {kubeconf_list[0]} --toconfig {kubeconf_list[1]} --only connectivity" + # Workaround for now, ignoring verify faliures # need to be fixed once pod security issue is fixed try: run_subctl_cmd(connct_check) except Exception: - logger.error("Submariner verification has issues") - raise + if not config.ENV_DATA["submariner_ignore_connectivity_test"]: + logger.error("Submariner verification has issues") + raise + else: + logger.warning("Submariner verification has issues but ignored for now") + + def get_subctl_version(self): + """ + Run 'subctl version ' command and return a Version object + + Returns: + vers (Version): semanctic version object + + """ + out = run_cmd("subctl version") + vstr = out.split(":")[1].rstrip().lstrip()[1:] + vers = semantic_version.Version(vstr) + return vers def get_primary_cluster_index(self): """