X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=blobdiff_plain;f=n2vc%2Fk8s_helm_conn.py;h=46a0e990980681f4e4fda4a0bf58053da3e6551c;hp=ad230b5f36a7ee859dd8d7e8c77c41664766fd2b;hb=979c54e4633964caf15a0f7e157be75a08cb0723;hpb=c4da25cc55411e6cea1e83d29c206bce421f0728 diff --git a/n2vc/k8s_helm_conn.py b/n2vc/k8s_helm_conn.py index ad230b5..46a0e99 100644 --- a/n2vc/k8s_helm_conn.py +++ b/n2vc/k8s_helm_conn.py @@ -73,7 +73,8 @@ class K8sHelmConnector(K8sHelmBaseConnector): # initialize helm client-only self.log.debug("Initializing helm client-only...") command = "{} init --client-only --stable-repo-url {} ".format( - self._helm_command, self._stable_repo_url) + self._helm_command, self._stable_repo_url + ) try: asyncio.ensure_future( self._local_async_exec(command=command, raise_exception_on_error=False) @@ -89,17 +90,46 @@ class K8sHelmConnector(K8sHelmBaseConnector): self.log.info("K8S Helm2 connector initialized") async def install( - self, - cluster_uuid: str, - kdu_model: str, - kdu_instance: str, - atomic: bool = True, - timeout: float = 300, - params: dict = None, - db_dict: dict = None, - kdu_name: str = None, - namespace: str = None, + self, + cluster_uuid: str, + kdu_model: str, + kdu_instance: str, + atomic: bool = True, + timeout: float = 300, + params: dict = None, + db_dict: dict = None, + kdu_name: str = None, + namespace: str = None, + **kwargs, ): + """ + Deploys of a new KDU instance. It would implicitly rely on the `install` call + to deploy the Chart/Bundle properly parametrized (in practice, this call would + happen before any _initial-config-primitive_of the VNF is called). + + :param cluster_uuid: UUID of a K8s cluster known by OSM + :param kdu_model: chart/ reference (string), which can be either + of these options: + - a name of chart available via the repos known by OSM + - a path to a packaged chart + - a path to an unpacked chart directory or a URL + :param kdu_instance: Kdu instance name + :param atomic: If set, installation process purges chart/bundle on fail, also + will wait until all the K8s objects are active + :param timeout: Time in seconds to wait for the install of the chart/bundle + (defaults to Helm default timeout: 300s) + :param params: dictionary of key-value pairs for instantiation parameters + (overriding default values) + :param dict db_dict: where to write into database when the status changes. + It contains a dict with {collection: , filter: {}, + path: }, + e.g. {collection: "nsrs", filter: + {_id: , path: "_admin.deployed.K8S.3"} + :param kdu_name: Name of the KDU instance to be installed + :param namespace: K8s namespace to use for the KDU instance + :param kwargs: Additional parameters (None yet) + :return: True if successful + """ _, cluster_id = self._get_namespace_cluster_id(cluster_uuid) self.log.debug("installing {} in cluster {}".format(kdu_model, cluster_id)) @@ -218,8 +248,9 @@ class K8sHelmConnector(K8sHelmBaseConnector): return services - async def _cluster_init(self, cluster_id: str, namespace: str, - paths: dict, env: dict): + async def _cluster_init( + self, cluster_id: str, namespace: str, paths: dict, env: dict + ): """ Implements the helm version dependent cluster initialization: For helm2 it initialized tiller environment if needed @@ -275,7 +306,7 @@ class K8sHelmConnector(K8sHelmBaseConnector): namespace, paths["helm_dir"], self.service_account, - self._stable_repo_url + self._stable_repo_url, ) _, _rc = await self._local_async_exec( command=command, raise_exception_on_error=True, env=env @@ -310,11 +341,8 @@ class K8sHelmConnector(K8sHelmBaseConnector): 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) + await self.repo_remove(cluster_uuid, "stable") + await self.repo_add(cluster_uuid, "stable", self._stable_repo_url) break return n2vc_installed_sw @@ -405,8 +433,9 @@ class K8sHelmConnector(K8sHelmBaseConnector): else: return [] - def _get_inspect_command(self, show_command: str, kdu_model: str, repo_str: str, - version: str): + def _get_inspect_command( + self, show_command: str, kdu_model: str, repo_str: str, version: str + ): inspect_command = "{} inspect {} {}{} {}".format( self._helm_command, show_command, kdu_model, repo_str, version ) @@ -586,15 +615,15 @@ class K8sHelmConnector(K8sHelmBaseConnector): if version: version_str = "--version {}".format(version) - command = "{helm} upgrade {atomic} --output yaml {params} {timeout} {name} {model} {ver}"\ - .format(helm=self._helm_command, - atomic=atomic_str, - params=params_str, - timeout=timeout_str, - name=kdu_instance, - model=kdu_model, - ver=version_str - ) + command = "{helm} upgrade {atomic} --output yaml {params} {timeout} {name} {model} {ver}".format( + helm=self._helm_command, + atomic=atomic_str, + params=params_str, + timeout=timeout_str, + name=kdu_instance, + model=kdu_model, + ver=version_str, + ) return command def _get_rollback_command(self, kdu_instance, namespace, revision) -> str: