Feature 11014: add option to reset values for upgrade operation on helm charts 84/14584/3 v14.0.3
authorgarciadeblas <gerardo.garciadeblas@telefonica.com>
Thu, 8 Feb 2024 12:05:27 +0000 (13:05 +0100)
committergarciadeblas <gerardo.garciadeblas@telefonica.com>
Thu, 6 Feb 2025 11:51:08 +0000 (12:51 +0100)
Change-Id: I61ca767d458985ecaa429eb3d0549634cf882da8
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
n2vc/k8s_conn.py
n2vc/k8s_helm3_conn.py
n2vc/k8s_helm_base_conn.py
n2vc/k8s_helm_conn.py

index 3a1a5ef..8fd8a7d 100644 (file)
@@ -194,6 +194,9 @@ class K8sConnector(abc.ABC, Loggable):
         timeout: float = 300,
         params: dict = None,
         db_dict: dict = None,
+        reset_values: bool = False,
+        reuse_values: bool = True,
+        reset_then_reuse_values: bool = False,
         force: bool = False,
     ):
         """
@@ -214,6 +217,9 @@ class K8sConnector(abc.ABC, Loggable):
                         path: <str>},
                             e.g. {collection: "nsrs", filter:
                             {_id: <nsd-id>, path: "_admin.deployed.K8S.3"}
+        :param reset_values: force reseting values
+        :param reuse_values: force reusing values (default)
+        :param reset_then_reuse_values: forces reseting values, then apply the last release's values
         :param force: force recreation of resources if necessary
         :return: reference to the new revision number of the KDU instance
         """
index 675c851..1ddcf41 100644 (file)
@@ -549,6 +549,9 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
         atomic: bool,
         timeout: float,
         kubeconfig: str,
+        reset_values: bool = False,
+        reuse_values: bool = True,
+        reset_then_reuse_values: bool = False,
         force: bool = False,
     ) -> str:
         """Generates the command to upgrade a Helm Chart release
@@ -563,6 +566,9 @@ 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
+            reset_values(bool): If set, helm resets values instead of reusing previous values.
+            reuse_values(bool): If set, helm reuses previous values.
+            reset_then_reuse_values(bool): If set, helm resets values, then apply the last release's values
             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
@@ -592,9 +598,17 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
         if namespace:
             namespace_str = "--namespace {}".format(quote(namespace))
 
+        # reset, reuse or reset_then_reuse values
+        on_values_str = "--reuse-values"
+        if reset_values:
+            on_values_str = "--reset-values"
+        elif reuse_values:
+            on_values_str = "--reuse-values"
+        elif reset_then_reuse_values:
+            on_values_str = "--reset-then-reuse-values"
         command = (
             "env KUBECONFIG={kubeconfig} {helm} upgrade {name} {model} {namespace} {atomic} {force}"
-            "--output yaml {params} {timeout} --reuse-values {ver}"
+            "--output yaml {params} {timeout} {on_values} {ver}"
         ).format(
             kubeconfig=kubeconfig,
             helm=self._helm_command,
@@ -605,6 +619,7 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
             params=params_str,
             timeout=timeout_str,
             model=quote(kdu_model),
+            on_values=on_values_str,
             ver=version_str,
         )
         return command
index 383ce7d..14ad945 100644 (file)
@@ -483,6 +483,9 @@ class K8sHelmBaseConnector(K8sConnector):
         params: dict = None,
         db_dict: dict = None,
         namespace: str = None,
+        reset_values: bool = False,
+        reuse_values: bool = True,
+        reset_then_reuse_values: bool = False,
         force: bool = False,
     ):
         self.log.debug("upgrading {} in cluster {}".format(kdu_model, cluster_uuid))
@@ -528,6 +531,9 @@ class K8sHelmBaseConnector(K8sConnector):
             atomic,
             timeout,
             paths["kube_config"],
+            reset_values,
+            reuse_values,
+            reset_then_reuse_values,
             force,
         )
 
@@ -1357,6 +1363,9 @@ class K8sHelmBaseConnector(K8sConnector):
         atomic,
         timeout,
         kubeconfig,
+        reset_values,
+        reuse_values,
+        reset_then_reuse_values,
         force,
     ) -> str:
         """Generates the command to upgrade a Helm Chart release
@@ -1371,6 +1380,9 @@ class K8sHelmBaseConnector(K8sConnector):
                 The --wait flag will be set automatically if --atomic is used
             timeout (float): The time, in seconds, to wait
             kubeconfig (str): Kubeconfig file path
+            reset_values(bool): If set, helm resets values instead of reusing previous values.
+            reuse_values(bool): If set, helm reuses previous values.
+            reset_then_reuse_values(bool): If set, helm resets values, then apply the last release's values
             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
index f697953..5293c65 100644 (file)
@@ -701,6 +701,9 @@ class K8sHelmConnector(K8sHelmBaseConnector):
         atomic,
         timeout,
         kubeconfig,
+        reset_values: bool = False,
+        reuse_values: bool = True,
+        reset_then_reuse_values: bool = False,
         force: bool = False,
     ) -> str:
         """Generates the command to upgrade a Helm Chart release
@@ -715,6 +718,9 @@ class K8sHelmConnector(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
+            reset_values(bool): If set, helm resets values instead of reusing previous values.
+            reuse_values(bool): If set, helm reuses previous values.
+            reset_then_reuse_values(bool): If set, helm resets values, then apply the last release's values
             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
@@ -744,9 +750,18 @@ class K8sHelmConnector(K8sHelmBaseConnector):
         if namespace:
             namespace_str = "--namespace {}".format(quote(namespace))
 
+        # reset, reuse or reset_then_reuse values
+        on_values_str = "--reuse-values"
+        if reset_values:
+            on_values_str = "--reset-values"
+        elif reuse_values:
+            on_values_str = "--reuse-values"
+        elif reset_then_reuse_values:
+            on_values_str = "--reset-then-reuse-values"
+
         command = (
             "env KUBECONFIG={kubeconfig} {helm} upgrade {namespace} {atomic} --output yaml {params} {timeout} {force}"
-            "--reuse-values {name} {model} {ver}"
+            "{on_values} {name} {model} {ver}"
         ).format(
             kubeconfig=kubeconfig,
             helm=self._helm_command,
@@ -756,6 +771,7 @@ class K8sHelmConnector(K8sHelmBaseConnector):
             params=params_str,
             timeout=timeout_str,
             name=quote(kdu_instance),
+            on_values=on_values_str,
             model=quote(kdu_model),
             ver=version_str,
         )