Bug 2105 fixed 17/12317/6
authorPedro Escaleira <escaleira@av.it.pt>
Thu, 7 Jul 2022 21:18:35 +0000 (22:18 +0100)
committercalvinosanc1 <guillermo.calvino@canonical.com>
Mon, 14 Nov 2022 17:13:32 +0000 (18:13 +0100)
- Added the --reuse-values flag to the upgrade command and updated the
  tests accordingly;
- Also, removed the duplicated code from the _get_upgrade_scale_command
  method, and not this method only calls the _get_upgrade_command to get
  the command to upgrade/scale the Helm Chart

Change-Id: I8bda5450f1f9bd5e2b9771f284e1b904b82fb3df
Signed-off-by: Pedro Escaleira <escaleira@av.it.pt>
n2vc/k8s_helm3_conn.py
n2vc/k8s_helm_base_conn.py
n2vc/k8s_helm_conn.py
n2vc/tests/unit/test_k8s_helm3_conn.py
n2vc/tests/unit/test_k8s_helm_conn.py

index 74a8947..989b738 100644 (file)
@@ -496,25 +496,24 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
         resource_name: str,
         kubeconfig: str,
     ) -> str:
+        """Generates the command to scale a Helm Chart release
 
-        timeout_str = ""
-        if timeout:
-            timeout_str = "--timeout {}s".format(timeout)
-
-        # atomic
-        atomic_str = ""
-        if atomic:
-            atomic_str = "--atomic"
-
-        # version
-        version_str = ""
-        if version:
-            version_str = "--version {}".format(version)
+        Args:
+            kdu_model (str): Kdu model name, corresponding to the Helm local location or repository
+            kdu_instance (str): KDU instance, corresponding to the Helm Chart release in question
+            namespace (str): Namespace where this KDU instance is deployed
+            scale (int): Scale count
+            version (str): Constraint with specific version of the Chart to use
+            atomic (bool): If set, upgrade process rolls back changes made in case of failed upgrade.
+                The --wait flag will be set automatically if --atomic is used
+            replica_str (str): The key under resource_name key where the scale count is stored
+            timeout (float): The time, in seconds, to wait
+            resource_name (str): The KDU's resource to scale
+            kubeconfig (str): Kubeconfig file path
 
-        # namespace
-        namespace_str = ""
-        if namespace:
-            namespace_str = "--namespace {}".format(namespace)
+        Returns:
+            str: command to scale a Helm Chart release
+        """
 
         # scale
         if resource_name:
@@ -524,21 +523,16 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
 
         scale_str = self._params_to_set_option(scale_dict)
 
-        command = (
-            "env KUBECONFIG={kubeconfig} {helm} upgrade {name} {model} {namespace} {atomic} --output yaml {scale} "
-            "{timeout} {ver}"
-        ).format(
-            helm=self._helm_command,
-            name=kdu_instance,
-            namespace=namespace_str,
-            atomic=atomic_str,
-            scale=scale_str,
-            timeout=timeout_str,
-            model=kdu_model,
-            ver=version_str,
+        return self._get_upgrade_command(
+            kdu_model=kdu_model,
+            kdu_instance=kdu_instance,
+            namespace=namespace,
+            params_str=scale_str,
+            version=version,
+            atomic=atomic,
+            timeout=timeout,
             kubeconfig=kubeconfig,
         )
-        return command
 
     def _get_upgrade_command(
         self,
@@ -551,6 +545,22 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
         timeout: float,
         kubeconfig: str,
     ) -> str:
+        """Generates the command to upgrade a Helm Chart release
+
+        Args:
+            kdu_model (str): Kdu model name, corresponding to the Helm local location or repository
+            kdu_instance (str): KDU instance, corresponding to the Helm Chart release in question
+            namespace (str): Namespace where this KDU instance is deployed
+            params_str (str): Params used to upgrade the Helm Chart release
+            version (str): Constraint with specific version of the Chart to use
+            atomic (bool): If set, upgrade process rolls back changes made in case of failed upgrade.
+                The --wait flag will be set automatically if --atomic is used
+            timeout (float): The time, in seconds, to wait
+            kubeconfig (str): Kubeconfig file path
+
+        Returns:
+            str: command to upgrade a Helm Chart release
+        """
 
         timeout_str = ""
         if timeout:
@@ -573,7 +583,7 @@ class K8sHelm3Connector(K8sHelmBaseConnector):
 
         command = (
             "env KUBECONFIG={kubeconfig} {helm} upgrade {name} {model} {namespace} {atomic} "
-            "--output yaml {params} {timeout} {ver}"
+            "--output yaml {params} {timeout} --reuse-values {ver}"
         ).format(
             kubeconfig=kubeconfig,
             helm=self._helm_command,
index c20b55d..51eb475 100644 (file)
@@ -1313,7 +1313,24 @@ class K8sHelmBaseConnector(K8sConnector):
         resource_name,
         kubeconfig,
     ) -> str:
-        """Obtain command to be executed to upgrade the indicated instance."""
+        """Generates the command to scale a Helm Chart release
+
+        Args:
+            kdu_model (str): Kdu model name, corresponding to the Helm local location or repository
+            kdu_instance (str): KDU instance, corresponding to the Helm Chart release in question
+            namespace (str): Namespace where this KDU instance is deployed
+            scale (int): Scale count
+            version (str): Constraint with specific version of the Chart to use
+            atomic (bool): If set, upgrade process rolls back changes made in case of failed upgrade.
+                The --wait flag will be set automatically if --atomic is used
+            replica_str (str): The key under resource_name key where the scale count is stored
+            timeout (float): The time, in seconds, to wait
+            resource_name (str): The KDU's resource to scale
+            kubeconfig (str): Kubeconfig file path
+
+        Returns:
+            str: command to scale a Helm Chart release
+        """
 
     @abc.abstractmethod
     def _get_upgrade_command(
@@ -1327,8 +1344,21 @@ class K8sHelmBaseConnector(K8sConnector):
         timeout,
         kubeconfig,
     ) -> str:
-        """
-        Obtain command to be executed to upgrade the indicated instance
+        """Generates the command to upgrade a Helm Chart release
+
+        Args:
+            kdu_model (str): Kdu model name, corresponding to the Helm local location or repository
+            kdu_instance (str): KDU instance, corresponding to the Helm Chart release in question
+            namespace (str): Namespace where this KDU instance is deployed
+            params_str (str): Params used to upgrade the Helm Chart release
+            version (str): Constraint with specific version of the Chart to use
+            atomic (bool): If set, upgrade process rolls back changes made in case of failed upgrade.
+                The --wait flag will be set automatically if --atomic is used
+            timeout (float): The time, in seconds, to wait
+            kubeconfig (str): Kubeconfig file path
+
+        Returns:
+            str: command to upgrade a Helm Chart release
         """
 
     @abc.abstractmethod
index 8e17a0e..adeb272 100644 (file)
@@ -654,20 +654,24 @@ class K8sHelmConnector(K8sHelmBaseConnector):
         resource_name: str,
         kubeconfig: str,
     ) -> str:
-
-        timeout_str = ""
-        if timeout:
-            timeout_str = "--timeout {}s".format(timeout)
-
-        # atomic
-        atomic_str = ""
-        if atomic:
-            atomic_str = "--atomic"
-
-        # version
-        version_str = ""
-        if version:
-            version_str = "--version {}".format(version)
+        """Generates the command to scale a Helm Chart release
+
+        Args:
+            kdu_model (str): Kdu model name, corresponding to the Helm local location or repository
+            kdu_instance (str): KDU instance, corresponding to the Helm Chart release in question
+            namespace (str): Namespace where this KDU instance is deployed
+            scale (int): Scale count
+            version (str): Constraint with specific version of the Chart to use
+            atomic (bool): If set, upgrade process rolls back changes made in case of failed upgrade.
+                The --wait flag will be set automatically if --atomic is used
+            replica_str (str): The key under resource_name key where the scale count is stored
+            timeout (float): The time, in seconds, to wait
+            resource_name (str): The KDU's resource to scale
+            kubeconfig (str): Kubeconfig file path
+
+        Returns:
+            str: command to scale a Helm Chart release
+        """
 
         # scale
         if resource_name:
@@ -677,19 +681,16 @@ class K8sHelmConnector(K8sHelmBaseConnector):
 
         scale_str = self._params_to_set_option(scale_dict)
 
-        command = (
-            "env KUBECONFIG={kubeconfig} {helm} upgrade {atomic} --output yaml {scale} {timeout} {name} {model} {ver}"
-        ).format(
-            helm=self._helm_command,
-            name=kdu_instance,
-            atomic=atomic_str,
-            scale=scale_str,
-            timeout=timeout_str,
-            model=kdu_model,
-            ver=version_str,
+        return self._get_upgrade_command(
+            kdu_model=kdu_model,
+            kdu_instance=kdu_instance,
+            namespace=namespace,
+            params_str=scale_str,
+            version=version,
+            atomic=atomic,
+            timeout=timeout,
             kubeconfig=kubeconfig,
         )
-        return command
 
     def _get_upgrade_command(
         self,
@@ -702,6 +703,22 @@ class K8sHelmConnector(K8sHelmBaseConnector):
         timeout,
         kubeconfig,
     ) -> str:
+        """Generates the command to upgrade a Helm Chart release
+
+        Args:
+            kdu_model (str): Kdu model name, corresponding to the Helm local location or repository
+            kdu_instance (str): KDU instance, corresponding to the Helm Chart release in question
+            namespace (str): Namespace where this KDU instance is deployed
+            params_str (str): Params used to upgrade the Helm Chart release
+            version (str): Constraint with specific version of the Chart to use
+            atomic (bool): If set, upgrade process rolls back changes made in case of failed upgrade.
+                The --wait flag will be set automatically if --atomic is used
+            timeout (float): The time, in seconds, to wait
+            kubeconfig (str): Kubeconfig file path
+
+        Returns:
+            str: command to upgrade a Helm Chart release
+        """
 
         timeout_str = ""
         if timeout:
@@ -718,7 +735,8 @@ class K8sHelmConnector(K8sHelmBaseConnector):
             version_str = "--version {}".format(version)
 
         command = (
-            "env KUBECONFIG={kubeconfig} {helm} upgrade {atomic} --output yaml {params} {timeout} {name} {model} {ver}"
+            "env KUBECONFIG={kubeconfig} {helm} upgrade {atomic} --output yaml {params} {timeout} "
+            "--reuse-values {name} {model} {ver}"
         ).format(
             kubeconfig=kubeconfig,
             helm=self._helm_command,
index 131b5c4..86b2790 100644 (file)
@@ -293,7 +293,7 @@ class TestK8sHelm3Conn(asynctest.TestCase):
             "env KUBECONFIG=./tmp/helm3_cluster_id/.kube/config "
             "/usr/bin/helm3 upgrade stable-openldap-0005399828 stable/openldap "
             "--namespace testk8s --atomic --output yaml  --timeout 300s "
-            "--version 1.2.3"
+            "--reuse-values --version 1.2.3"
         )
         self.helm_conn._local_async_exec.assert_called_with(
             command=command, env=self.env, raise_exception_on_error=False
@@ -349,7 +349,7 @@ class TestK8sHelm3Conn(asynctest.TestCase):
             "env KUBECONFIG=./tmp/helm3_cluster_id/.kube/config "
             "/usr/bin/helm3 upgrade stable-openldap-0005399828 stable/openldap "
             "--namespace testk8s --atomic --output yaml --set replicaCount=2 --timeout 1800s "
-            "--version 1.2.3"
+            "--reuse-values --version 1.2.3"
         )
         self.helm_conn._local_async_exec.assert_called_once_with(
             command=command, env=self.env, raise_exception_on_error=False
@@ -368,7 +368,7 @@ class TestK8sHelm3Conn(asynctest.TestCase):
             "env KUBECONFIG=./tmp/helm3_cluster_id/.kube/config "
             "/usr/bin/helm3 upgrade stable-openldap-0005399828 stable/openldap "
             "--namespace testk8s --atomic --output yaml --set dummy-app.replicas=3 --timeout 1800s "
-            "--version 1.2.3"
+            "--reuse-values --version 1.2.3"
         )
         self.helm_conn._local_async_exec.assert_called_with(
             command=command, env=self.env, raise_exception_on_error=False
index 5112363..f43b24b 100644 (file)
@@ -226,7 +226,8 @@ class TestK8sHelmConn(asynctest.TestCase):
         )
         command = (
             "env KUBECONFIG=./tmp/helm_cluster_id/.kube/config /usr/bin/helm upgrade "
-            "--atomic --output yaml  --timeout 300 stable-openldap-0005399828 stable/openldap --version 1.2.3"
+            "--atomic --output yaml  --timeout 300 --reuse-values stable-openldap-0005399828 stable/openldap "
+            "--version 1.2.3"
         )
         self.helm_conn._local_async_exec.assert_called_with(
             command=command, env=self.env, raise_exception_on_error=False
@@ -281,7 +282,7 @@ class TestK8sHelmConn(asynctest.TestCase):
         command = (
             "env KUBECONFIG=./tmp/helm_cluster_id/.kube/config "
             "/usr/bin/helm upgrade --atomic --output yaml --set replicaCount=2 "
-            "--timeout 1800s stable-openldap-0005399828 stable/openldap "
+            "--timeout 1800 --reuse-values stable-openldap-0005399828 stable/openldap "
             "--version 1.2.3"
         )
         self.helm_conn._local_async_exec.assert_called_once_with(
@@ -301,7 +302,7 @@ class TestK8sHelmConn(asynctest.TestCase):
         command = (
             "env KUBECONFIG=./tmp/helm_cluster_id/.kube/config "
             "/usr/bin/helm upgrade --atomic --output yaml --set dummy-app.replicas=3 "
-            "--timeout 1800s stable-openldap-0005399828 stable/openldap "
+            "--timeout 1800 --reuse-values stable-openldap-0005399828 stable/openldap "
             "--version 1.2.3"
         )
         self.helm_conn._local_async_exec.assert_called_with(