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 <david.garcia@canonical.com>
(cherry picked from commit 4395cfa6c7d0d80980c00d9f078440e0333fd826)
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 @@
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 @@
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 @@
# 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 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 @@
"""
service_account = "osm"
- _STABLE_REPO_URL = "https://charts.helm.sh/stable"
def __init__(
self,
@@ -54,7 +54,6 @@
helm_command: str = "/usr/bin/helm",
log: object = None,
on_update_db=None,
- vca_config: dict = None,
):
"""
@@ -71,6 +70,7 @@
self.log.info("Initializing K8S Helm connector")
+ self.config = EnvironConfig()
# random numbers for release name generation
random.seed(time.time())
@@ -86,10 +86,9 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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/"