예제 #1
0
    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)
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
 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()))
예제 #5
0
    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)
예제 #7
0
 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)