from catalog.pub.utils.values import ignore_case_get
from catalog.pub.database.models import NSPackageModel, VnfPackageModel
from catalog.pub.exceptions import CatalogException
+from catalog.pub.utils import toscaparser
logger = logging.getLogger(__name__)
local_file.write(data)
+def process(nsd_info_id, local_file_name):
+ nsd_json = toscaparser.parse_nsd(local_file_name)
+ nsd = json.JSONDecoder().decode(nsd_json)
+
+ nsd_id = nsd["metadata"]["id"]
+ if nsd_id and NSPackageModel.objects.filter(nsdId=nsd_id): # nsd_id may not exist
+ raise CatalogException("NS Descriptor (%s) already exists." % nsd_id)
+
+ for vnf in nsd["vnfs"]:
+ vnfd_id = vnf["properties"]["id"]
+ pkg = VnfPackageModel.objects.filter(vnfdId=vnfd_id)
+ if not pkg:
+ vnfd_name = vnf.get("vnf_id", "undefined")
+ logger.error("[%s] is not distributed.", vnfd_name)
+ raise CatalogException("VNF package(%s) is not distributed." % vnfd_id)
+
+ NSPackageModel(
+ nsPackageId=nsd_info_id,
+ nsdId=nsd_id,
+ nsdName=nsd["metadata"].get("name", nsd_id),
+ nsdDesginer=nsd["metadata"].get("vendor", "undefined"),
+ nsdDescription=nsd["metadata"].get("description", ""),
+ nsdVersion=nsd["metadata"].get("version", "undefined"),
+ nsPackageUri=local_file_name, # TODO
+ sdcCsarId=nsd_info_id,
+ localFilePath=local_file_name,
+ nsdModel=nsd_json
+ ).save()
+
+
def download(nsd_info_id):
ns_pkgs = NSPackageModel.objects.filter(nsPackageId=nsd_info_id)
if not ns_pkgs.exists():