import json
import logging
-
-import traceback
-import sys
import os
+import sys
+import traceback
-from catalog.pub.database.models import NSDModel, NfPackageModel
-from catalog.pub.utils.values import ignore_case_get
+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, VnfPackageModel
from catalog.pub.exceptions import CatalogException
from catalog.pub.msapi import sdc
-from catalog.pub.config.config import CATALOG_ROOT_PATH
-from catalog.pub.utils import toscaparser
from catalog.pub.utils import fileutil
-from catalog.pub.msapi import nfvolcm
+from catalog.pub.utils import toscaparser
logger = logging.getLogger(__name__)
return fmt_ns_pkg_rsp(STATUS_SUCCESS, ret[1], "")
-def ns_delete_csar(csar_id, force_delete):
+def ns_delete_csar(csar_id):
ret = None
try:
- ret = NsPackage().delete_csar(csar_id, force_delete)
+ ret = NsPackage().delete_csar(csar_id)
except CatalogException as e:
return fmt_ns_pkg_rsp(STATUS_FAILED, e.message)
except:
return fmt_ns_pkg_rsp(STATUS_FAILED, str(sys.exc_info()))
return fmt_ns_pkg_rsp(STATUS_SUCCESS, ret[1], "")
+
def ns_get_csars():
ret = None
try:
return [1, str(sys.exc_info())]
return ret
-def parser_nsmodel(csar_id,inputs):
- ret = None
+def parse_nsd(csar_id, inputs):
+ ret= None
try:
- nf_pkg = NSDModel.objects.filter(id=csar_id)
- if nf_pkg:
- csar_path=nf_pkg["nsd_path"]
- ret=toscaparser.parse_nsd(csar_path,inputs)
+ ns_pkg = NSPackageModel.objects.filter(nsPackageId=csar_id)
+ if not ns_pkg:
+ raise CatalogException("NS CSAR(%s) does not exist." % csar_id)
+ csar_path = ns_pkg[0].localFilePath
+ ret = {"model": toscaparser.parse_nsd(csar_path, inputs)}
except CatalogException as e:
return [1, e.message]
except:
logger.error(traceback.format_exc())
return [1, str(sys.exc_info())]
- return ret
+ return [0, ret]
-###############################################################################################################
class NsPackage(object):
"""
pass
def on_distribute(self, csar_id):
- if NSDModel.objects.filter(id=csar_id):
+ if NSPackageModel.objects.filter(nsPackageId=csar_id):
raise CatalogException("NS CSAR(%s) already exists." % csar_id)
- nsd,local_file_name,nsd_json = self.get_nsd(csar_id)
+ artifact = sdc.get_artifact(sdc.ASSETTYPE_SERVICES, csar_id)
+ 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)
+
+ nsd_json = toscaparser.parse_nsd(local_file_name)
+ nsd = json.JSONDecoder().decode(nsd_json)
nsd_id = nsd["metadata"]["id"]
- if NSDModel.objects.filter(nsd_id=nsd_id):
+ if NSPackageModel.objects.filter(nsdId=nsd_id):
raise CatalogException("NSD(%s) already exists." % nsd_id)
for vnf in nsd["vnfs"]:
vnfd_id = vnf["properties"]["id"]
- pkg = NfPackageModel.objects.filter(vnfdid=vnfd_id)
+ pkg = VnfPackageModel.objects.filter(vnfdId=vnfd_id)
if not pkg:
raise CatalogException("VNF package(%s) is not distributed." % vnfd_id)
- NSDModel(
- id=csar_id,
- nsd_id=nsd_id,
- name=nsd["metadata"].get("name", nsd_id),
- vendor=nsd["metadata"].get("vendor", "undefined"),
- description=nsd["metadata"].get("description", ""),
- version=nsd["metadata"].get("version", "undefined"),
- nsd_path=local_file_name,
- nsd_model=nsd_json).save()
+ NSPackageModel(
+ nsPackageId=csar_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=csar_name,
+ sdcCsarId=csar_id,
+ localFilePath=local_file_name,
+ nsdModel=nsd_json
+ ).save()
return [0, "CSAR(%s) distributed successfully." % csar_id]
- def get_nsd(self, csar_id):
- artifact = sdc.get_artifact(sdc.ASSETTYPE_SERVICES, csar_id)
- local_path = os.path.join(CATALOG_ROOT_PATH, csar_id)
- local_file_name = sdc.download_artifacts(artifact["toscaModelURL"], local_path)
-
- nsd_json = toscaparser.parse_nsd(local_file_name)
- nsd = json.JSONDecoder().decode(nsd_json)
-
- return nsd,local_file_name,nsd_json
-
- def delete_csar(self, csar_id, force_delete):
- '''
- if force_delete:
- NSInstModel.objects.filter(nspackage_id=csar_id).delete()
- else:
- if NSInstModel.objects.filter(nspackage_id=csar_id):
- raise CatalogException("CSAR(%s) is in using, cannot be deleted." % csar_id)
- '''
- nfvolcm.delete_ns_inst_mock()
- NSDModel.objects.filter(id=csar_id).delete()
+ def delete_csar(self, csar_id):
+ NSPackageModel.objects.filter(nsPackageId=csar_id).delete()
+ self.delete_catalog(csar_id)
return [0, "Delete CSAR(%s) successfully." % csar_id]
-
def get_csars(self):
- csars = []
- nss = NSDModel.objects.filter()
+ csars = {"csars": []}
+ nss = NSPackageModel.objects.filter()
for ns in nss:
- csars.append({
- "csarId": ns.id,
- "nsdId": ns.nsd_id
+ csars["csars"].append({
+ "csarId": ns.nsPackageId,
+ "nsdId": ns.nsdId,
+ "nsdProvider": ns.nsdDesginer,
+ "nsdVersion": ns.nsdVersion
})
return [0, csars]
def get_csar(self, csar_id):
package_info = {}
- csars = NSDModel.objects.filter(id=csar_id)
+ csars = NSPackageModel.objects.filter(nsPackageId=csar_id)
if csars:
- package_info["nsdId"] = csars[0].nsd_id
- package_info["nsdProvider"] = csars[0].vendor
- package_info["nsdVersion"] = csars[0].version
-
- #nss = NSInstModel.objects.filter(nspackage_id=csar_id)
- nss = nfvolcm.getNsInsts_mock()
- ns_instance_info = [{
- "nsInstanceId": ns.id,
- "nsInstanceName": ns.name} for ns in nss]
-
- return [0, {"csarId": csar_id,
- "packageInfo": package_info,
- "nsInstanceInfo": ns_instance_info}]
+ package_info["nsdId"] = csars[0].nsdId
+ package_info["nsdProvider"] = csars[0].nsdDesginer
+ package_info["nsdVersion"] = csars[0].nsdVersion
+ package_info["csarName"] = csars[0].nsPackageUri
+ package_info["downloadUrl"] = "http://%s:%s/%s/%s/%s" % (
+ REG_TO_MSB_REG_PARAM["nodes"][0]["ip"],
+ REG_TO_MSB_REG_PARAM["nodes"][0]["port"],
+ CATALOG_URL_PATH,
+ csar_id,
+ csars[0].nsPackageUri)
+
+ return [0, {"csarId": csar_id, "packageInfo": package_info}]
def delete_catalog(self, csar_id):
local_path = os.path.join(CATALOG_ROOT_PATH, csar_id)
fileutil.delete_dirs(local_path)
-
-
-
-
\ No newline at end of file