X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_lcm%2Fns.py;h=7833df0c3d9c15c881d0a8b1d56f6addeaa03a68;hb=refs%2Fchanges%2F57%2F11457%2F2;hp=9e9c1f666a97bfe559bceebad6d0d7fbd35da7ec;hpb=1f40aa9a0086a2355fed4db10ca8347b2cb771b3;p=osm%2FLCM.git diff --git a/osm_lcm/ns.py b/osm_lcm/ns.py index 9e9c1f6..7833df0 100644 --- a/osm_lcm/ns.py +++ b/osm_lcm/ns.py @@ -96,6 +96,7 @@ from n2vc.n2vc_juju_conn import N2VCJujuConnector from n2vc.exceptions import N2VCException, N2VCNotFound, K8sException from osm_lcm.lcm_helm_conn import LCMHelmConn +from osm_lcm.prometheus import parse_job from copy import copy, deepcopy from time import time @@ -123,7 +124,7 @@ class NsLcm(LcmBase): SUBOPERATION_STATUS_SKIP = -3 task_name_deploy_vca = "Deploying VCA" - def __init__(self, msg, lcm_tasks, config, loop, prometheus=None): + def __init__(self, msg, lcm_tasks, config, loop): """ Init, Connect to database, filesystem storage, and messaging :param config: two level dictionary with configuration. Top level should contain 'database', 'storage', @@ -200,8 +201,6 @@ class NsLcm(LcmBase): "helm-v3": self.conn_helm_ee, } - self.prometheus = prometheus - # create RO client self.RO = NgRoClient(self.loop, **self.ro_config) @@ -415,11 +414,17 @@ class NsLcm(LcmBase): try: if vdu.get("cloud-init-file"): base_folder = vnfd["_admin"]["storage"] - cloud_init_file = "{}/{}/cloud_init/{}".format( - base_folder["folder"], - base_folder["pkg-dir"], - vdu["cloud-init-file"], - ) + if base_folder["pkg-dir"]: + cloud_init_file = "{}/{}/cloud_init/{}".format( + base_folder["folder"], + base_folder["pkg-dir"], + vdu["cloud-init-file"], + ) + else: + cloud_init_file = "{}/Scripts/cloud_init/{}".format( + base_folder["folder"], + vdu["cloud-init-file"], + ) with self.fs.file_open(cloud_init_file, "r") as ci_file: cloud_init_content = ci_file.read() elif vdu.get("cloud-init"): @@ -1063,11 +1068,17 @@ class NsLcm(LcmBase): # read file and put content at target.cloul_init_content. Avoid ng_ro to use shared package system if vdur["cloud-init"] not in target["cloud_init_content"]: base_folder = vnfd["_admin"]["storage"] - cloud_init_file = "{}/{}/cloud_init/{}".format( - base_folder["folder"], - base_folder["pkg-dir"], - vdud.get("cloud-init-file"), - ) + if base_folder["pkg-dir"]: + cloud_init_file = "{}/{}/cloud_init/{}".format( + base_folder["folder"], + base_folder["pkg-dir"], + vdud.get("cloud-init-file"), + ) + else: + cloud_init_file = "{}/Scripts/cloud_init/{}".format( + base_folder["folder"], + vdud.get("cloud-init-file"), + ) with self.fs.file_open(cloud_init_file, "r") as ci_file: target["cloud_init_content"][ vdur["cloud-init"] @@ -1649,14 +1660,23 @@ class NsLcm(LcmBase): osm_config["osm"]["kdu_name"] = kdu_name # Get artifact path - artifact_path = "{}/{}/{}/{}".format( - base_folder["folder"], - base_folder["pkg-dir"], - "charms" - if vca_type in ("native_charm", "lxc_proxy_charm", "k8s_proxy_charm") - else "helm-charts", - vca_name, - ) + if base_folder["pkg-dir"]: + artifact_path = "{}/{}/{}/{}".format( + base_folder["folder"], + base_folder["pkg-dir"], + "charms" + if vca_type in ("native_charm", "lxc_proxy_charm", "k8s_proxy_charm") + else "helm-charts", + vca_name, + ) + else: + artifact_path = "{}/Scripts/{}/{}/".format( + base_folder["folder"], + "charms" + if vca_type in ("native_charm", "lxc_proxy_charm", "k8s_proxy_charm") + else "helm-charts", + vca_name, + ) self.logger.debug("Artifact path > {}".format(artifact_path)) @@ -1966,7 +1986,7 @@ class NsLcm(LcmBase): # STEP 7 Configure metrics if vca_type == "helm" or vca_type == "helm-v3": - prometheus_jobs = await self.add_prometheus_metrics( + prometheus_jobs = await self.extract_prometheus_scrape_jobs( ee_id=ee_id, artifact_path=artifact_path, ee_config_descriptor=ee_config_descriptor, @@ -1981,6 +2001,17 @@ class NsLcm(LcmBase): {db_update_entry + "prometheus_jobs": prometheus_jobs}, ) + for job in prometheus_jobs: + self.db.set_one( + "prometheus_jobs", + { + "job_name": job["job_name"] + }, + job, + upsert=True, + fail_on_empty=False + ) + step = "instantiated at VCA" self.logger.debug(logging_text + step) @@ -3303,16 +3334,21 @@ class NsLcm(LcmBase): db_vnfds, lambda vnfd: vnfd["_id"] == vnfd_id ) storage = deep_get(vnfd_with_id, ("_admin", "storage")) - if storage and storage.get( - "pkg-dir" - ): # may be not present if vnfd has not artifacts + if storage: # may be not present if vnfd has not artifacts # path format: /vnfdid/pkkdir/helm-charts|juju-bundles/kdumodel - filename = "{}/{}/{}s/{}".format( - storage["folder"], - storage["pkg-dir"], - k8sclustertype, - kdumodel, - ) + if storage["pkg-dir"]: + filename = "{}/{}/{}s/{}".format( + storage["folder"], + storage["pkg-dir"], + k8sclustertype, + kdumodel, + ) + else: + filename = "{}/Scripts/{}s/{}".format( + storage["folder"], + k8sclustertype, + kdumodel, + ) if self.fs.file_exists( filename, mode="file" ) or self.fs.file_exists(filename, mode="dir"): @@ -3920,8 +3956,9 @@ class NsLcm(LcmBase): "nsrs", db_nslcmop["nsInstanceId"], {db_update_entry: False} ) - if vca_deployed.get("prometheus_jobs") and self.prometheus: - await self.prometheus.update(remove_jobs=vca_deployed["prometheus_jobs"]) + # Delete Prometheus Jobs if any + # This uses NSR_ID, so it will destroy any jobs under this index + self.db.del_list("prometheus_jobs", {"nsr_id": db_nslcmop["nsInstanceId"]}) if destroy_ee: await self.vca_map[vca_type].delete_execution_environment( @@ -6306,11 +6343,15 @@ class NsLcm(LcmBase): db_vnfr, None, vdu_scaling_info["vdu-delete"], mark_delete=False ) - async def add_prometheus_metrics( - self, ee_id, artifact_path, ee_config_descriptor, vnfr_id, nsr_id, target_ip + async def extract_prometheus_scrape_jobs( + self, + ee_id, + artifact_path, + ee_config_descriptor, + vnfr_id, + nsr_id, + target_ip ): - if not self.prometheus: - return # look if exist a file called 'prometheus*.j2' and artifact_content = self.fs.dir_ls(artifact_path) job_file = next( @@ -6337,7 +6378,7 @@ class NsLcm(LcmBase): "EXPORTER_POD_IP": host_name, "EXPORTER_POD_PORT": host_port, } - job_list = self.prometheus.parse_job(job_data, variables) + job_list = parse_job(job_data, variables) # ensure job_name is using the vnfr_id. Adding the metadata nsr_id for job in job_list: if ( @@ -6346,9 +6387,8 @@ class NsLcm(LcmBase): ): job["job_name"] = vnfr_id + "_" + str(randint(1, 10000)) job["nsr_id"] = nsr_id - job_dict = {jl["job_name"]: jl for jl in job_list} - if await self.prometheus.update(job_dict): - return list(job_dict.keys()) + job["vnfr_id"] = vnfr_id + return job_list def get_vca_cloud_and_credentials(self, vim_account_id: str) -> (str, str): """