logger.info('NSD(%s) has been downloaded.' % nsd_info_id)
return read(local_file_path, start, end)
- def parse_nsd_and_save(self, nsd_info_id, local_file_name, isETSI=True):
+ def parse_nsd_and_save(self, nsd_info_id, local_file_name):
logger.info('Start to process NSD(%s)...' % nsd_info_id)
ns_pkgs = NSPackageModel.objects.filter(nsPackageId=nsd_info_id)
ns_pkgs.update(onboardingState=PKG_STATUS.PROCESSING)
- nsd_json = toscaparser.parse_nsd(local_file_name, isETSI)
+ nsd_json = toscaparser.parse_nsd(local_file_name)
logger.debug("%s", nsd_json)
nsd = json.JSONDecoder().decode(nsd_json)
from catalog.pub.msapi import sdc
from catalog.pub.utils import toscaparser
from catalog.packages.biz.ns_descriptor import NsDescriptor
+from catalog.pub.utils import fileutil
logger = logging.getLogger(__name__)
local_path = os.path.join(CATALOG_ROOT_PATH, csar_id)
csar_name = "%s.csar" % artifact.get("name", 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/ns.csar")
+ if os.path.exists(artifact_vnf_file):
+ local_file_name = artifact_vnf_file
data = {
'userDefinedData': ""
}
nsd = NsDescriptor()
nsd.create(data, csar_id)
- nsd.parse_nsd_and_save(csar_id, local_file_name, False)
+ nsd.parse_nsd_and_save(csar_id, local_file_name)
return [0, "CSAR(%s) distributed successfully." % csar_id]
def delete_csar(self, csar_id):
local_path = os.path.join(CATALOG_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 = toscaparser.parse_vnfd(local_file_name)
vnfd = json.JSONDecoder().decode(vnfd_json)
- nfd_id = vnfd["metadata"]["id"]
- if VnfPackageModel.objects.filter(vnfdId=nfd_id):
- raise CatalogException("NFD(%s) already exists." % nfd_id)
+ if not vnfd.get("vnf"):
+ raise CatalogException("VNF propeties 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 CatalogException("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["metadata"].get("vnfd_version")
- if not vnfd_ver:
- vnfd_ver = vnfd["metadata"].get("vnfdVersion", "undefined")
+ vnfd_ver = vnfd["vnf"]["properties"].get("descriptor_verison", "")
+ vnf_provider = vnfd["vnf"]["properties"].get("provider", "")
+ vnf_software_version = vnfd["vnf"]["properties"].get("software_version", "")
VnfPackageModel(
vnfPackageId=self.csar_id,
- vnfdId=nfd_id,
- vnfVendor=vnfd["metadata"].get("vendor", "undefined"),
+ vnfdId=vnfd_id,
+ vnfVendor=vnf_provider,
vnfdVersion=vnfd_ver,
- vnfSoftwareVersion=vnfd["metadata"].get("version", "undefined"),
+ vnfSoftwareVersion=vnf_software_version,
vnfdModel=vnfd_json,
localFilePath=local_file_name,
vnfPackageUri=csar_name
).save()
-
JobUtil.add_job_status(self.job_id, 100, "CSAR(%s) distribute successfully." % self.csar_id)
def rollback_distribute(self):
pkg_info["csarName"] = nf_pkg[0].vnfPackageUri
pkg_info["vnfdModel"] = nf_pkg[0].vnfdModel
pkg_info["downloadUrl"] = "http://%s:%s/%s/%s/%s" % (
- MSB_SERVICE_IP,
+ MSB_SERVICE_IP, # REG_TO_MSB_REG_PARAM[0]["nodes"][0]["ip"],
REG_TO_MSB_REG_PARAM[0]["nodes"][0]["port"],
CATALOG_URL_PATH,
csar_id,
if other_pkg and other_pkg[0].vnfPackageId != vnf_pkg_id:
logger.error("VNF package(%s,%s) already exists.", other_pkg[0].vnfPackageId, vnfd_id)
raise CatalogException("VNF package(%s) already exists." % vnfd_id)
- vnf_provider = vnfd["vnf"].get("provider", "")
+ vnf_provider = vnfd["vnf"]["properties"].get("provider", "")
vnfd_ver = vnfd["vnf"]["properties"].get("descriptor_verison", "")
vnf_software_version = vnfd["vnf"]["properties"].get("software_version", "")
vnfd_product_name = vnfd["vnf"]["properties"].get("product_name", "")
"vnfProductInfoDescription": "hss",
"vnfdVersion": "1.0.0",
"vnfProductInfoName": "hss"
+ },
+ "vnf": {
+ "properties": {
+ "descriptor_id": "zte-hss-1.0",
+ "descriptor_verison": "1.0.0",
+ "software_version": "1.0.0",
+ "provider": "zte"
+ },
+ "metadata": {
+ }
}
}
vim_ids=["1"],
lab_vim_id="",
job_id="2").run()
- self.assert_job_result("2", 255, "NFD(zte-hss-1.0) already exists.")
+ self.assert_job_result("2", 255, "VNF package(zte-hss-1.0) already exists.")
@mock.patch.object(restcall, 'call_req')
@mock.patch.object(sdc, 'download_artifacts')
import logging
import traceback
import urllib2
+import zipfile
+
logger = logging.getLogger(__name__)
logger.error(traceback.format_exc())
logger.error("Failed to download %s to %s.", url, local_file_name)
return is_download_ok, local_file_name
+
+
+def unzip_file(zip_src, dst_dir, csar_path):
+ if os.path.exists(zip_src):
+ fz = zipfile.ZipFile(zip_src, 'r')
+ for file in fz.namelist():
+ fz.extract(file, dst_dir)
+ return os.path.join(dst_dir, csar_path)
+ else:
+ return ""