import sys
import traceback
-from catalog.pub.config.config import CATALOG_ROOT_PATH
+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 nfvolcm
from catalog.pub.msapi import sdc
from catalog.pub.utils import fileutil
from catalog.pub.utils import toscaparser
-from rest_framework import status
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
- nsinstances = []
try:
- if force_delete:
- ret = NsPackage().delete_csar(csar_id)
- return fmt_ns_pkg_rsp(STATUS_SUCCESS, ret[1], "")
- nsinstances = nfvolcm.get_nsInstances(csar_id)
- if nsinstances:
- if len(nsinstances) > 0:
- return fmt_ns_pkg_rsp(STATUS_FAILED, "NS instances using the CSAR exists!",status.HTTP_412_PRECONDITION_FAILED)
- ret = NsPackage().delete_csar(csar_id)
- return fmt_ns_pkg_rsp(STATUS_SUCCESS, ret[1], "")
+ ret = NsPackage().delete_csar(csar_id)
except CatalogException as e:
return fmt_ns_pkg_rsp(STATUS_FAILED, e.message)
except:
logger.error(traceback.format_exc())
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:
ns_pkg = NSPackageModel.objects.filter(nsPackageId=csar_id)
- if ns_pkg:
- csar_path = ns_pkg[0].localFilePath
- ret = {"model": toscaparser.parse_nsd(csar_path, inputs)}
+ 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:
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 NSPackageModel.objects.filter(nsdId=nsd_id):
for vnf in nsd["vnfs"]:
vnfd_id = vnf["properties"]["id"]
- pkg = VnfPackageModel.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)
nsdDesginer=nsd["metadata"].get("vendor", "undefined"),
nsdDescription=nsd["metadata"].get("description", ""),
nsdVersion=nsd["metadata"].get("version", "undefined"),
- nsPackageUri=local_file_name,
+ nsPackageUri=csar_name,
sdcCsarId=csar_id,
localFilePath=local_file_name,
nsdModel=nsd_json
- ).save()
+ ).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):
- '''
- 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()
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 = []
+ csars = {"csars": []}
nss = NSPackageModel.objects.filter()
for ns in nss:
- csars.append({
+ csars["csars"].append({
"csarId": ns.nsPackageId,
- "nsdId": ns.nsdId
+ "nsdId": ns.nsdId,
+ "nsdProvider": ns.nsdDesginer,
+ "nsdVersion": ns.nsdVersion
})
- return [0,csars]
+ return [0, csars]
def get_csar(self, csar_id):
package_info = {}
package_info["nsdId"] = csars[0].nsdId
package_info["nsdProvider"] = csars[0].nsdDesginer
package_info["nsdVersion"] = csars[0].nsdVersion
-
- #nss = NSInstModel.objects.filter(nspackage_id=csar_id)
- nss = nfvolcm.get_nsInstances(csar_id)
- ns_instance_info = [{
- "nsInstanceId": ns["nsInstanceId"],
- "nsInstanceName": ns["nsName"]} for ns in nss]
-
- return [0, {"csarId": csar_id,
- "packageInfo": package_info,
- "nsInstanceInfo": ns_instance_info}]
+ 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)