Feature 11014: add option to reset values for upgrade operation on helm charts
Change-Id: I61ca767d458985ecaa429eb3d0549634cf882da8
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
diff --git a/n2vc/k8s_conn.py b/n2vc/k8s_conn.py
index 3a1a5ef..8fd8a7d 100644
--- a/n2vc/k8s_conn.py
+++ b/n2vc/k8s_conn.py
@@ -194,6 +194,9 @@
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 @@
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
"""
diff --git a/n2vc/k8s_helm3_conn.py b/n2vc/k8s_helm3_conn.py
index 675c851..1ddcf41 100644
--- a/n2vc/k8s_helm3_conn.py
+++ b/n2vc/k8s_helm3_conn.py
@@ -549,6 +549,9 @@
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 @@
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 @@
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 @@
params=params_str,
timeout=timeout_str,
model=quote(kdu_model),
+ on_values=on_values_str,
ver=version_str,
)
return command
diff --git a/n2vc/k8s_helm_base_conn.py b/n2vc/k8s_helm_base_conn.py
index 383ce7d..14ad945 100644
--- a/n2vc/k8s_helm_base_conn.py
+++ b/n2vc/k8s_helm_base_conn.py
@@ -483,6 +483,9 @@
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 @@
atomic,
timeout,
paths["kube_config"],
+ reset_values,
+ reuse_values,
+ reset_then_reuse_values,
force,
)
@@ -1357,6 +1363,9 @@
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 @@
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
diff --git a/n2vc/k8s_helm_conn.py b/n2vc/k8s_helm_conn.py
index f697953..5293c65 100644
--- a/n2vc/k8s_helm_conn.py
+++ b/n2vc/k8s_helm_conn.py
@@ -701,6 +701,9 @@
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 @@
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 @@
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 @@
params=params_str,
timeout=timeout_str,
name=quote(kdu_instance),
+ on_values=on_values_str,
model=quote(kdu_model),
ver=version_str,
)