From dd32206a3adca6e6dc18bf8aa13a926108f7280c Mon Sep 17 00:00:00 2001 From: David Garcia Date: Fri, 28 May 2021 16:21:51 +0200 Subject: [PATCH] Fix 1539: Add --skip-repo option for Helm If stablerepourl is not set, Helm will skip adding the stablerepo. Depends on: - https://osm.etsi.org/gerrit/#/c/osm/devops/+/10915 Change-Id: I11f10fdfba24ec274d463f12c07d7b0247b37068 Signed-off-by: David Garcia (cherry picked from commit 4395cfa6c7d0d80980c00d9f078440e0333fd826) --- n2vc/k8s_helm3_conn.py | 10 ++-------- n2vc/k8s_helm_base_conn.py | 18 +++++++++--------- n2vc/k8s_helm_conn.py | 24 +++++++++++++++--------- n2vc/tests/unit/test_k8s_helm3_conn.py | 8 ++++++-- 4 files changed, 32 insertions(+), 28 deletions(-) diff --git a/n2vc/k8s_helm3_conn.py b/n2vc/k8s_helm3_conn.py index 06e5788..404485f 100644 --- a/n2vc/k8s_helm3_conn.py +++ b/n2vc/k8s_helm3_conn.py @@ -42,7 +42,6 @@ class K8sHelm3Connector(K8sHelmBaseConnector): helm_command: str = "/usr/bin/helm3", log: object = None, on_update_db=None, - vca_config: dict = None, ): """ Initializes helm connector for helm v3 @@ -64,7 +63,6 @@ class K8sHelm3Connector(K8sHelmBaseConnector): kubectl_command=kubectl_command, helm_command=helm_command, on_update_db=on_update_db, - vca_config=vca_config, ) self.log.info("K8S Helm3 connector initialized") @@ -300,12 +298,8 @@ class K8sHelm3Connector(K8sHelmBaseConnector): # If default repo is not included add cluster_uuid = "{}:{}".format(namespace, cluster_id) repo_list = await self.repo_list(cluster_uuid) - for repo in repo_list: - self.log.debug("repo") - if repo["name"] == "stable": - self.log.debug("Default repo already present") - break - else: + stable_repo = [repo for repo in repo_list if repo["name"] == "stable"] + if not stable_repo and self._stable_repo_url: await self.repo_add(cluster_uuid, "stable", self._stable_repo_url) # Returns False as no software needs to be uninstalled diff --git a/n2vc/k8s_helm_base_conn.py b/n2vc/k8s_helm_base_conn.py index b3d7bda..4a43ee2 100644 --- a/n2vc/k8s_helm_base_conn.py +++ b/n2vc/k8s_helm_base_conn.py @@ -31,6 +31,7 @@ import os import yaml from uuid import uuid4 +from n2vc.config import EnvironConfig from n2vc.exceptions import K8sException from n2vc.k8s_conn import K8sConnector @@ -44,7 +45,6 @@ class K8sHelmBaseConnector(K8sConnector): """ service_account = "osm" - _STABLE_REPO_URL = "https://charts.helm.sh/stable" def __init__( self, @@ -54,7 +54,6 @@ class K8sHelmBaseConnector(K8sConnector): helm_command: str = "/usr/bin/helm", log: object = None, on_update_db=None, - vca_config: dict = None, ): """ @@ -71,6 +70,7 @@ class K8sHelmBaseConnector(K8sConnector): self.log.info("Initializing K8S Helm connector") + self.config = EnvironConfig() # random numbers for release name generation random.seed(time.time()) @@ -86,10 +86,9 @@ class K8sHelmBaseConnector(K8sConnector): self._check_file_exists(filename=helm_command, exception_if_not_exists=True) # obtain stable repo url from config or apply default - if not vca_config or not vca_config.get("stablerepourl"): - self._stable_repo_url = self._STABLE_REPO_URL - else: - self._stable_repo_url = vca_config.get("stablerepourl") + self._stable_repo_url = self.config.get("stablerepourl") + if self._stable_repo_url == "None": + self._stable_repo_url = None @staticmethod def _get_namespace_cluster_id(cluster_uuid: str) -> (str, str): @@ -1137,9 +1136,10 @@ class K8sHelmBaseConnector(K8sConnector): of dictionaries """ new_list = [] - for dictionary in input_list: - new_dict = dict((k.lower(), v) for k, v in dictionary.items()) - new_list.append(new_dict) + if input_list: + for dictionary in input_list: + new_dict = dict((k.lower(), v) for k, v in dictionary.items()) + new_list.append(new_dict) return new_list def _local_exec(self, command: str) -> (str, int): diff --git a/n2vc/k8s_helm_conn.py b/n2vc/k8s_helm_conn.py index 46a0e99..6bbc0fa 100644 --- a/n2vc/k8s_helm_conn.py +++ b/n2vc/k8s_helm_conn.py @@ -43,7 +43,6 @@ class K8sHelmConnector(K8sHelmBaseConnector): helm_command: str = "/usr/bin/helm", log: object = None, on_update_db=None, - vca_config: dict = None, ): """ Initializes helm connector for helm v2 @@ -65,15 +64,17 @@ class K8sHelmConnector(K8sHelmBaseConnector): kubectl_command=kubectl_command, helm_command=helm_command, on_update_db=on_update_db, - vca_config=vca_config, ) self.log.info("Initializing K8S Helm2 connector") # initialize helm client-only self.log.debug("Initializing helm client-only...") - command = "{} init --client-only --stable-repo-url {} ".format( - self._helm_command, self._stable_repo_url + command = "{} init --client-only {} ".format( + self._helm_command, + "--stable-repo-url {}".format(self._stable_repo_url) + if self._stable_repo_url + else "--skip-repos", ) try: asyncio.ensure_future( @@ -299,14 +300,16 @@ class K8sHelmConnector(K8sHelmBaseConnector): command = ( "{} --kubeconfig={} --tiller-namespace={} --home={} --service-account {} " - " --stable-repo-url {} init" + " {} init" ).format( self._helm_command, paths["kube_config"], namespace, paths["helm_dir"], self.service_account, - self._stable_repo_url, + "--stable-repo-url {}".format(self._stable_repo_url) + if self._stable_repo_url + else "--skip-repos", ) _, _rc = await self._local_async_exec( command=command, raise_exception_on_error=True, env=env @@ -321,13 +324,15 @@ class K8sHelmConnector(K8sHelmBaseConnector): self.log.info("Initializing helm in client: {}".format(cluster_id)) command = ( "{} --kubeconfig={} --tiller-namespace={} " - "--home={} init --client-only --stable-repo-url {} " + "--home={} init --client-only {} " ).format( self._helm_command, paths["kube_config"], namespace, paths["helm_dir"], - self._stable_repo_url, + "--stable-repo-url {}".format(self._stable_repo_url) + if self._stable_repo_url + else "--skip-repos", ) output, _rc = await self._local_async_exec( command=command, raise_exception_on_error=True, env=env @@ -342,7 +347,8 @@ class K8sHelmConnector(K8sHelmBaseConnector): if repo["name"] == "stable" and repo["url"] != self._stable_repo_url: self.log.debug("Add new stable repo url: {}") await self.repo_remove(cluster_uuid, "stable") - await self.repo_add(cluster_uuid, "stable", self._stable_repo_url) + if self._stable_repo_url: + await self.repo_add(cluster_uuid, "stable", self._stable_repo_url) break return n2vc_installed_sw diff --git a/n2vc/tests/unit/test_k8s_helm3_conn.py b/n2vc/tests/unit/test_k8s_helm3_conn.py index c175b7a..25749af 100644 --- a/n2vc/tests/unit/test_k8s_helm3_conn.py +++ b/n2vc/tests/unit/test_k8s_helm3_conn.py @@ -18,7 +18,7 @@ import asynctest import logging -from asynctest.mock import Mock +from asynctest.mock import Mock, patch from osm_common.dbmemory import DbMemory from osm_common.fslocal import FsLocal from n2vc.k8s_helm3_conn import K8sHelm3Connector @@ -31,7 +31,11 @@ class TestK8sHelm3Conn(asynctest.TestCase): logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) - async def setUp(self): + @patch("n2vc.k8s_helm_base_conn.EnvironConfig") + async def setUp(self, mock_env): + mock_env.return_value = { + "stablerepourl": "https://charts.helm.sh/stable" + } self.db = Mock(DbMemory()) self.fs = asynctest.Mock(FsLocal()) self.fs.path = "./tmp/" -- 2.17.1