Added support for helm v3
[osm/LCM.git] / osm_lcm / vim_sdn.py
index a5eff36..7c774d2 100644 (file)
@@ -23,6 +23,7 @@ import logging.handlers
 from osm_lcm import ROclient
 from osm_lcm.lcm_utils import LcmException, LcmBase, deep_get
 from n2vc.k8s_helm_conn import K8sHelmConnector
+from n2vc.k8s_helm3_conn import K8sHelm3Connector
 from n2vc.k8s_juju_conn import K8sJujuConnector
 from n2vc.exceptions import K8sException, N2VCException
 from osm_common.dbbase import DbException
@@ -913,7 +914,7 @@ class K8sClusterLcm(LcmBase):
         self.fs = fs
         self.db = db
 
-        self.helm_k8scluster = K8sHelmConnector(
+        self.helm2_k8scluster = K8sHelmConnector(
             kubectl_command=self.vca_config.get("kubectlpath"),
             helm_command=self.vca_config.get("helmpath"),
             fs=self.fs,
@@ -922,6 +923,15 @@ class K8sClusterLcm(LcmBase):
             on_update_db=None
         )
 
+        self.helm3_k8scluster = K8sHelm3Connector(
+            kubectl_command=self.vca_config.get("kubectlpath"),
+            helm_command=self.vca_config.get("helm3path"),
+            fs=self.fs,
+            log=self.logger,
+            db=self.db,
+            on_update_db=None
+        )
+
         self.juju_k8scluster = K8sJujuConnector(
             kubectl_command=self.vca_config.get("kubectlpath"),
             juju_command=self.vca_config.get("jujupath"),
@@ -933,7 +943,8 @@ class K8sClusterLcm(LcmBase):
             vca_config=self.vca_config,
         )
         self.k8s_map = {
-            "helm-chart": self.helm_k8scluster,
+            "helm-chart": self.helm2_k8scluster,
+            "helm-chart-v3": self.helm3_k8scluster,
             "juju-bundle": self.juju_k8scluster,
         }
 
@@ -963,7 +974,7 @@ class K8sClusterLcm(LcmBase):
             task2name = {}
             init_target = deep_get(db_k8scluster, ("_admin", "init"))
             step = "Launching k8scluster init tasks"
-            for task_name in ("helm-chart", "juju-bundle"):
+            for task_name in ("helm-chart", "juju-bundle", "helm-chart-v3"):
                 if init_target and task_name not in init_target:
                     continue
                 task = asyncio.ensure_future(self.k8s_map[task_name].init_env(k8s_credentials,
@@ -1073,6 +1084,7 @@ class K8sClusterLcm(LcmBase):
             self.logger.debug(logging_text + step)
             db_k8scluster = self.db.get_one("k8sclusters", {"_id": k8scluster_id})
             k8s_hc_id = deep_get(db_k8scluster, ("_admin", "helm-chart", "id"))
+            k8s_h3c_id = deep_get(db_k8scluster, ("_admin", "helm-chart-v3", "id"))
             k8s_jb_id = deep_get(db_k8scluster, ("_admin", "juju-bundle", "id"))
 
             cluster_removed = True
@@ -1086,10 +1098,17 @@ class K8sClusterLcm(LcmBase):
             if k8s_hc_id:
                 step = "Removing helm-chart '{}'".format(k8s_hc_id)
                 uninstall_sw = deep_get(db_k8scluster, ("_admin", "helm-chart", "created")) or False
-                cluster_removed = await self.helm_k8scluster.reset(cluster_uuid=k8s_hc_id, uninstall_sw=uninstall_sw)
+                cluster_removed = await self.helm2_k8scluster.reset(cluster_uuid=k8s_hc_id, uninstall_sw=uninstall_sw)
                 db_k8scluster_update["_admin.helm-chart.id"] = None
                 db_k8scluster_update["_admin.helm-chart.operationalState"] = "DISABLED"
 
+            if k8s_h3c_id:
+                step = "Removing helm-chart-v3 '{}'".format(k8s_hc_id)
+                uninstall_sw = deep_get(db_k8scluster, ("_admin", "helm-chart-v3", "created")) or False
+                cluster_removed = await self.helm3_k8scluster.reset(cluster_uuid=k8s_hc_id, uninstall_sw=uninstall_sw)
+                db_k8scluster_update["_admin.helm-chart-v3.id"] = None
+                db_k8scluster_update["_admin.helm-chart-v3.operationalState"] = "DISABLED"
+
             # Try to remove from cluster_inserted to clean old versions
             if k8s_hc_id and cluster_removed:
                 step = "Removing k8scluster='{}' from k8srepos".format(k8scluster_id)
@@ -1152,15 +1171,6 @@ class K8sRepoLcm(LcmBase):
         self.fs = fs
         self.db = db
 
-        self.k8srepo = K8sHelmConnector(
-            kubectl_command=self.vca_config.get("kubectlpath"),
-            helm_command=self.vca_config.get("helmpath"),
-            fs=self.fs,
-            log=self.logger,
-            db=self.db,
-            on_update_db=None
-        )
-
         super().__init__(db, msg, fs, self.logger)
 
     async def create(self, k8srepo_content, order_id):