diff options
author | 2019-09-04 09:52:48 +0800 | |
---|---|---|
committer | 2019-09-04 16:09:26 +0800 | |
commit | a32c2b20207885d895bd96204cc166fca14db97b (patch) | |
tree | 1edd33368158dc5f057a0a9475dced3df6c3b24c /genericparser/packages/biz/sdc_vnf_package.py | |
parent | 431a5a35a8e0a26d21c663167303696db8a7a2a6 (diff) |
update for change to etsicatalog
Change-Id: Idc2a6950960a324964500a8c4701be422de2b782
Issue-ID: MODELING-216
Signed-off-by: dyh <dengyuanhong@chinamobile.com>
Diffstat (limited to 'genericparser/packages/biz/sdc_vnf_package.py')
-rw-r--r-- | genericparser/packages/biz/sdc_vnf_package.py | 254 |
1 files changed, 0 insertions, 254 deletions
diff --git a/genericparser/packages/biz/sdc_vnf_package.py b/genericparser/packages/biz/sdc_vnf_package.py deleted file mode 100644 index 3a271b7..0000000 --- a/genericparser/packages/biz/sdc_vnf_package.py +++ /dev/null @@ -1,254 +0,0 @@ -# Copyright 2017 ZTE Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import json -import logging -import os -import sys -import threading -import traceback - -from genericparser.packages.const import PKG_STATUS -from genericparser.pub.config.config import GENERICPARSER_ROOT_PATH, GENERICPARSER_URL_PATH -from genericparser.pub.config.config import REG_TO_MSB_REG_PARAM -from genericparser.pub.database.models import VnfPackageModel -from genericparser.pub.exceptions import GenericparserException -from genericparser.pub.msapi import sdc -from genericparser.pub.utils import fileutil -from genericparser.pub.utils import toscaparsers -from genericparser.pub.utils.jobutil import JobUtil - -logger = logging.getLogger(__name__) - -JOB_ERROR = 255 - - -def nf_get_csars(): - ret = None - try: - ret = NfPackage().get_csars() - except GenericparserException as e: - return [1, e.args[0]] - except Exception as e: - logger.error(e.args[0]) - logger.error(traceback.format_exc()) - return [1, str(sys.exc_info())] - return ret - - -def nf_get_csar(csar_id): - ret = None - try: - ret = NfPackage().get_csar(csar_id) - except GenericparserException as e: - return [1, e.args[0]] - except Exception as e: - logger.error(e.args[0]) - logger.error(traceback.format_exc()) - return [1, str(sys.exc_info())] - return ret - - -def parse_vnfd(csar_id, inputs): - ret = None - try: - nf_pkg = VnfPackageModel.objects.filter(vnfPackageId=csar_id) - if not nf_pkg: - raise GenericparserException("VNF CSAR(%s) does not exist." % csar_id) - csar_path = nf_pkg[0].localFilePath - ret = {"model": toscaparsers.parse_vnfd(csar_path, inputs)} - except GenericparserException as e: - return [1, e.args[0]] - except Exception as e: - logger.error(e.args[0]) - logger.error(traceback.format_exc()) - return [1, str(sys.exc_info())] - return [0, ret] - - -class NfDistributeThread(threading.Thread): - """ - Sdc NF Package Distribute - """ - - def __init__(self, csar_id, vim_ids, lab_vim_id, job_id): - threading.Thread.__init__(self) - self.csar_id = csar_id - self.vim_ids = vim_ids - self.lab_vim_id = lab_vim_id - self.job_id = job_id - - self.csar_save_path = os.path.join(GENERICPARSER_ROOT_PATH, csar_id) - - def run(self): - try: - self.on_distribute() - except GenericparserException as e: - self.rollback_distribute() - JobUtil.add_job_status(self.job_id, JOB_ERROR, e.args[0]) - except Exception as e: - logger.error(e.args[0]) - logger.error(traceback.format_exc()) - logger.error(str(sys.exc_info())) - self.rollback_distribute() - JobUtil.add_job_status(self.job_id, JOB_ERROR, "Failed to distribute CSAR(%s)" % self.csar_id) - - def on_distribute(self): - JobUtil.create_job( - inst_type='nf', - jobaction='on_distribute', - inst_id=self.csar_id, - job_id=self.job_id) - JobUtil.add_job_status(self.job_id, 5, "Start CSAR(%s) distribute." % self.csar_id) - - if VnfPackageModel.objects.filter(vnfPackageId=self.csar_id): - err_msg = "NF CSAR(%s) already exists." % self.csar_id - JobUtil.add_job_status(self.job_id, JOB_ERROR, err_msg) - return - - artifact = sdc.get_artifact(sdc.ASSETTYPE_RESOURCES, self.csar_id) - local_path = os.path.join(GENERICPARSER_ROOT_PATH, self.csar_id) - csar_name = "%s.csar" % artifact.get("name", self.csar_id) - local_file_name = sdc.download_artifacts(artifact["toscaModelURL"], local_path, csar_name) - if local_file_name.endswith(".csar") or local_file_name.endswith(".zip"): - artifact_vnf_file = fileutil.unzip_file(local_file_name, local_path, "Artifacts/Deployment/OTHER/vnf.csar") - if os.path.exists(artifact_vnf_file): - local_file_name = artifact_vnf_file - - vnfd_json = toscaparsers.parse_vnfd(local_file_name) - vnfd = json.JSONDecoder().decode(vnfd_json) - - if not vnfd.get("vnf"): - raise GenericparserException("VNF properties and metadata in VNF Package(id=%s) are empty." % self.csar_id) - - vnfd_id = vnfd["vnf"]["properties"].get("descriptor_id", "") - if VnfPackageModel.objects.filter(vnfdId=vnfd_id): - logger.error("VNF package(%s) already exists.", vnfd_id) - raise GenericparserException("VNF package(%s) already exists." % vnfd_id) - JobUtil.add_job_status(self.job_id, 30, "Save CSAR(%s) to database." % self.csar_id) - vnfd_ver = vnfd["vnf"]["properties"].get("descriptor_version", "") - vnf_provider = vnfd["vnf"]["properties"].get("provider", "") - vnf_software_version = vnfd["vnf"]["properties"].get("software_version", "") - vnfd_product_name = vnfd["vnf"]["properties"].get("product_name", "") - VnfPackageModel( - vnfPackageId=self.csar_id, - vnfdId=vnfd_id, - vnfVendor=vnf_provider, - vnfdProductName=vnfd_product_name, - vnfdVersion=vnfd_ver, - vnfSoftwareVersion=vnf_software_version, - vnfdModel=vnfd_json, - localFilePath=local_file_name, - vnfPackageUri=csar_name, - onboardingState=PKG_STATUS.ONBOARDED, - operationalState=PKG_STATUS.ENABLED, - usageState=PKG_STATUS.NOT_IN_USE - ).save() - JobUtil.add_job_status(self.job_id, 100, "CSAR(%s) distribute successfully." % self.csar_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())) - - -class NfPkgDeleteThread(threading.Thread): - """ - Sdc NF Package Deleting - """ - - def __init__(self, csar_id, job_id): - threading.Thread.__init__(self) - self.csar_id = csar_id - self.job_id = job_id - - def run(self): - try: - self.delete_csar() - except GenericparserException as e: - JobUtil.add_job_status(self.job_id, JOB_ERROR, e.args[0]) - except Exception as e: - logger.error(e.args[0]) - logger.error(traceback.format_exc()) - logger.error(str(sys.exc_info())) - JobUtil.add_job_status(self.job_id, JOB_ERROR, "Failed to delete CSAR(%s)" % self.csar_id) - - 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) - - 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(GENERICPARSER_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) - - -class NfPackage(object): - """ - Actions for sdc nf package. - """ - - def __init__(self): - pass - - def get_csars(self): - csars = [] - nf_pkgs = VnfPackageModel.objects.filter() - for nf_pkg in nf_pkgs: - ret = self.get_csar(nf_pkg.vnfPackageId) - csars.append(ret[1]) - return [0, csars] - - def get_csar(self, csar_id): - pkg_info = {} - nf_pkg = VnfPackageModel.objects.filter(vnfPackageId=csar_id) - if not nf_pkg: - nf_pkg = VnfPackageModel.objects.filter(vnfdId=csar_id) - - if nf_pkg: - db_csar_id = nf_pkg[0].vnfPackageId - pkg_info["vnfdId"] = nf_pkg[0].vnfdId - pkg_info["vnfPackageId"] = nf_pkg[0].vnfPackageId - pkg_info["vnfdProvider"] = nf_pkg[0].vnfVendor - pkg_info["vnfdVersion"] = nf_pkg[0].vnfdVersion - pkg_info["vnfVersion"] = nf_pkg[0].vnfSoftwareVersion - pkg_info["csarName"] = nf_pkg[0].vnfPackageUri - pkg_info["vnfdModel"] = nf_pkg[0].vnfdModel - pkg_info["downloadUrl"] = "http://%s:%s/%s/%s/%s" % ( - REG_TO_MSB_REG_PARAM[0]["nodes"][0]["ip"], - REG_TO_MSB_REG_PARAM[0]["nodes"][0]["port"], - GENERICPARSER_URL_PATH, - db_csar_id, - nf_pkg[0].vnfPackageUri) - else: - raise GenericparserException("Vnf package[%s] not Found." % csar_id) - - csar_info = { - "csarId": db_csar_id, - "packageInfo": pkg_info, - "imageInfo": [] - } - return [0, csar_info] |