Minor fix in generate_kdu_instance_name
[osm/N2VC.git] / n2vc / k8s_helm_base_conn.py
index 842bbe3..a79f038 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):
         """
@@ -279,10 +287,13 @@ class K8sHelmBaseConnector(K8sConnector):
 
         return True
 
-    async def install(
+    async def _install_impl(
             self,
-            cluster_uuid: str,
+            cluster_id: str,
             kdu_model: str,
+            paths: dict,
+            env: dict,
+            kdu_instance: str,
             atomic: bool = True,
             timeout: float = 300,
             params: dict = None,
@@ -290,17 +301,6 @@ class K8sHelmBaseConnector(K8sConnector):
             kdu_name: str = None,
             namespace: str = None,
     ):
-        _, cluster_id = self._get_namespace_cluster_id(cluster_uuid)
-        self.log.debug("installing {} in cluster {}".format(kdu_model, cluster_id))
-
-        # sync local dir
-        self.fs.sync(from_path=cluster_id)
-
-        # init env, paths
-        paths, env = self._init_paths_env(
-            cluster_name=cluster_id, create_if_not_exist=True
-        )
-
         # params to str
         params_str, file_to_delete = self._params_to_file_option(
             cluster_id=cluster_id, params=params
@@ -314,23 +314,6 @@ class K8sHelmBaseConnector(K8sConnector):
                 version = str(parts[1])
                 kdu_model = parts[0]
 
-        # generate a name for the release. Then, check if already exists
-        kdu_instance = None
-        while kdu_instance is None:
-            kdu_instance = self._generate_release_name(kdu_model)
-            try:
-                result = await self._status_kdu(
-                    cluster_id=cluster_id,
-                    kdu_instance=kdu_instance,
-                    namespace=namespace,
-                    show_error_log=False,
-                )
-                if result is not None:
-                    # instance already exists: generate a new one
-                    kdu_instance = None
-            except K8sException:
-                pass
-
         command = self._get_install_command(kdu_model, kdu_instance, namespace,
                                             params_str, version, atomic, timeout)
 
@@ -390,12 +373,6 @@ class K8sHelmBaseConnector(K8sConnector):
             self.log.error(msg)
             raise K8sException(msg)
 
-        # sync fs
-        self.fs.reverse_sync(from_path=cluster_id)
-
-        self.log.debug("Returning kdu_instance {}".format(kdu_instance))
-        return kdu_instance
-
     async def upgrade(
         self,
         cluster_uuid: str,
@@ -840,7 +817,7 @@ class K8sHelmBaseConnector(K8sConnector):
 
                         # add repo
                         self.log.debug("add repo {}".format(db_repo["name"]))
-                        await  self.repo_add(cluster_uuid, db_repo["name"], db_repo["url"])
+                        await self.repo_add(cluster_uuid, db_repo["name"], db_repo["url"])
                         added_repo_dict[repo_id] = db_repo["name"]
                 except Exception as e:
                     raise K8sException(
@@ -872,18 +849,6 @@ class K8sHelmBaseConnector(K8sConnector):
             self.log.error("Error synchronizing repos: {}".format(e))
             raise Exception("Error synchronizing repos: {}".format(e))
 
-    def _get_helm_chart_repos_ids(self, cluster_uuid) -> list:
-        repo_ids = []
-        cluster_filter = {"_admin.helm-chart.id": cluster_uuid}
-        cluster = self.db.get_one("k8sclusters", cluster_filter)
-        if cluster:
-            repo_ids = cluster.get("_admin").get("helm_chart_repos") or []
-            return repo_ids
-        else:
-            raise K8sException(
-                "k8cluster with helm-id : {} not found".format(cluster_uuid)
-            )
-
     def _get_db_repos_dict(self, repo_ids: list):
         db_repos_dict = {}
         for repo_id in repo_ids:
@@ -975,6 +940,12 @@ class K8sHelmBaseConnector(K8sConnector):
         For Helm v3 it does nothing and does not need to be callled
         """
 
+    @abc.abstractmethod
+    def _get_helm_chart_repos_ids(self, cluster_uuid) -> list:
+        """
+        Obtains the cluster repos identifiers
+        """
+
     """
     ####################################################################################
     ################################### P R I V A T E ##################################
@@ -1388,7 +1359,8 @@ class K8sHelmBaseConnector(K8sConnector):
         return params_str
 
     @staticmethod
-    def _generate_release_name(chart_name: str):
+    def generate_kdu_instance_name(**kwargs):
+        chart_name = kwargs["kdu_model"]
         # check embeded chart (file or dir)
         if chart_name.startswith("/"):
             # extract file or directory name