Bug 2005 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 f692abc..ada7075 100644
--- a/n2vc/k8s_conn.py
+++ b/n2vc/k8s_conn.py
@@ -458,6 +458,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 dd2116c..f0a049b 100644
--- a/n2vc/k8s_helm_base_conn.py
+++ b/n2vc/k8s_helm_base_conn.py
@@ -434,7 +434,6 @@
namespace=namespace,
db_dict=db_dict,
operation="install",
- run_once=False,
)
)
@@ -463,8 +462,6 @@
namespace=namespace,
db_dict=db_dict,
operation="install",
- run_once=True,
- check_every=0,
)
if rc != 0:
@@ -541,7 +538,6 @@
namespace=instance_info["namespace"],
db_dict=db_dict,
operation="upgrade",
- run_once=False,
)
)
@@ -569,8 +565,6 @@
namespace=instance_info["namespace"],
db_dict=db_dict,
operation="upgrade",
- run_once=True,
- check_every=0,
)
if rc != 0:
@@ -680,7 +674,6 @@
namespace=instance_info["namespace"],
db_dict=db_dict,
operation="scale",
- run_once=False,
)
)
@@ -703,8 +696,6 @@
namespace=instance_info["namespace"],
db_dict=db_dict,
operation="scale",
- run_once=True,
- check_every=0,
)
if rc != 0:
@@ -820,7 +811,6 @@
namespace=instance_info["namespace"],
db_dict=db_dict,
operation="rollback",
- run_once=False,
)
)
@@ -839,8 +829,6 @@
namespace=instance_info["namespace"],
db_dict=db_dict,
operation="rollback",
- run_once=True,
- check_every=0,
)
if rc != 0:
@@ -1860,42 +1848,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 d1b7903..201306f 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 "
@@ -373,8 +369,6 @@
namespace=self.namespace,
db_dict=db_dict,
operation="scale",
- run_once=True,
- check_every=0,
)
@asynctest.fail_on(active_handles=True)
@@ -407,8 +401,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 "
@@ -612,8 +604,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 fb586a3..907ff40 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 "
@@ -307,8 +303,6 @@
namespace=self.namespace,
db_dict=db_dict,
operation="scale",
- run_once=True,
- check_every=0,
)
@asynctest.fail_on(active_handles=True)
@@ -341,8 +335,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 "
@@ -546,8 +538,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,