def delete_vnf_pkg(self, vnf_pkg_id): """ Delete a VNF package by give id :param vnf_pkg_id: The id of VNF package :return: """ vnf_pkg = VnfPackageModel.objects.filter(vnfPackageId=vnf_pkg_id) if not vnf_pkg.exists(): logger.debug('VNF package(%s) has been deleted.' % vnf_pkg_id) return ''' if vnf_pkg[0].operationalState != PKG_STATUS.DISABLED: raise CatalogException("The VNF package (%s) is not disabled" % vnf_pkg_id) if vnf_pkg[0].usageState != PKG_STATUS.NOT_IN_USE: raise CatalogException("The VNF package (%s) is in use" % vnf_pkg_id) ''' del_vnfd_id = vnf_pkg[0].vnfdId ns_pkgs = NSPackageModel.objects.all() for ns_pkg in ns_pkgs: nsd_model = None if ns_pkg.nsdModel: nsd_model = json.JSONDecoder().decode(ns_pkg.nsdModel) if not nsd_model: continue for vnf in nsd_model['vnfs']: if del_vnfd_id == vnf["properties"]["descriptor_id"]: raise CatalogException('VNFD(%s) is referenced.' % del_vnfd_id) vnf_pkg.delete() send_notification(vnf_pkg_id, const.PKG_NOTIFICATION_TYPE.CHANGE, const.PKG_CHANGE_TYPE.PKG_DELETE) vnf_pkg_path = os.path.join(CATALOG_ROOT_PATH, vnf_pkg_id) fileutil.delete_dirs(vnf_pkg_path) logger.info('VNF package(%s) has been deleted.' % vnf_pkg_id)
def delete_single(self, nsd_info_id): """ Delete NSD package by id :param nsd_info_id: :return: """ logger.info('Start to delete NSD(%s)...' % nsd_info_id) ns_pkgs = NSPackageModel.objects.filter(nsPackageId=nsd_info_id) if not ns_pkgs.exists(): logger.info('NSD(%s) has been deleted.' % nsd_info_id) return ''' if ns_pkgs[0].operationalState != PKG_STATUS.DISABLED: logger.error('NSD(%s) shall be DISABLED.' % nsd_info_id) raise CatalogException('NSD(%s) shall be DISABLED.' % nsd_info_id) if ns_pkgs[0].usageState != PKG_STATUS.NOT_IN_USE: logger.error('NSD(%s) shall be NOT_IN_USE.' % nsd_info_id) raise CatalogException('NSD(%s) shall be NOT_IN_USE.' % nsd_info_id) ''' ns_pkgs.delete() ns_pkg_path = os.path.join(CATALOG_ROOT_PATH, nsd_info_id) fileutil.delete_dirs(ns_pkg_path) send_notification(const.NSD_NOTIFICATION_TYPE.NSD_DELETION, nsd_info_id) logger.info('NSD(%s) has been deleted.' % nsd_info_id)
def delete_single(self, pnfd_info_id): """ Delete PNF package by id :param pnfd_info_id: :return: """ logger.info('Start to delete PNFD(%s)...' % pnfd_info_id) pnf_pkgs = PnfPackageModel.objects.filter(pnfPackageId=pnfd_info_id) if not pnf_pkgs.exists(): logger.info('PNFD(%s) has been deleted.' % pnfd_info_id) return ''' if pnf_pkgs[0].usageState != PKG_STATUS.NOT_IN_USE: logger.info('PNFD(%s) shall be NOT_IN_USE.' % pnfd_info_id) raise CatalogException('PNFD(%s) shall be NOT_IN_USE.' % pnfd_info_id) ''' del_pnfd_id = pnf_pkgs[0].pnfdId ns_pkgs = NSPackageModel.objects.all() for ns_pkg in ns_pkgs: nsd_model = None if ns_pkg.nsdModel: nsd_model = json.JSONDecoder().decode(ns_pkg.nsdModel) if not nsd_model: continue for pnf in nsd_model['pnfs']: if del_pnfd_id == pnf["properties"]["id"]: logger.warn("PNFD(%s) is referenced in NSD", del_pnfd_id) raise CatalogException('PNFD(%s) is referenced.' % pnfd_info_id) pnf_pkgs.delete() pnf_pkg_path = os.path.join(CATALOG_ROOT_PATH, pnfd_info_id) fileutil.delete_dirs(pnf_pkg_path) send_notification(const.NSD_NOTIFICATION_TYPE.PNFD_DELETION, pnfd_info_id, del_pnfd_id) logger.debug('PNFD(%s) has been deleted.' % pnfd_info_id)
def rollback_distribute(self): try: VnfPackageModel.objects.filter(vnfPackageId=self.csar_id).delete() fileutil.delete_dirs(self.csar_save_path) except Exception as e: logger.error(e.args[0]) logger.error(traceback.format_exc()) logger.error(str(sys.exc_info()))
def delete_csar(self): JobUtil.create_job(inst_type='nf', jobaction='delete', inst_id=self.csar_id, job_id=self.job_id) JobUtil.add_job_status(self.job_id, 5, "Start to delete CSAR(%s)." % self.csar_id) send_notification(self.csar_id, const.PKG_NOTIFICATION_TYPE.CHANGE, const.PKG_CHANGE_TYPE.PKG_DELETE) VnfPackageModel.objects.filter(vnfPackageId=self.csar_id).delete() JobUtil.add_job_status(self.job_id, 50, "Delete local CSAR(%s) file." % self.csar_id) csar_save_path = os.path.join(CATALOG_ROOT_PATH, self.csar_id) fileutil.delete_dirs(csar_save_path) JobUtil.add_job_status(self.job_id, 100, "Delete CSAR(%s) successfully." % self.csar_id)
def delete_single(self, serviced_info_id): """ Delete a service package by given id :param serviced_info_id: :return: """ logger.info('Start to delete ServiceD(%s)...' % serviced_info_id) service_pkgs = ServicePackageModel.objects.filter( servicePackageId=serviced_info_id) if not service_pkgs.exists(): logger.warn('ServiceD(%s) not found.' % serviced_info_id) raise PackageNotFoundException("Service package[%s] not Found." % serviced_info_id) service_pkgs.delete() # Delete package dir service_pkg_path = os.path.join(CATALOG_ROOT_PATH, serviced_info_id) fileutil.delete_dirs(service_pkg_path) logger.info('ServiceD(%s) has been deleted.' % serviced_info_id)
def creat_vnfd(self, vnf_pkg_id, vendor_pkg_file): """ Create VNFD zip file from vendor original package :param self: :param vnf_pkg_id: VNF package id (CSAR id) :param vendor_pkg_file: vendor original package :return: """ vnf_package_path = os.path.join(CATALOG_ROOT_PATH, vnf_pkg_id) if not os.path.exists(vnf_package_path): os.makedirs(vnf_package_path) vnfd_zip_file = os.path.join(vnf_package_path, "VNFD.zip") if os.path.exists(vnfd_zip_file): return vnfd_zip_file else: if vendor_pkg_file.endswith(".csar") or vendor_pkg_file.endswith( ".zip"): try: vnfd_path = os.path.join(vnf_package_path, "vnfd") with zipfile.ZipFile(vendor_pkg_file, 'r') as vendor_zip: vender_files = vendor_zip.namelist() for vender_file in vender_files: if str(vender_file).startswith("Definitions"): vendor_zip.extract(vender_file, vnfd_path) with zipfile.ZipFile(vnfd_zip_file, 'w', zipfile.ZIP_DEFLATED) as vnfd_zip: def_path = os.path.join(vnfd_path, "Definitions") if os.path.exists(def_path): def_files = os.listdir(def_path) for def_file in def_files: full_path = os.path.join(def_path, def_file) vnfd_zip.write(full_path, def_file) return vnfd_zip_file except Exception as e: logger.error(e) if os.path.exists(vnfd_zip): os.remove(vnfd_zip) raise e finally: fileutil.delete_dirs(vnfd_path)