X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=blobdiff_plain;f=n2vc%2Fk8s_juju_conn.py;h=3130216001ff83feb03b94dfa813236087a4b4de;hp=0e9d5475c69149626ef98f47a348ada713373330;hb=b816d822dcc61a709b22f475085c3f94dceca61d;hpb=cdf0b8e857e1373410e61bc72cd1a9f5c1ab7ca7;ds=sidebyside diff --git a/n2vc/k8s_juju_conn.py b/n2vc/k8s_juju_conn.py index 0e9d547..3130216 100644 --- a/n2vc/k8s_juju_conn.py +++ b/n2vc/k8s_juju_conn.py @@ -27,6 +27,7 @@ from n2vc.kubectl import Kubectl, CORE_CLIENT, RBAC_CLIENT from .exceptions import MethodNotImplemented from n2vc.utils import base64_to_cacert from n2vc.libjuju import Libjuju +from n2vc.utils import obj_to_dict, obj_to_yaml from kubernetes.client.models import ( V1ClusterRole, @@ -373,6 +374,8 @@ class K8sJujuConnector(K8sConnector): bundle, model_name=kdu_instance, wait=atomic, timeout=timeout ) os.chdir(previous_workdir) + if self.on_update_db: + await self.on_update_db(cluster_uuid, kdu_instance, filter=db_dict["filter"]) return True async def instances_list(self, cluster_uuid: str) -> list: @@ -504,6 +507,8 @@ class K8sJujuConnector(K8sConnector): raise K8sException( "status is not completed: {} output: {}".format(status, output) ) + if self.on_update_db: + await self.on_update_db(cluster_uuid, kdu_instance, filter=db_dict["filter"]) return output @@ -587,6 +592,8 @@ class K8sJujuConnector(K8sConnector): self, cluster_uuid: str, kdu_instance: str, + complete_status: bool = False, + yaml_format: bool = False ) -> dict: """Get the status of the KDU @@ -594,18 +601,54 @@ class K8sJujuConnector(K8sConnector): :param cluster_uuid str: The UUID of the cluster :param kdu_instance str: The unique id of the KDU instance + :param complete_status: To get the complete_status of the KDU + :param yaml_format: To get the status in proper format for NSR record :return: Returns a dictionary containing namespace, state, resources, - and deployment_time. + and deployment_time and returns complete_status if complete_status is True """ status = {} + model_status = await self.libjuju.get_model_status(kdu_instance) - for name in model_status.applications: - application = model_status.applications[name] - status[name] = {"status": application["status"]["status"]} + + if not complete_status: + for name in model_status.applications: + application = model_status.applications[name] + status[name] = {"status": application["status"]["status"]} + else: + if yaml_format: + return obj_to_yaml(model_status) + else: + return obj_to_dict(model_status) return status + async def update_vca_status(self, vcastatus: dict, kdu_instance: str): + """ + Add all configs, actions, executed actions of all applications in a model to vcastatus dict + + :param vcastatus dict: dict containing vcastatus + :param kdu_instance str: The unique id of the KDU instance + + :return: None + """ + try: + for model_name in vcastatus: + # Adding executed actions + vcastatus[model_name]["executedActions"] = \ + await self.libjuju.get_executed_actions(kdu_instance) + + for application in vcastatus[model_name]["applications"]: + # Adding application actions + vcastatus[model_name]["applications"][application]["actions"] = \ + await self.libjuju.get_actions(application, kdu_instance) + # Adding application configs + vcastatus[model_name]["applications"][application]["configs"] = \ + await self.libjuju.get_application_configs(kdu_instance, application) + + except Exception as e: + self.log.debug("Error in updating vca status: {}".format(str(e))) + async def get_services( self, cluster_uuid: str, kdu_instance: str, namespace: str ) -> list: