From 3e9293d9af69fef190b0fe9633f75207203a65f9 Mon Sep 17 00:00:00 2001 From: Pedro Escaleira Date: Tue, 5 Apr 2022 17:32:13 +0100 Subject: [PATCH] Bug 1981 fixed Added the `yaml_format` argument to the `status_kdu` abstract method of the class `K8sConnector`, and changed the corresponding Helm connectors methods accordingly, while maintaining backward compatibility Change-Id: Ic78c951825b7654ccf8246c4fe1fc4d488221bfc Signed-off-by: Pedro Escaleira --- n2vc/k8s_conn.py | 7 ++++++- n2vc/k8s_helm3_conn.py | 7 ++++--- n2vc/k8s_helm_base_conn.py | 15 ++++++++++----- n2vc/k8s_helm_conn.py | 9 +++++---- n2vc/k8s_juju_conn.py | 3 ++- n2vc/tests/unit/test_k8s_helm3_conn.py | 4 ++-- n2vc/tests/unit/test_k8s_helm_conn.py | 4 ++-- 7 files changed, 31 insertions(+), 18 deletions(-) diff --git a/n2vc/k8s_conn.py b/n2vc/k8s_conn.py index 89805b3..cfc4359 100644 --- a/n2vc/k8s_conn.py +++ b/n2vc/k8s_conn.py @@ -22,6 +22,7 @@ import abc import asyncio +from typing import Union import time from n2vc.loggable import Loggable @@ -333,7 +334,9 @@ class K8sConnector(abc.ABC, Loggable): """ @abc.abstractmethod - async def status_kdu(self, cluster_uuid: str, kdu_instance: str) -> str: + async def status_kdu( + self, cluster_uuid: str, kdu_instance: str, yaml_format: str + ) -> Union[str, dict]: """ This call would retrieve tha current state of a given KDU instance. It would be would allow to retrieve the _composition_ (i.e. K8s objects) and _specific @@ -342,6 +345,8 @@ class K8sConnector(abc.ABC, Loggable): :param cluster_uuid: UUID of a K8s cluster known by OSM :param kdu_instance: unique name for the KDU instance + :param yaml_format: if the return shall be returned as an YAML string or as a + dictionary :return: If successful, it will return the following vector of arguments: - K8s `namespace` in the cluster where the KDU lives - `state` of the KDU instance. It can be: diff --git a/n2vc/k8s_helm3_conn.py b/n2vc/k8s_helm3_conn.py index 5e5766a..f8de7c4 100644 --- a/n2vc/k8s_helm3_conn.py +++ b/n2vc/k8s_helm3_conn.py @@ -19,6 +19,7 @@ # For those usages not covered by the Apache License, Version 2.0 please # contact with: nfvlabs@tid.es ## +from typing import Union import os import yaml @@ -357,9 +358,9 @@ class K8sHelm3Connector(K8sHelmBaseConnector): cluster_id: str, kdu_instance: str, namespace: str = None, + yaml_format: bool = False, show_error_log: bool = False, - return_text: bool = False, - ): + ) -> Union[str, dict]: self.log.debug( "status of kdu_instance: {}, namespace: {} ".format(kdu_instance, namespace) @@ -383,7 +384,7 @@ class K8sHelm3Connector(K8sHelmBaseConnector): env=env, ) - if return_text: + if yaml_format: return str(output) if rc != 0: diff --git a/n2vc/k8s_helm_base_conn.py b/n2vc/k8s_helm_base_conn.py index ccf9e33..f3dd315 100644 --- a/n2vc/k8s_helm_base_conn.py +++ b/n2vc/k8s_helm_base_conn.py @@ -21,6 +21,7 @@ ## import abc import asyncio +from typing import Union import random import time import shlex @@ -817,7 +818,9 @@ class K8sHelmBaseConnector(K8sConnector): return service - async def status_kdu(self, cluster_uuid: str, kdu_instance: str, **kwargs) -> str: + async def status_kdu( + self, cluster_uuid: str, kdu_instance: str, yaml_format: str = False, **kwargs + ) -> Union[str, dict]: """ This call would retrieve tha current state of a given KDU instance. It would be would allow to retrieve the _composition_ (i.e. K8s objects) and _specific @@ -827,6 +830,8 @@ class K8sHelmBaseConnector(K8sConnector): :param cluster_uuid: UUID of a K8s cluster known by OSM :param kdu_instance: unique name for the KDU instance :param kwargs: Additional parameters (None yet) + :param yaml_format: if the return shall be returned as an YAML string or as a + dictionary :return: If successful, it will return the following vector of arguments: - K8s `namespace` in the cluster where the KDU lives - `state` of the KDU instance. It can be: @@ -867,8 +872,8 @@ class K8sHelmBaseConnector(K8sConnector): cluster_id=cluster_uuid, kdu_instance=kdu_instance, namespace=instance["namespace"], + yaml_format=yaml_format, show_error_log=True, - return_text=True, ) # sync fs @@ -1012,9 +1017,9 @@ class K8sHelmBaseConnector(K8sConnector): cluster_id: str, kdu_instance: str, namespace: str = None, + yaml_format: bool = False, show_error_log: bool = False, - return_text: bool = False, - ): + ) -> Union[str, dict]: """ Implements the helm version dependent method to obtain status of a helm instance """ @@ -1426,8 +1431,8 @@ class K8sHelmBaseConnector(K8sConnector): detailed_status = await self._status_kdu( cluster_id=cluster_id, kdu_instance=kdu_instance, + yaml_format=False, namespace=namespace, - return_text=False, ) status = detailed_status.get("info").get("description") self.log.debug("KDU {} STATUS: {}.".format(kdu_instance, status)) diff --git a/n2vc/k8s_helm_conn.py b/n2vc/k8s_helm_conn.py index ff5bab7..b1ad379 100644 --- a/n2vc/k8s_helm_conn.py +++ b/n2vc/k8s_helm_conn.py @@ -20,6 +20,7 @@ # contact with: nfvlabs@tid.es ## import asyncio +from typing import Union import os import yaml @@ -456,9 +457,9 @@ class K8sHelmConnector(K8sHelmBaseConnector): cluster_id: str, kdu_instance: str, namespace: str = None, + yaml_format: bool = False, show_error_log: bool = False, - return_text: bool = False, - ): + ) -> Union[str, dict]: self.log.debug( "status of kdu_instance: {}, namespace: {} ".format(kdu_instance, namespace) @@ -478,7 +479,7 @@ class K8sHelmConnector(K8sHelmBaseConnector): env=env, ) - if return_text: + if yaml_format: return str(output) if rc != 0: @@ -536,7 +537,7 @@ class K8sHelmConnector(K8sHelmBaseConnector): ) status = await self._status_kdu( - cluster_id=cluster_id, kdu_instance=kdu_instance, return_text=False + cluster_id=cluster_id, kdu_instance=kdu_instance, yaml_format=False ) # extract info.status.resources-> str diff --git a/n2vc/k8s_juju_conn.py b/n2vc/k8s_juju_conn.py index e83adf2..fb15be7 100644 --- a/n2vc/k8s_juju_conn.py +++ b/n2vc/k8s_juju_conn.py @@ -13,6 +13,7 @@ # limitations under the License. import asyncio +from typing import Union import os import uuid import yaml @@ -646,7 +647,7 @@ class K8sJujuConnector(K8sConnector): complete_status: bool = False, yaml_format: bool = False, **kwargs, - ) -> dict: + ) -> Union[str, dict]: """Get the status of the KDU Get the current status of the KDU instance. diff --git a/n2vc/tests/unit/test_k8s_helm3_conn.py b/n2vc/tests/unit/test_k8s_helm3_conn.py index c7eefbf..9ea3aae 100644 --- a/n2vc/tests/unit/test_k8s_helm3_conn.py +++ b/n2vc/tests/unit/test_k8s_helm3_conn.py @@ -480,7 +480,7 @@ class TestK8sHelm3Conn(asynctest.TestCase): self.helm_conn._local_async_exec = asynctest.CoroutineMock(return_value=("", 0)) await self.helm_conn._status_kdu( - self.cluster_id, kdu_instance, self.namespace, return_text=True + self.cluster_id, kdu_instance, self.namespace, yaml_format=True ) command = ( "env KUBECONFIG=./tmp/helm3_cluster_id/.kube/config /usr/bin/helm3 status {} --namespace={} --output yaml" @@ -523,7 +523,7 @@ class TestK8sHelm3Conn(asynctest.TestCase): cluster_id=self.cluster_id, kdu_instance=kdu_instance, namespace=self.namespace, - return_text=False, + yaml_format=False, ) self.helm_conn.write_app_status_to_db.assert_called_once_with( db_dict=db_dict, diff --git a/n2vc/tests/unit/test_k8s_helm_conn.py b/n2vc/tests/unit/test_k8s_helm_conn.py index 6e10084..54b5c9e 100644 --- a/n2vc/tests/unit/test_k8s_helm_conn.py +++ b/n2vc/tests/unit/test_k8s_helm_conn.py @@ -413,7 +413,7 @@ class TestK8sHelmConn(asynctest.TestCase): self.helm_conn._local_async_exec = asynctest.CoroutineMock(return_value=("", 0)) await self.helm_conn._status_kdu( - self.cluster_id, kdu_instance, self.namespace, return_text=True + self.cluster_id, kdu_instance, self.namespace, yaml_format=True ) command = ( "env KUBECONFIG=./tmp/helm_cluster_id/.kube/config /usr/bin/helm status {} --output yaml" @@ -456,7 +456,7 @@ class TestK8sHelmConn(asynctest.TestCase): cluster_id=self.cluster_id, kdu_instance=kdu_instance, namespace=self.namespace, - return_text=False, + yaml_format=False, ) self.helm_conn.write_app_status_to_db.assert_called_once_with( db_dict=db_dict, -- 2.25.1