Add log and comment
[modeling/etsicatalog.git] / catalog / packages / biz / sdc_ns_package.py
index 4f9d460..72d41b1 100644 (file)
@@ -17,14 +17,14 @@ import os
 import sys
 import traceback
 
+from catalog.packages.biz.ns_descriptor import NsDescriptor
 from catalog.pub.config.config import CATALOG_ROOT_PATH, CATALOG_URL_PATH
 from catalog.pub.config.config import REG_TO_MSB_REG_PARAM
-from catalog.pub.database.models import NSPackageModel
+from catalog.pub.database.models import NSPackageModel, VnfPackageModel
 from catalog.pub.exceptions import CatalogException
 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
+from catalog.pub.utils import toscaparser
 
 logger = logging.getLogger(__name__)
 
@@ -38,6 +38,11 @@ def fmt_ns_pkg_rsp(status, desc, error_code="500"):
 
 
 def ns_on_distribute(csar_id):
+    """
+    Get NS pckage from SDC
+    :param csar_id:
+    :return:
+    """
     ret = None
     try:
         ret = NsPackage().on_distribute(csar_id)
@@ -54,6 +59,11 @@ def ns_on_distribute(csar_id):
 
 
 def ns_delete_csar(csar_id):
+    """
+    Delete NS package
+    :param csar_id:
+    :return:
+    """
     ret = None
     try:
         ret = NsPackage().delete_csar(csar_id)
@@ -66,6 +76,10 @@ def ns_delete_csar(csar_id):
 
 
 def ns_get_csars():
+    """
+    Get NS packages
+    :return:
+    """
     ret = None
     try:
         ret = NsPackage().get_csars()
@@ -78,6 +92,11 @@ def ns_get_csars():
 
 
 def ns_get_csar(csar_id):
+    """
+    Get NS package by id
+    :param csar_id:
+    :return:
+    """
     ret = None
     try:
         ret = NsPackage().get_csar(csar_id)
@@ -91,6 +110,12 @@ def ns_get_csar(csar_id):
 
 
 def parse_nsd(csar_id, inputs):
+    """
+    Parse NSD
+    :param csar_id:
+    :param inputs:
+    :return:
+    """
     ret = None
     try:
         ns_pkg = NSPackageModel.objects.filter(nsPackageId=csar_id)
@@ -116,13 +141,32 @@ class NsPackage(object):
         pass
 
     def on_distribute(self, csar_id):
+        """
+        Fetch NS package csar from SDC
+        :param csar_id:
+        :return:
+        """
         if NSPackageModel.objects.filter(nsPackageId=csar_id):
             return [1, "NS CSAR(%s) already exists." % csar_id]
 
-        artifact = sdc.get_artifact(sdc.ASSETTYPE_SERVICES, csar_id)
+        ns = sdc.get_asset(sdc.ASSETTYPE_SERVICES, csar_id)
+        # check if the related resources exist
+        resources = ns.get('resources', None)
+        if resources:
+            for resource in resources:
+                if resource['resoucreType'].upper == 'VF' and not VnfPackageModel.objects.filter(
+                        vnfPackageId=resource['resourceUUID']):
+                    logger.error("VF [%s] is not distributed.", resource['resourceUUID'])
+                    raise CatalogException("VF (%s) is not distributed." % resource['resourceUUID'])
+                # if resource['resoucreType'] == 'PNF' and not PnfPackageModel.objects.filter(
+                #         pnfPackageId=resource['resourceUUID']):
+                #     logger.error("PNF [%s] is not distributed.", resource['resourceUUID'])
+                #     raise CatalogException("PNF (%s) is not distributed." % resource['resourceUUID'])
+
+        # download csar package
         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)
+        csar_name = "%s.csar" % ns.get("name", csar_id)
+        local_file_name = sdc.download_artifacts(ns["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):
@@ -137,11 +181,20 @@ class NsPackage(object):
         return [0, "CSAR(%s) distributed successfully." % csar_id]
 
     def delete_csar(self, csar_id):
+        """
+        Delete NS package by id
+        :param csar_id:
+        :return:
+        """
         nsd = NsDescriptor()
         nsd.delete_single(csar_id)
         return [0, "Delete CSAR(%s) successfully." % csar_id]
 
     def get_csars(self):
+        """
+        Get ns packages
+        :return:
+        """
         csars = []
         nss = NSPackageModel.objects.filter()
         for ns in nss:
@@ -150,6 +203,11 @@ class NsPackage(object):
         return [0, csars]
 
     def get_csar(self, csar_id):
+        """
+        Get NS package by id
+        :param csar_id:
+        :return:
+        """
         package_info = {}
         csars = NSPackageModel.objects.filter(nsPackageId=csar_id)
         if csars: