Bug 2007 fixed: removed the while true from K8sHelmBaseConnector._store_status
Made the necessary refactor and fixed the tests accordingly. Now, the
`_store_status` method is not executed forever, it is only executed once
each time is called.
Change-Id: Ia96ab3152fe7f838d1b81dd02c2d22373b805f4a
Signed-off-by: Pedro Escaleira <escaleira@av.it.pt>
diff --git a/n2vc/k8s_conn.py b/n2vc/k8s_conn.py
index cfc4359..632ac29 100644
--- a/n2vc/k8s_conn.py
+++ b/n2vc/k8s_conn.py
@@ -411,6 +411,18 @@
async def write_app_status_to_db(
self, db_dict: dict, status: str, detailed_status: str, operation: str
) -> bool:
+ """
+ This method will write the status of the application to the database.
+
+ :param db_dict: A dictionary with the database necessary information. It shall contain the values for the keys:
+ - "collection": The Mongo DB collection to write to
+ - "filter": The query filter to use in the update process
+ - "path": The dot separated keys which targets the object to be updated
+ :param status: Status of the application
+ :param detailed_status: Detailed status of the application
+ :param operation: Operation that is being performed on the application
+ :return: True if successful
+ """
if not self.db:
self.warning("No db => No database write")
diff --git a/n2vc/k8s_helm_base_conn.py b/n2vc/k8s_helm_base_conn.py
index b6aa7e9..82ae067 100644
--- a/n2vc/k8s_helm_base_conn.py
+++ b/n2vc/k8s_helm_base_conn.py
@@ -413,7 +413,6 @@
namespace=namespace,
db_dict=db_dict,
operation="install",
- run_once=False,
)
)
@@ -442,8 +441,6 @@
namespace=namespace,
db_dict=db_dict,
operation="install",
- run_once=True,
- check_every=0,
)
if rc != 0:
@@ -526,7 +523,6 @@
namespace=instance_info["namespace"],
db_dict=db_dict,
operation="upgrade",
- run_once=False,
)
)
@@ -554,8 +550,6 @@
namespace=instance_info["namespace"],
db_dict=db_dict,
operation="upgrade",
- run_once=True,
- check_every=0,
)
if rc != 0:
@@ -642,7 +636,6 @@
namespace=instance_info["namespace"],
db_dict=db_dict,
operation="rollback",
- run_once=False,
)
)
@@ -661,8 +654,6 @@
namespace=instance_info["namespace"],
db_dict=db_dict,
operation="rollback",
- run_once=True,
- check_every=0,
)
if rc != 0:
@@ -1462,42 +1453,51 @@
operation: str,
kdu_instance: str,
namespace: str = None,
- check_every: float = 10,
db_dict: dict = None,
- run_once: bool = False,
- ):
- while True:
- try:
- await asyncio.sleep(check_every)
- detailed_status = await self._status_kdu(
- cluster_id=cluster_id,
- kdu_instance=kdu_instance,
- yaml_format=False,
- namespace=namespace,
- )
- status = detailed_status.get("info").get("description")
- self.log.debug("KDU {} STATUS: {}.".format(kdu_instance, status))
- # write status to db
- result = await self.write_app_status_to_db(
- db_dict=db_dict,
- status=str(status),
- detailed_status=str(detailed_status),
- operation=operation,
- )
- if not result:
- self.log.info("Error writing in database. Task exiting...")
- return
- except asyncio.CancelledError:
- self.log.debug("Task cancelled")
- return
- except Exception as e:
- self.log.debug(
- "_store_status exception: {}".format(str(e)), exc_info=True
- )
- pass
- finally:
- if run_once:
- return
+ ) -> None:
+ """
+ Obtains the status of the KDU instance based on Helm Charts, and stores it in the database.
+
+ :param cluster_id (str): the cluster where the KDU instance is deployed
+ :param operation (str): The operation related to the status to be updated (for instance, "install" or "upgrade")
+ :param kdu_instance (str): The KDU instance in relation to which the status is obtained
+ :param namespace (str): The Kubernetes namespace where the KDU instance was deployed. Defaults to None
+ :param db_dict (dict): A dictionary with the database necessary information. It shall contain the
+ values for the keys:
+ - "collection": The Mongo DB collection to write to
+ - "filter": The query filter to use in the update process
+ - "path": The dot separated keys which targets the object to be updated
+ Defaults to None.
+ """
+
+ try:
+ detailed_status = await self._status_kdu(
+ cluster_id=cluster_id,
+ kdu_instance=kdu_instance,
+ yaml_format=False,
+ namespace=namespace,
+ )
+
+ status = detailed_status.get("info").get("description")
+ self.log.debug(f"Status for KDU {kdu_instance} obtained: {status}.")
+
+ # write status to db
+ result = await self.write_app_status_to_db(
+ db_dict=db_dict,
+ status=str(status),
+ detailed_status=str(detailed_status),
+ operation=operation,
+ )
+
+ if not result:
+ self.log.info("Error writing in database. Task exiting...")
+
+ except asyncio.CancelledError as e:
+ self.log.warning(
+ f"Exception in method {self._store_status.__name__} (task cancelled): {e}"
+ )
+ except Exception as e:
+ self.log.warning(f"Exception in method {self._store_status.__name__}: {e}")
# params for use in -f file
# returns values file option and filename (in order to delete it at the end)
diff --git a/n2vc/tests/unit/test_k8s_helm3_conn.py b/n2vc/tests/unit/test_k8s_helm3_conn.py
index 3163b85..40f3820 100644
--- a/n2vc/tests/unit/test_k8s_helm3_conn.py
+++ b/n2vc/tests/unit/test_k8s_helm3_conn.py
@@ -206,8 +206,6 @@
namespace=self.namespace,
db_dict=db_dict,
operation="install",
- run_once=True,
- check_every=0,
)
command = (
"env KUBECONFIG=./tmp/helm3_cluster_id/.kube/config /usr/bin/helm3 "
@@ -279,8 +277,6 @@
namespace=self.namespace,
db_dict=db_dict,
operation="upgrade",
- run_once=True,
- check_every=0,
)
command = (
"env KUBECONFIG=./tmp/helm3_cluster_id/.kube/config "
@@ -322,8 +318,6 @@
namespace=self.namespace,
db_dict=db_dict,
operation="rollback",
- run_once=True,
- check_every=0,
)
command = (
"env KUBECONFIG=./tmp/helm3_cluster_id/.kube/config /usr/bin/helm3 "
@@ -518,8 +512,6 @@
namespace=self.namespace,
db_dict=db_dict,
operation="install",
- run_once=True,
- check_every=0,
)
self.helm_conn._status_kdu.assert_called_once_with(
cluster_id=self.cluster_id,
diff --git a/n2vc/tests/unit/test_k8s_helm_conn.py b/n2vc/tests/unit/test_k8s_helm_conn.py
index d6c7835..5e36938 100644
--- a/n2vc/tests/unit/test_k8s_helm_conn.py
+++ b/n2vc/tests/unit/test_k8s_helm_conn.py
@@ -170,8 +170,6 @@
namespace=self.namespace,
db_dict=db_dict,
operation="install",
- run_once=True,
- check_every=0,
)
command = (
"env KUBECONFIG=./tmp/helm_cluster_id/.kube/config /usr/bin/helm install "
@@ -214,8 +212,6 @@
namespace=self.namespace,
db_dict=db_dict,
operation="upgrade",
- run_once=True,
- check_every=0,
)
command = (
"env KUBECONFIG=./tmp/helm_cluster_id/.kube/config /usr/bin/helm upgrade "
@@ -255,8 +251,6 @@
namespace=self.namespace,
db_dict=db_dict,
operation="rollback",
- run_once=True,
- check_every=0,
)
command = (
"env KUBECONFIG=./tmp/helm_cluster_id/.kube/config "
@@ -451,8 +445,6 @@
namespace=self.namespace,
db_dict=db_dict,
operation="install",
- run_once=True,
- check_every=0,
)
self.helm_conn._status_kdu.assert_called_once_with(
cluster_id=self.cluster_id,