X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=n2vc%2Fk8s_helm3_conn.py;h=68ad37e236157d39eb4d970eeb70f8972cbfccca;hb=2b83a9fa1daad721c22c82e8895f466c45d3655d;hp=5a8c41f64ff4b12f02f16a33638511c16c5e9442;hpb=7d0735dcfe5634bc9eebedeb67527495f6751a43;p=osm%2FN2VC.git diff --git a/n2vc/k8s_helm3_conn.py b/n2vc/k8s_helm3_conn.py index 5a8c41f..68ad37e 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,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") @@ -69,6 +71,7 @@ class K8sHelm3Connector(K8sHelmBaseConnector): self, cluster_uuid: str, kdu_model: str, + kdu_instance: str, atomic: bool = True, timeout: float = 300, params: dict = None, @@ -89,26 +92,39 @@ class K8sHelm3Connector(K8sHelmBaseConnector): # 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) + if not await self._namespace_exists(cluster_id, namespace): + try: + await self._create_namespace(cluster_id, namespace) + except Exception as e: + if not await self._namespace_exists(cluster_id, namespace): + err_msg = ( + "namespace {} does not exist in cluster_id {} " + "error message: ".format( + namespace, e + ) + ) + self.log.error(err_msg) + raise K8sException(err_msg) + + await self._install_impl( + cluster_id, + kdu_model, + paths, + env, + kdu_instance, + 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 + return True async def inspect_kdu(self, kdu_model: str, repo_url: str = None) -> str: @@ -202,8 +218,16 @@ class K8sHelm3Connector(K8sHelmBaseConnector): return paths, env - async def _get_namespaces(self, - cluster_id: str): + async def _namespace_exists(self, cluster_id, namespace) -> bool: + self.log.debug( + "checking if namespace {} exists cluster_id {}".format( + namespace, cluster_id + ) + ) + namespaces = await self._get_namespaces(cluster_id) + return namespace in namespaces if namespaces else False + + async def _get_namespaces(self, cluster_id: str): self.log.debug("get namespaces cluster_id {}".format(cluster_id)) @@ -287,7 +311,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