+ async def _on_update_k8s_db(self, cluster_uuid, kdu_instance, filter=None):
+ """
+ Updating vca status in NSR record
+ :param cluster_uuid: UUID of a k8s cluster
+ :param kdu_instance: The unique name of the KDU instance
+ :param filter: To get nsr_id
+ :return: none
+ """
+
+ # self.logger.debug("_on_update_k8s_db(cluster_uuid={}, kdu_instance={}, filter={}"
+ # .format(cluster_uuid, kdu_instance, filter))
+
+ try:
+ nsr_id = filter.get('_id')
+
+ # get vca status for NS
+ vca_status = await self.k8sclusterjuju.status_kdu(cluster_uuid,
+ kdu_instance,
+ complete_status=True,
+ yaml_format=False)
+ # vcaStatus
+ db_dict = dict()
+ db_dict['vcaStatus'] = {nsr_id: vca_status}
+
+ await self.k8sclusterjuju.update_vcaStatus(db_dict['vcaStatus'], cluster_uuid,
+ kdu_instance)
+
+ # write to database
+ self.update_db_2("nsrs", nsr_id, db_dict)
+
+ except (asyncio.CancelledError, asyncio.TimeoutError):
+ raise
+ except Exception as e:
+ self.logger.warn('Error updating NS state for ns={}: {}'.format(nsr_id, e))
+
+ @staticmethod
+ def _parse_cloud_init(cloud_init_text, additional_params, vnfd_id, vdu_id):
+ try:
+ env = Environment(undefined=StrictUndefined)
+ template = env.from_string(cloud_init_text)
+ return template.render(additional_params or {})
+ except UndefinedError as e:
+ raise LcmException("Variable {} at vnfd[id={}]:vdu[id={}]:cloud-init/cloud-init-"
+ "file, must be provided in the instantiation parameters inside the "
+ "'additionalParamsForVnf/Vdu' block".format(e, vnfd_id, vdu_id))
+ except (TemplateError, TemplateNotFound) as e:
+ raise LcmException("Error parsing Jinja2 to cloud-init content at vnfd[id={}]:vdu[id={}]: {}".
+ format(vnfd_id, vdu_id, e))
+
+ def _get_cloud_init(self, vdu, vnfd):
+ try:
+ cloud_init_content = cloud_init_file = None
+ 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"])
+ with self.fs.file_open(cloud_init_file, "r") as ci_file:
+ cloud_init_content = ci_file.read()
+ elif vdu.get("cloud-init"):
+ cloud_init_content = vdu["cloud-init"]
+
+ return cloud_init_content
+ except FsException as e:
+ raise LcmException("Error reading vnfd[id={}]:vdu[id={}]:cloud-init-file={}: {}".
+ format(vnfd["id"], vdu["id"], cloud_init_file, e))
+
+ def _get_osm_params(self, db_vnfr, vdu_id=None, vdu_count_index=0):
+ osm_params = {x.replace("-", "_"): db_vnfr[x] for x in ("ip-address", "vim-account-id", "vnfd-id", "vnfd-ref")
+ if db_vnfr.get(x) is not None}
+ osm_params["ns_id"] = db_vnfr["nsr-id-ref"]
+ osm_params["vnf_id"] = db_vnfr["_id"]
+ osm_params["member_vnf_index"] = db_vnfr["member-vnf-index-ref"]
+ if db_vnfr.get("vdur"):
+ osm_params["vdu"] = {}
+ for vdur in db_vnfr["vdur"]:
+ vdu = {
+ "count_index": vdur["count-index"],
+ "vdu_id": vdur["vdu-id-ref"],
+ "interfaces": {}
+ }
+ if vdur.get("ip-address"):
+ vdu["ip_address"] = vdur["ip-address"]
+ for iface in vdur["interfaces"]:
+ vdu["interfaces"][iface["name"]] = \
+ {x.replace("-", "_"): iface[x] for x in ("mac-address", "ip-address", "vnf-vld-id", "name")
+ if iface.get(x) is not None}
+ vdu_id_index = "{}-{}".format(vdur["vdu-id-ref"], vdur["count-index"])
+ osm_params["vdu"][vdu_id_index] = vdu
+ if vdu_id:
+ osm_params["vdu_id"] = vdu_id
+ osm_params["count_index"] = vdu_count_index
+ return osm_params
+
+ def _get_vdu_additional_params(self, db_vnfr, vdu_id):
+ vdur = next(vdur for vdur in db_vnfr.get("vdur") if vdu_id == vdur["vdu-id-ref"])
+ additional_params = vdur.get("additionalParams")
+ return self._format_additional_params(additional_params)
+