Feature-9904: Enhancing NG-UI to enable Juju operational view dashboard
[osm/N2VC.git] / n2vc / n2vc_juju_conn.py
index ed1250d..1a7a46f 100644 (file)
@@ -166,15 +166,16 @@ class N2VCJujuConnector(N2VCConnector):
         if self.ca_cert:
             self.ca_cert = base64_to_cacert(vca_config["ca_cert"])
 
-        if "api_proxy" in vca_config:
+        if "api_proxy" in vca_config and vca_config["api_proxy"] != "":
             self.api_proxy = vca_config["api_proxy"]
             self.log.debug(
                 "api_proxy for native charms configured: {}".format(self.api_proxy)
             )
         else:
             self.warning(
-                "api_proxy is not configured. Support for native charms is disabled"
+                "api_proxy is not configured"
             )
+            self.api_proxy = None
 
         if "enable_os_upgrade" in vca_config:
             self.enable_os_upgrade = vca_config["enable_os_upgrade"]
@@ -241,13 +242,33 @@ class N2VCJujuConnector(N2VCConnector):
         models = await self.libjuju.list_models(contains=ns_id)
 
         for m in models:
-            status[m] = self.libjuju.get_model_status(m)
-
+            status[m] = await self.libjuju.get_model_status(m)
         if yaml_format:
             return obj_to_yaml(status)
         else:
             return obj_to_dict(status)
 
+    async def update_vca_status(self, vcastatus: dict):
+        """
+        Add all configs, actions, executed actions of all applications in a model to vcastatus dict.
+        :param vcastatus: dict containing vcaStatus
+        :return: None
+        """
+        try:
+            for model_name in vcastatus:
+                # Adding executed actions
+                vcastatus[model_name]["executedActions"] = \
+                    await self.libjuju.get_executed_actions(model_name)
+                for application in vcastatus[model_name]["applications"]:
+                    # Adding application actions
+                    vcastatus[model_name]["applications"][application]["actions"] = \
+                        await self.libjuju.get_actions(application, model_name)
+                    # Adding application configs
+                    vcastatus[model_name]["applications"][application]["configs"] = \
+                        await self.libjuju.get_application_configs(model_name, application)
+        except Exception as e:
+            self.log.debug("Error in updating vca status: {}".format(str(e)))
+
     async def create_execution_environment(
         self,
         namespace: str,
@@ -376,10 +397,6 @@ class N2VCJujuConnector(N2VCConnector):
 
         # register machine on juju
         try:
-            if not self.api_proxy:
-                msg = "Cannot provision machine: api_proxy is not defined"
-                self.log.error(msg=msg)
-                raise N2VCException(message=msg)
             if not await self.libjuju.model_exists(model_name):
                 await self.libjuju.add_model(model_name, cloud_name=self.cloud)
             machine_id = await self.libjuju.provision_machine(
@@ -577,6 +594,9 @@ class N2VCJujuConnector(N2VCConnector):
             application_name=application_name,
             machine_id="k8s",
         )
+
+        self._write_ee_id_db(db_dict=db_dict, ee_id=ee_id)
+
         return ee_id
 
     async def get_ee_ssh_public__key(
@@ -922,7 +942,7 @@ class N2VCJujuConnector(N2VCConnector):
                 if status == "completed":
                     return output
                 else:
-                    raise Exception("status is not completed: {}".format(status))
+                    raise Exception("status: {}, output: {}".format(status, output))
             except Exception as e:
                 self.log.error(
                     "Error executing primitive {}: {}".format(primitive_name, e)
@@ -1184,7 +1204,7 @@ class N2VCJujuConnector(N2VCConnector):
                 connection=connection,
                 nonce=params.nonce,
                 machine_id=machine_id,
-                api=self.api_proxy,
+                proxy=self.api_proxy,
             )
         )