diff options
Diffstat (limited to 'catalog/packages/biz')
-rw-r--r-- | catalog/packages/biz/notificationsutil.py | 15 | ||||
-rw-r--r-- | catalog/packages/biz/ns_descriptor.py | 41 | ||||
-rw-r--r-- | catalog/packages/biz/pnf_descriptor.py | 28 | ||||
-rw-r--r-- | catalog/packages/biz/vnf_package.py | 4 |
4 files changed, 68 insertions, 20 deletions
diff --git a/catalog/packages/biz/notificationsutil.py b/catalog/packages/biz/notificationsutil.py index 04bad47..4fa8e79 100644 --- a/catalog/packages/biz/notificationsutil.py +++ b/catalog/packages/biz/notificationsutil.py @@ -23,6 +23,7 @@ import catalog.pub.utils.timeutil from catalog.pub.utils.values import remove_none_key from catalog.pub.config import config as pub_config import traceback +from django.db.models import Q logger = logging.getLogger(__name__) @@ -32,16 +33,20 @@ class NotificationsUtil(object): pass def send_notification(self, notification, filters, isvnfpkg): - logger.info("Send Notifications to the callbackUri") subscriptions_filter = {v + "__contains": notification[k] for k, v in filters.items()} - logger.debug('send_notification subscriptions_filter = %s' % subscriptions_filter) subscriptions_filter = remove_none_key(subscriptions_filter) + logger.debug('send_notification subscriptions_filter = %s' % subscriptions_filter) + q1 = Q() + q1.connector = 'OR' + for k, v in subscriptions_filter.items(): + q1.children.append((k, v)) if isvnfpkg: - subscriptions = VnfPkgSubscriptionModel.objects.filter(**subscriptions_filter) + subscriptions = VnfPkgSubscriptionModel.objects.filter(q1) subscription_root_uri = const.VNFPKG_SUBSCRIPTION_ROOT_URI else: - subscriptions = NsdmSubscriptionModel.objects.filter(**subscriptions_filter) + subscriptions = NsdmSubscriptionModel.objects.filter(q1) subscription_root_uri = const.NSDM_SUBSCRIPTION_ROOT_URI + if not subscriptions.exists(): logger.info("No subscriptions created for the filters %s" % notification) return @@ -82,7 +87,7 @@ class NotificationsUtil(object): try: resp = requests.post(callbackuri, data=notification, headers={'Connection': 'close'}) if resp.status_code != status.HTTP_204_NO_CONTENT: - logger.error("Sendingnotification to %s failed: %s" % (callbackuri, resp.text)) + logger.error("Sending notification to %s failed: %s" % (callbackuri, resp.text)) else: logger.info("Sending notification to %s successfully.", callbackuri) except: diff --git a/catalog/packages/biz/ns_descriptor.py b/catalog/packages/biz/ns_descriptor.py index f0e0572..ca1b684 100644 --- a/catalog/packages/biz/ns_descriptor.py +++ b/catalog/packages/biz/ns_descriptor.py @@ -19,12 +19,13 @@ import os import uuid from catalog.packages.biz.common import parse_file_range, read, save -from catalog.packages.const import PKG_STATUS from catalog.pub.config.config import CATALOG_ROOT_PATH from catalog.pub.database.models import NSPackageModel, PnfPackageModel, VnfPackageModel from catalog.pub.exceptions import CatalogException, ResourceNotFoundException from catalog.pub.utils import fileutil, toscaparser from catalog.pub.utils.values import ignore_case_get +from catalog.packages.biz.notificationsutil import prepare_nsd_notification, NotificationsUtil +from catalog.packages import const logger = logging.getLogger(__name__) @@ -41,9 +42,9 @@ class NsDescriptor(object): user_defined_data = ignore_case_get(data, 'userDefinedData', {}) data = { 'id': id if id else str(uuid.uuid4()), - 'nsdOnboardingState': PKG_STATUS.CREATED, - 'nsdOperationalState': PKG_STATUS.DISABLED, - 'nsdUsageState': PKG_STATUS.NOT_IN_USE, + 'nsdOnboardingState': const.PKG_STATUS.CREATED, + 'nsdOperationalState': const.PKG_STATUS.DISABLED, + 'nsdUsageState': const.PKG_STATUS.NOT_IN_USE, 'userDefinedData': user_defined_data, '_links': None # TODO } @@ -92,6 +93,7 @@ class NsDescriptor(object): ns_pkgs.delete() ns_pkg_path = os.path.join(CATALOG_ROOT_PATH, nsd_info_id) fileutil.delete_dirs(ns_pkg_path) + send_notification(const.NSD_NOTIFICATION_TYPE.NSD_DELETION, nsd_info_id) logger.info('NSD(%s) has been deleted.' % nsd_info_id) def upload(self, nsd_info_id, remote_file): @@ -100,7 +102,7 @@ class NsDescriptor(object): if not ns_pkgs.exists(): logger.error('NSD(%s) does not exist.' % nsd_info_id) raise CatalogException('NSD(%s) does not exist.' % nsd_info_id) - ns_pkgs.update(onboardingState=PKG_STATUS.UPLOADING) + ns_pkgs.update(onboardingState=const.PKG_STATUS.UPLOADING) local_file_name = save(remote_file, nsd_info_id) logger.info('NSD(%s) content has been uploaded.' % nsd_info_id) @@ -112,7 +114,7 @@ class NsDescriptor(object): if not ns_pkgs.exists(): logger.error('NSD(%s) does not exist.' % nsd_info_id) raise ResourceNotFoundException('NSD(%s) does not exist.' % nsd_info_id) - if ns_pkgs[0].onboardingState != PKG_STATUS.ONBOARDED: + if ns_pkgs[0].onboardingState != const.PKG_STATUS.ONBOARDED: logger.error('NSD(%s) is not ONBOARDED.' % nsd_info_id) raise CatalogException('NSD(%s) is not ONBOARDED.' % nsd_info_id) @@ -124,7 +126,7 @@ class NsDescriptor(object): def parse_nsd_and_save(self, nsd_info_id, local_file_name): logger.info('Start to process NSD(%s)...' % nsd_info_id) ns_pkgs = NSPackageModel.objects.filter(nsPackageId=nsd_info_id) - ns_pkgs.update(onboardingState=PKG_STATUS.PROCESSING) + ns_pkgs.update(onboardingState=const.PKG_STATUS.PROCESSING) nsd_json = toscaparser.parse_nsd(local_file_name) logger.debug("%s", nsd_json) @@ -140,6 +142,7 @@ class NsDescriptor(object): other_nspkg = NSPackageModel.objects.filter(nsdId=nsd_id) if other_nspkg and other_nspkg[0].nsPackageId != nsd_info_id: logger.warn("NSD(%s,%s) already exists.", nsd_id, other_nspkg[0].nsPackageId) + send_notification(const.NSD_NOTIFICATION_TYPE.NSD_ONBOARDING_FAILURE, nsd_info_id, nsd_id) raise CatalogException("NSD(%s) already exists." % nsd_id) for vnf in nsd["vnfs"]: @@ -173,14 +176,15 @@ class NsDescriptor(object): nsdDescription=nsd.get("description", ""), nsdVersion=nsd_version, invariantId=invariant_id, - onboardingState=PKG_STATUS.ONBOARDED, - operationalState=PKG_STATUS.ENABLED, - usageState=PKG_STATUS.NOT_IN_USE, + onboardingState=const.PKG_STATUS.ONBOARDED, + operationalState=const.PKG_STATUS.ENABLED, + usageState=const.PKG_STATUS.NOT_IN_USE, nsPackageUri=local_file_name, sdcCsarId=nsd_info_id, localFilePath=local_file_name, nsdModel=nsd_json ) + send_notification(const.NSD_NOTIFICATION_TYPE.NSD_ONBOARDING, nsd_info_id, nsd_id) logger.info('NSD(%s) has been processed.' % nsd_info_id) def fill_resp_data(self, ns_pkg): @@ -236,4 +240,19 @@ class NsDescriptor(object): def handle_upload_failed(self, nsd_info_id): ns_pkg = NSPackageModel.objects.filter(nsPackageId=nsd_info_id) - ns_pkg.update(onboardingState=PKG_STATUS.CREATED) + ns_pkg.update(onboardingState=const.PKG_STATUS.CREATED) + + +def send_notification(type, nsd_info_id, nsd_id=None, failure_details=None, operational_state=None): + data = prepare_nsd_notification(nsd_info_id=nsd_info_id, + nsd_id=nsd_id, + notification_type=type, + failure_details=failure_details, + operational_state=operational_state) + filters = { + 'nsdInfoId': 'nsdInfoId', + 'nsdId': 'nsdId', + } + logger.debug('Notify request data = %s' % data) + logger.debug('Notify request filters = %s' % filters) + NotificationsUtil().send_notification(data, filters, False) diff --git a/catalog/packages/biz/pnf_descriptor.py b/catalog/packages/biz/pnf_descriptor.py index 547c198..6f45729 100644 --- a/catalog/packages/biz/pnf_descriptor.py +++ b/catalog/packages/biz/pnf_descriptor.py @@ -25,6 +25,8 @@ from catalog.pub.database.models import NSPackageModel, PnfPackageModel from catalog.pub.exceptions import CatalogException, ResourceNotFoundException from catalog.pub.utils import fileutil, toscaparser from catalog.pub.utils.values import ignore_case_get +from catalog.packages.biz.notificationsutil import prepare_pnfd_notification, NotificationsUtil +from catalog.packages import const logger = logging.getLogger(__name__) @@ -76,8 +78,14 @@ class PnfDescriptor(object): logger.info('Start to upload PNFD(%s)...' % pnfd_info_id) pnf_pkgs = PnfPackageModel.objects.filter(pnfPackageId=pnfd_info_id) if not pnf_pkgs.exists(): - logger.info('PNFD(%s) does not exist.' % pnfd_info_id) - raise CatalogException('PNFD (%s) does not exist.' % pnfd_info_id) + details = 'PNFD(%s) is not CREATED.' % pnfd_info_id + logger.info(details) + send_notification( + type=const.NSD_NOTIFICATION_TYPE.PNFD_ONBOARDING_FAILURE, + pnfd_info_id=pnfd_info_id, + failure_details=details + ) + raise CatalogException(details) pnf_pkgs.update(onboardingState=PKG_STATUS.UPLOADING) local_file_name = save(remote_file, pnfd_info_id) @@ -110,6 +118,7 @@ class PnfDescriptor(object): pnf_pkgs.delete() pnf_pkg_path = os.path.join(CATALOG_ROOT_PATH, pnfd_info_id) fileutil.delete_dirs(pnf_pkg_path) + send_notification(const.NSD_NOTIFICATION_TYPE.PNFD_DELETION, pnfd_info_id, del_pnfd_id) logger.debug('PNFD(%s) has been deleted.' % pnfd_info_id) def download(self, pnfd_info_id): @@ -185,6 +194,7 @@ class PnfDescriptor(object): localFilePath=local_file_name, pnfdModel=pnfd_json ) + send_notification(const.NSD_NOTIFICATION_TYPE.PNFD_ONBOARDING, pnfd_info_id, pnfd_id) logger.info('PNFD(%s) has been processed.' % pnfd_info_id) def fill_response_data(self, pnf_pkg): @@ -224,3 +234,17 @@ class PnfDescriptor(object): logger.error(e.args[0]) return [1, e.args[0]] return [0, ret] + + +def send_notification(type, pnfd_info_id, pnfd_id=None, failure_details=None): + data = prepare_pnfd_notification(pnfd_info_id=pnfd_info_id, + pnfd_id=pnfd_id, + notification_type=type, + failure_details=failure_details) + filters = { + 'pnfdId': 'pnfdId', + 'pnfdInfoIds': 'pnfdInfoIds', + } + logger.debug('Notify request data = %s' % data) + logger.debug('Notify request filters = %s' % filters) + NotificationsUtil().send_notification(data, filters, False) diff --git a/catalog/packages/biz/vnf_package.py b/catalog/packages/biz/vnf_package.py index c68de63..be73595 100644 --- a/catalog/packages/biz/vnf_package.py +++ b/catalog/packages/biz/vnf_package.py @@ -111,8 +111,6 @@ class VnfPackage(object): # logger.error("VNF package(%s) is not CREATED" % vnf_pkg_id) # raise CatalogException("VNF package(%s) is not CREATED" % vnf_pkg_id) vnf_pkg.update(onboardingState=const.PKG_STATUS.UPLOADING) - send_notification(vnf_pkg_id, const.PKG_NOTIFICATION_TYPE.ONBOARDING, - const.PKG_CHANGE_TYPE.OP_STATE_CHANGE) local_file_name = save(remote_file, vnf_pkg_id) logger.info('VNF package(%s) has been uploaded.' % vnf_pkg_id) @@ -282,6 +280,8 @@ def parse_vnfd_and_save(vnf_pkg_id, vnf_pkg_path): localFilePath=vnf_pkg_path, vnfPackageUri=os.path.split(vnf_pkg_path)[-1] ) + send_notification(vnf_pkg_id, const.PKG_NOTIFICATION_TYPE.ONBOARDING, + const.PKG_CHANGE_TYPE.OP_STATE_CHANGE) else: raise CatalogException("VNF propeties and metadata in VNF Package(id=%s) are empty." % vnf_pkg_id) logger.info('VNF package(%s) has been processed(done).' % vnf_pkg_id) |