Fix bug 1400: Change repo stable for helm2 31/10131/5
authorlloretgalleg <illoret@indra.es>
Thu, 17 Dec 2020 12:42:11 +0000 (12:42 +0000)
committerlloretgalleg <illoret@indra.es>
Fri, 15 Jan 2021 11:04:00 +0000 (11:04 +0000)
Change-Id: Idc4c6454e539b0935d57b5b0cdcc0895b5d00895
Signed-off-by: lloretgalleg <illoret@indra.es>
n2vc/k8s_helm3_conn.py
n2vc/k8s_helm_base_conn.py
n2vc/k8s_helm_conn.py

index 5a8c41f..f79816d 100644 (file)
@@ -42,6 +42,7 @@ 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
@@ -61,7 +62,8 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
                                       fs=fs,
                                       kubectl_command=kubectl_command,
                                       helm_command=helm_command,
-                                      on_update_db=on_update_db)
+                                      on_update_db=on_update_db,
+                                      vca_config=vca_config)
 
         self.log.info("K8S Helm3 connector initialized")
 
@@ -287,7 +289,7 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
         else:
             await self.repo_add(cluster_uuid,
                                 "stable",
-                                "https://charts.helm.sh/stable")
+                                self._stable_repo_url)
 
         # Returns False as no software needs to be uninstalled
         return False
index 1aa95d2..af22ecc 100644 (file)
@@ -43,6 +43,7 @@ class K8sHelmBaseConnector(K8sConnector):
     ####################################################################################
     """
     service_account = "osm"
+    _STABLE_REPO_URL = "https://charts.helm.sh/stable"
 
     def __init__(
         self,
@@ -52,6 +53,7 @@ class K8sHelmBaseConnector(K8sConnector):
         helm_command: str = "/usr/bin/helm",
         log: object = None,
         on_update_db=None,
+        vca_config: dict = None,
     ):
         """
 
@@ -82,6 +84,12 @@ class K8sHelmBaseConnector(K8sConnector):
         self._helm_command = helm_command
         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")
+
     @staticmethod
     def _get_namespace_cluster_id(cluster_uuid: str) -> (str, str):
         """
index 76ca0b9..fdae32f 100644 (file)
@@ -43,6 +43,7 @@ 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
@@ -64,13 +65,15 @@ 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".format(self._helm_command)
+        command = "{} init --client-only --stable-repo-url {} ".format(
+            self._helm_command, self._stable_repo_url)
         try:
             asyncio.ensure_future(
                 self._local_async_exec(command=command, raise_exception_on_error=False)
@@ -261,13 +264,14 @@ class K8sHelmConnector(K8sHelmBaseConnector):
 
             command = (
                 "{} --kubeconfig={} --tiller-namespace={} --home={} --service-account {} "
-                "init"
+                " --stable-repo-url {} init"
             ).format(
                 self._helm_command,
                 paths["kube_config"],
                 namespace,
                 paths["helm_dir"],
                 self.service_account,
+                self._stable_repo_url
             )
             _, _rc = await self._local_async_exec(
                 command=command, raise_exception_on_error=True, env=env
@@ -282,12 +286,13 @@ class K8sHelmConnector(K8sHelmBaseConnector):
                 self.log.info("Initializing helm in client: {}".format(cluster_id))
                 command = (
                     "{} --kubeconfig={} --tiller-namespace={} "
-                    "--home={} init --client-only"
+                    "--home={} init --client-only --stable-repo-url {} "
                 ).format(
                     self._helm_command,
                     paths["kube_config"],
                     namespace,
                     paths["helm_dir"],
+                    self._stable_repo_url,
                 )
                 output, _rc = await self._local_async_exec(
                     command=command, raise_exception_on_error=True, env=env
@@ -295,6 +300,19 @@ class K8sHelmConnector(K8sHelmBaseConnector):
             else:
                 self.log.info("Helm client already initialized")
 
+        # remove old stable repo and add new one
+        cluster_uuid = "{}:{}".format(namespace, cluster_id)
+        repo_list = await self.repo_list(cluster_uuid)
+        for repo in repo_list:
+            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)
+                break
+
         return n2vc_installed_sw
 
     async def _uninstall_sw(self, cluster_id: str, namespace: str):