X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FN2VC.git;a=blobdiff_plain;f=n2vc%2Fn2vc_juju_conn.py;h=313430d1baf541f3d97ac2c909985fc560c9b05a;hp=6e78c47f33b669f7ca243408f85f1db1c87d36f0;hb=a71d4a04c1e8ad3ffe1a129024e6dbc14d6d3bd5;hpb=b4e7f5c425df48f7e946d792184d1d1b44879fe9 diff --git a/n2vc/n2vc_juju_conn.py b/n2vc/n2vc_juju_conn.py index 6e78c47..313430d 100644 --- a/n2vc/n2vc_juju_conn.py +++ b/n2vc/n2vc_juju_conn.py @@ -24,6 +24,7 @@ import asyncio import logging import os +from n2vc.config import ModelConfig from n2vc.exceptions import ( N2VCBadArgumentsException, N2VCException, @@ -149,15 +150,7 @@ class N2VCJujuConnector(N2VCConnector): ) self.api_proxy = None - if "enable_os_upgrade" in vca_config: - self.enable_os_upgrade = vca_config["enable_os_upgrade"] - else: - self.enable_os_upgrade = True - - if "apt_mirror" in vca_config: - self.apt_mirror = vca_config["apt_mirror"] - else: - self.apt_mirror = None + model_config = ModelConfig(vca_config) self.cloud = vca_config.get('cloud') self.k8s_cloud = None @@ -179,8 +172,6 @@ class N2VCJujuConnector(N2VCConnector): self.libjuju = Libjuju( endpoint=self.url, api_proxy=self.api_proxy, - enable_os_upgrade=self.enable_os_upgrade, - apt_mirror=self.apt_mirror, username=self.username, password=self.secret, cacert=self.ca_cert, @@ -188,6 +179,7 @@ class N2VCJujuConnector(N2VCConnector): log=self.log, db=self.db, n2vc=self, + model_config=model_config, ) # create juju pub key file in lcm container at @@ -543,13 +535,14 @@ class N2VCJujuConnector(N2VCConnector): _, ns_id, _, _, _ = self._get_namespace_components(namespace=namespace) model_name = '{}-k8s'.format(ns_id) - cloud = cloud_name or self.k8s_cloud - credential = credential_name or cloud_name if cloud_name else self.k8s_cloud - await self.libjuju.add_model( - model_name, - cloud_name=cloud, - credential_name=credential - ) + if not await self.libjuju.model_exists(model_name): + cloud = cloud_name or self.k8s_cloud + credential = credential_name or cloud_name if cloud_name else self.k8s_cloud + await self.libjuju.add_model( + model_name, + cloud_name=cloud, + credential_name=credential + ) application_name = self._get_application_name(namespace) try: @@ -762,7 +755,8 @@ class N2VCJujuConnector(N2VCConnector): self.log.info("Namespace {} deleted".format(namespace)) async def delete_execution_environment( - self, ee_id: str, db_dict: dict = None, total_timeout: float = None + self, ee_id: str, db_dict: dict = None, total_timeout: float = None, + scaling_in: bool = False ): self.log.info("Deleting execution environment ee_id={}".format(ee_id)) @@ -775,12 +769,20 @@ class N2VCJujuConnector(N2VCConnector): model_name, application_name, _machine_id = self._get_ee_id_components( ee_id=ee_id ) - - # destroy the application try: - await self.libjuju.destroy_model( - model_name=model_name, total_timeout=total_timeout - ) + if not scaling_in: + # destroy the model + # TODO: should this be removed? + await self.libjuju.destroy_model( + model_name=model_name, total_timeout=total_timeout + ) + else: + # get juju model and observer + controller = await self.libjuju.get_controller() + model = await self.libjuju.get_model(controller, model_name) + # destroy the application + await self.libjuju.destroy_application( + model=model, application_name=application_name) except Exception as e: raise N2VCException( message=(