Ns descriptor related stuffs. 01/62101/4
authorlaili <lai.li@zte.com.cn>
Thu, 23 Aug 2018 12:44:01 +0000 (20:44 +0800)
committerFu Jinhua <fu.jinhua@zte.com.cn>
Fri, 24 Aug 2018 02:57:48 +0000 (02:57 +0000)
Implement nsd content process.

Change-Id: I6a5909690f701259edfbd8b829dfc16db1122aaf
Issue-ID: VFC-1037
Signed-off-by: laili <lai.li@zte.com.cn>
catalog/packages/biz/ns_descriptor.py

index 97244ad..6eaa118 100644 (file)
@@ -22,6 +22,7 @@ from catalog.pub.utils import fileutil
 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__)
 
@@ -155,6 +156,36 @@ def upload(remote_file, nsd_info_id):
             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():