X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=blobdiff_plain;f=n2vc%2Fk8s_juju_conn.py;h=24b314289756c95cdc3ff84ce7d521cc3c23511e;hp=e3ec17e295ee4f704edcec9dd6e14f15629e7295;hb=4395cfa6c7d0d80980c00d9f078440e0333fd826;hpb=eb8943a887e2fb8cce0240382811f9e504f3c7fb diff --git a/n2vc/k8s_juju_conn.py b/n2vc/k8s_juju_conn.py index e3ec17e..24b3142 100644 --- a/n2vc/k8s_juju_conn.py +++ b/n2vc/k8s_juju_conn.py @@ -371,10 +371,72 @@ class K8sJujuConnector(K8sConnector): cluster_uuid, kdu_instance, filter=db_dict["filter"], - vca_id=kwargs.get("vca_id") + vca_id=kwargs.get("vca_id"), ) return True + async def scale( + self, + kdu_instance: str, + scale: int, + resource_name: str, + total_timeout: float = 1800, + **kwargs, + ) -> bool: + """Scale an application in a model + + :param: kdu_instance str: KDU instance name + :param: scale int: Scale to which to set this application + :param: resource_name str: Resource name (Application name) + :param: timeout float: The time, in seconds, to wait for the install + to finish + :param kwargs: Additional parameters + vca_id (str): VCA ID + + :return: If successful, returns True + """ + + try: + libjuju = await self._get_libjuju(kwargs.get("vca_id")) + await libjuju.scale_application( + model_name=kdu_instance, + application_name=resource_name, + scale=scale, + total_timeout=total_timeout, + ) + except Exception as e: + error_msg = "Error scaling application {} in kdu instance {}: {}".format( + resource_name, kdu_instance, e + ) + self.log.error(error_msg) + raise K8sException(message=error_msg) + return True + + async def get_scale_count( + self, + resource_name: str, + kdu_instance: str, + **kwargs, + ) -> int: + """Get an application scale count + + :param: resource_name str: Resource name (Application name) + :param: kdu_instance str: KDU instance name + :param kwargs: Additional parameters + vca_id (str): VCA ID + :return: Return application instance count + """ + try: + libjuju = await self._get_libjuju(kwargs.get("vca_id")) + status = await libjuju.get_model_status(kdu_instance) + return len(status.applications[resource_name].units) + except Exception as e: + error_msg = "Error getting scale count from application {} in kdu instance {}: {}".format( + resource_name, kdu_instance, e + ) + self.log.error(error_msg) + raise K8sException(message=error_msg) + async def instances_list(self, cluster_uuid: str) -> list: """ returns a list of deployed releases in a cluster @@ -517,7 +579,9 @@ class K8sJujuConnector(K8sConnector): "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"]) + await self.on_update_db( + cluster_uuid, kdu_instance, filter=db_dict["filter"] + ) return output @@ -651,16 +715,19 @@ class K8sJujuConnector(K8sConnector): try: for model_name in vcastatus: # Adding executed actions - vcastatus[model_name]["executedActions"] = \ - await libjuju.get_executed_actions(kdu_instance) + vcastatus[model_name][ + "executedActions" + ] = await libjuju.get_executed_actions(kdu_instance) for application in vcastatus[model_name]["applications"]: # Adding application actions - vcastatus[model_name]["applications"][application]["actions"] = \ - await libjuju.get_actions(application, kdu_instance) + vcastatus[model_name]["applications"][application][ + "actions" + ] = await libjuju.get_actions(application, kdu_instance) # Adding application configs - vcastatus[model_name]["applications"][application]["configs"] = \ - await libjuju.get_application_configs(kdu_instance, application) + vcastatus[model_name]["applications"][application][ + "configs" + ] = await libjuju.get_application_configs(kdu_instance, application) except Exception as e: self.log.debug("Error in updating vca status: {}".format(str(e)))