X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=blobdiff_plain;f=n2vc%2Fk8s_helm3_conn.py;h=f79816d6c014cf1a0f54467bd95360ca0dfee7cc;hp=72ba0620205f3ae8df67374d14aed835e6c937d4;hb=refs%2Fchanges%2F31%2F10131%2F5;hpb=1c83f2e4d061ad37ba898e114cb42e70fdee5145 diff --git a/n2vc/k8s_helm3_conn.py b/n2vc/k8s_helm3_conn.py index 72ba062..f79816d 100644 --- a/n2vc/k8s_helm3_conn.py +++ b/n2vc/k8s_helm3_conn.py @@ -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,10 +62,56 @@ 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") + async def install( + self, + cluster_uuid: str, + kdu_model: str, + atomic: bool = True, + timeout: float = 300, + params: dict = None, + db_dict: dict = None, + 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 + ) + + # for helm3 if namespace does not exist must create it + if namespace and namespace != "kube-system": + namespaces = await self._get_namespaces(cluster_id) + if namespace not in namespaces: + await self._create_namespace(cluster_id, namespace) + + kdu_instance = await self._install_impl(cluster_id, + kdu_model, + paths, + env, + atomic=atomic, + timeout=timeout, + params=params, + db_dict=db_dict, + kdu_name=kdu_name, + namespace=namespace) + + # sync fs + self.fs.reverse_sync(from_path=cluster_id) + + self.log.debug("Returning kdu_instance {}".format(kdu_instance)) + return kdu_instance + async def inspect_kdu(self, kdu_model: str, repo_url: str = None) -> str: self.log.debug( @@ -242,7 +289,7 @@ class K8sHelm3Connector(K8sHelmBaseConnector): else: await self.repo_add(cluster_uuid, "stable", - "https://kubernetes-charts.storage.googleapis.com/") + self._stable_repo_url) # Returns False as no software needs to be uninstalled return False @@ -407,3 +454,15 @@ class K8sHelm3Connector(K8sHelmBaseConnector): return "{} uninstall {} --namespace={}".format( self._helm_command, kdu_instance, namespace) + + def _get_helm_chart_repos_ids(self, cluster_uuid) -> list: + repo_ids = [] + cluster_filter = {"_admin.helm-chart-v3.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) + )