X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=lcm%2Flcm%2Fpub%2Fmsapi%2Fgvnfmdriver.py;h=5446fa3d9619b8857022aab2930dd4391be458cc;hb=0ca8d24920c2ab9462773b881400238fa0ffc7cd;hp=5244da675474686ed456a43705eae6acf2a8ee9e;hpb=0ce55f5401f26c0acb975b718e638f0c650a93eb;p=vfc%2Fgvnfm%2Fvnflcm.git diff --git a/lcm/lcm/pub/msapi/gvnfmdriver.py b/lcm/lcm/pub/msapi/gvnfmdriver.py index 5244da67..5446fa3d 100644 --- a/lcm/lcm/pub/msapi/gvnfmdriver.py +++ b/lcm/lcm/pub/msapi/gvnfmdriver.py @@ -17,6 +17,10 @@ import logging from lcm.pub.exceptions import NFLCMException from lcm.pub.utils.restcall import req_by_msb +from lcm.pub.database.models import ( + NfInstModel, VmInstModel, NetworkInstModel, + PortInstModel, StorageInstModel, VNFCInstModel +) logger = logging.getLogger(__name__) @@ -43,3 +47,87 @@ def notify_lcm_to_nfvo(data): logger.error("Status code is %s, detail is %s.", ret[2], ret[1]) raise NFLCMException("Nf lcm notify exception") return ret[1] + + +def prepare_notification_data(nfinstid, jobid, changetype): + logger.info('Send notify request to nfvo') + affected_vnfcs = [] + vnfcs = VNFCInstModel.objects.filter(instid=nfinstid) + for vnfc in vnfcs: + vm_resource = {} + if vnfc.vmid: + vm = VmInstModel.objects.filter(vmid=vnfc.vmid) + if vm: + vm_resource = { + 'vimId': vm[0].vimConnectionId, + 'resourceId': vm[0].resouceid, + 'resourceProviderId': vm[0].vmname, # TODO: is resourceName mapped to resourceProviderId? + 'vimLevelResourceType': 'vm' + } + affected_vnfcs.append({ + 'id': vnfc.vnfcinstanceid, + 'vduId': vnfc.vduid, + 'changeType': changetype, + 'computeResource': vm_resource + }) + affected_vls = [] + networks = NetworkInstModel.objects.filter(instid=nfinstid) + for network in networks: + network_resource = { + 'vimConnectionId': network.vimid, + 'resourceId': network.resouceid, + 'resourceProviderId': network.name, # TODO: is resourceName mapped to resourceProviderId? + 'vimLevelResourceType': 'network' + } + affected_vls.append({ + 'id': network.networkid, + 'virtualLinkDescId': network.nodeId, + 'changeType': changetype, + 'networkResource': network_resource + }) + ext_link_ports = [] + ports = PortInstModel.objects.filter(instid=nfinstid) + for port in ports: + ext_link_ports.append({ + 'id': port.portid, # TODO: port.portid or port.nodeid? + 'resourceHandle': { + 'vimConnectionId': port.vimid, + 'resourceId': port.resouceid, + 'resourceProviderId': port.name, # TODO: is resourceName mapped to resourceProviderId? + 'vimLevelResourceType': 'port' + }, + 'cpInstanceId': port.cpinstanceid + }), + affected_vss = [] + vss = StorageInstModel.objects.filter(instid=nfinstid) + for vs in vss: + affected_vss.append({ + 'id': vs.storageid, + 'virtualStorageDescId': vs.nodeId, + 'changeType': changetype, + 'storageResource': { + 'vimConnectionId': vs.vimid, + 'resourceId': vs.resouceid, + 'resourceProviderId': vs.name, # TODO: is resourceName mapped to resourceProviderId? + 'vimLevelResourceType': 'volume' + } + }) + notification_content = { + "notificationType": 'VnfLcmOperationOccurrenceNotification', + "notificationStatus": 'RESULT', + "vnfInstanceId": nfinstid, + "operation": 'INSTANTIATE', + "vnfLcmOpOccId": jobid, + 'affectedVnfcs': affected_vnfcs, + 'affectedVirtualLinks': affected_vls, + 'affectedVirtualStorages': affected_vss, + 'chengedExtConnectivity': [{ + 'id': None, # TODO + 'resourceHandle': None, # TODO + 'extLinkPorts': ext_link_ports + }] + } + nfInsts = NfInstModel.objects.filter(nfinstid=nfinstid) + notification_content['vnfmInstId'] = nfInsts[0].vnfminstid + logger.info('Notify request data = %s' % notification_content) + return notification_content