import logging
import os
+from n2vc.config import ModelConfig
from n2vc.exceptions import (
N2VCBadArgumentsException,
N2VCException,
)
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
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,
log=self.log,
db=self.db,
n2vc=self,
+ model_config=model_config,
)
# create juju pub key file in lcm container at
for m in models:
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,
_, 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:
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))
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=(
).format(ee_id, application_name, e)
)
- # destroy the machine
- # try:
- # await self._juju_destroy_machine(
- # model_name=model_name,
- # machine_id=machine_id,
- # total_timeout=total_timeout
- # )
- # except Exception as e:
- # raise N2VCException(
- # message='Error deleting execution environment {} (machine {}) : {}'
- # .format(ee_id, machine_id, e))
-
self.log.info("Execution environment {} deleted".format(ee_id))
async def exec_primitive(