Deal with nfPackage 07/62007/1
authorbiancunkang <bian.cunkang@zte.com.cn>
Thu, 23 Aug 2018 07:44:54 +0000 (15:44 +0800)
committerbiancunkang <bian.cunkang@zte.com.cn>
Thu, 23 Aug 2018 07:44:54 +0000 (15:44 +0800)
add parse_vnfd_and_save for upload

Change-Id: I7daf2fd740f58bf23f04a78d9b5f6bfcfd1b96e0
Issue-ID: VFC-1038
Signed-off-by: biancunkang <bian.cunkang@zte.com.cn>
catalog/packages/biz/vnf_package.py

index a98336d..1fb1aee 100644 (file)
@@ -12,6 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import json
 import logging
 import os
 import sys
@@ -24,7 +25,8 @@ from catalog.pub.config.config import CATALOG_ROOT_PATH
 from catalog.pub.database.models import VnfPackageModel
 from catalog.pub.exceptions import CatalogException
 from catalog.pub.utils.values import ignore_case_get
-from catalog.pub.utils import fileutil
+from catalog.pub.utils import fileutil, toscaparser
+
 
 logger = logging.getLogger(__name__)
 
@@ -99,6 +101,30 @@ def delete_vnf_pkg(vnfPkgId):
     fileutil.delete_dirs(vnf_pkg_path)
 
 
+def parse_vnfd_and_save(vnfPkgId, vnf_pkg_path):
+    vnfd_json = toscaparser.parse_vnfd(vnf_pkg_path)
+    vnfd = json.JSONDecoder().decode(vnfd_json)
+
+    vnfd_id = vnfd["metadata"]["id"]
+    if VnfPackageModel.objects.filter(vnfdId=vnfd_id):
+        raise CatalogException("VNFD(%s) already exists." % vnfd_id)
+
+    vnfd_ver = vnfd["metadata"].get("vnfd_version")
+    if not vnfd_ver:
+        vnfd_ver = vnfd["metadata"].get("vnfdVersion", "undefined")
+    VnfPackageModel(
+        vnfPackageId=vnfPkgId,
+        vnfdId=vnfd_id,
+        vnfVendor=vnfd["metadata"].get("vendor", "undefined"),
+        vnfdVersion=vnfd_ver,
+        vnfSoftwareVersion=vnfd["metadata"].get("version", "undefined"),
+        vnfdModel=vnfd_json,
+        onboardingState="ONBOARDED",
+        operationalState="ENABLED",
+        usageState="NOT_IN_USE"
+    ).save()
+
+
 class VnfpkgUploadThread(threading.Thread):
     def __init__(self, data, vnfPkgId):
         threading.Thread.__init__(self)