Wrapping Retry for Py3.10
[osm/N2VC.git] / n2vc / k8s_helm3_conn.py
index d828da2..037ed66 100644 (file)
@@ -149,7 +149,6 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
         return True
 
     async def inspect_kdu(self, kdu_model: str, repo_url: str = None) -> str:
-
         self.log.debug(
             "inspect kdu_model {} from (optional) repo: {}".format(kdu_model, repo_url)
         )
@@ -250,7 +249,6 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
         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))
 
         # init config, env
@@ -272,7 +270,6 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
         return namespaces
 
     async def _create_namespace(self, cluster_id: str, namespace: str):
-
         self.log.debug(f"create namespace: {cluster_id} for cluster_id: {namespace}")
 
         # init config, env
@@ -293,7 +290,6 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
     async def _get_services(
         self, cluster_id: str, kdu_instance: str, namespace: str, kubeconfig: str
     ):
-
         # init config, env
         paths, env = self._init_paths_env(
             cluster_name=cluster_id, create_if_not_exist=True
@@ -333,7 +329,6 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
         pass
 
     async def _instances_list(self, cluster_id: str):
-
         # init paths, env
         paths, env = self._init_paths_env(
             cluster_name=cluster_id, create_if_not_exist=True
@@ -389,7 +384,6 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
         yaml_format: bool = False,
         show_error_log: bool = False,
     ) -> Union[str, dict]:
-
         self.log.debug(
             "status of kdu_instance: {}, namespace: {} ".format(kdu_instance, namespace)
         )
@@ -448,7 +442,6 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
         timeout: float,
         kubeconfig: str,
     ) -> str:
-
         timeout_str = ""
         if timeout:
             timeout_str = "--timeout {}s".format(timeout)
@@ -544,6 +537,7 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
         atomic: bool,
         timeout: float,
         kubeconfig: str,
+        force: bool = False,
     ) -> str:
         """Generates the command to upgrade a Helm Chart release
 
@@ -557,7 +551,7 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
                 The --wait flag will be set automatically if --atomic is used
             timeout (float): The time, in seconds, to wait
             kubeconfig (str): Kubeconfig file path
-
+            force (bool): If set, helm forces resource updates through a replacement strategy. This may recreate pods.
         Returns:
             str: command to upgrade a Helm Chart release
         """
@@ -571,6 +565,11 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
         if atomic:
             atomic_str = "--atomic"
 
+        # force
+        force_str = ""
+        if force:
+            force_str = "--force "
+
         # version
         version_str = ""
         if version:
@@ -582,7 +581,7 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
             namespace_str = "--namespace {}".format(namespace)
 
         command = (
-            "env KUBECONFIG={kubeconfig} {helm} upgrade {name} {model} {namespace} {atomic} "
+            "env KUBECONFIG={kubeconfig} {helm} upgrade {name} {model} {namespace} {atomic} {force}"
             "--output yaml {params} {timeout} --reuse-values {ver}"
         ).format(
             kubeconfig=kubeconfig,
@@ -590,6 +589,7 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
             name=kdu_instance,
             namespace=namespace_str,
             atomic=atomic_str,
+            force=force_str,
             params=params_str,
             timeout=timeout_str,
             model=kdu_model,
@@ -607,7 +607,6 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
     def _get_uninstall_command(
         self, kdu_instance: str, namespace: str, kubeconfig: str
     ) -> str:
-
         return "env KUBECONFIG={} {} uninstall {} --namespace={}".format(
             kubeconfig, self._helm_command, kdu_instance, namespace
         )