Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.



Table of Contents
outlinetrue

Introduction

The PNF Registration and Re-registration Notification is generated whenever the a CPE is plugged into the network either for the first time (registration) or whenever the CPE is plugged into a different interface of an access node in the network (re-registration)..

Upon reception of the notification within ONAP by a DCAE collector, the notification is mapped into a VES event and placed on the DMaaP bus for processing by the DCAE/PRH uS. 

BBS Flows Cross Reference

The PNF Registration notification is used within the following use case scenarios:

PNF Registration Flow

The PNF Registration Flow is documented here for the BBS use case.

PNF

and

Re-registration Flow

Gliffy Diagram
nameBBS PNF Registration and Re-registration Notification
pagePin540

Figure 1. BBS PNF Registration and Re-registration Notification Flow Diagram

Here  are the flow by steps:

10) Access SDN M&C reports the PNF registration event to DCAE/PRH

    1. This notification may be sent to the Restconf VES collector for translation and mapping into the PNF registration VES event as described here.

20) DCAE/PRH then processes the PNF registration event logic where PRH determines if the event is a registration or re-registration event

    1. The determination if this event is a registration or registration
  1. for starts of if the PNF has already registered with ONAP. If so the UpdateServiceMSvc is invoked.For the PNF
    1. is documented here
    2.  If the ONT/PNF is re-registered,  a PNF_UPDATE event with the additional fields from the VES registration event is produced by PRH onto DMAAP.

30) For the PNF re-registration,

the UpdateServiceMSvc invokes a policy to update the services associated with the PNF and issues a pnfUpdate event to the SO
  • SO pnfUpdate API initiates the service re-provisioning procedure per ONT location change.
  • the BBS uS:

          30.1) consumes PNF_UPDATE event from DMAAP,

          30.2) looks up the service-instance-id by the pnf-name, checks PON UNI attachment point in 'additionalFields' against the attachment point in the PNF.

          30.3) looks up a list of resources to be updated

          30.4) triggers the Nomadic ONT policy

    40) Updates the orchestration status of the CFS service instance in A&AI where an event is then emitted to indicates the resources of the service still need updated

    50) SDNC API conducts the service resource re-provisioning upon the ONT location change. The PNF attachment point is updated upon successful provisioning.

    60) Updates the orchestration status of the CFS service instance in A&AI where an event is then emitted to indicate the resources of the service have been updated

    Note: In this release steps 40-60 implement the Steps 9 to end of the PNF re-registration event.

    DCAE

    PNF Registration Event

    The BBS Use uses the ONAP pnfRegisration event with additional fields to identify the Access Node UNI to which the CPE is attached.

    Code Block
    languagetext
    firstline1
    titlepnfRegistration Event
    linenumberstrue
    collapsetrue
    This pnfRegistration Event definition can be found at link:
    https://wiki.onap.org/display/DW/5G+-+PNF+Plug+and+Play#id-5G-PNFPlugandPlay-STAGE3-PNFREGISTRATIONVESEVENT
    
    The field definitions use for the BBS Use case for ONT Registration:
    	

    DCAE

    PNF Registration Event

    VES Mapper converts the ONT Registration notification JSON message from DMAAP into the following PNF Registration event.

    Code Block
    languagetext
    firstline1
    titlepnfRegistration Event
    linenumberstrue
    collapsetrue
    This pnfRegistration Event definition can be found at link:
    https://wiki.onap.org/display/DW/5G+-+PNF+Plug+and+Play#id-5G-PNFPlugandPlay-STAGE3-PNFREGISTRATIONVESEVENT
    
    The field definitions use for the BBS Use case for ONT Registration:
    	eventName: pnfRegistration_<vendorName>_cpe
    	eventId: unique per CPE proxied – incremented as described
    	sourceName: <PNF-name/PNF correlation ID>: Format string: <Manufacturer
    	OUI>-<SerialNumber> or <Manufacturer OUI>-<Model>-<SerialNumber>
    	reportingEntityName:<thirdparty-sdnc-id> from esr request
    	additionalFields:
    		oltNameattachment-point: <OLT name>
    		oltPONSlotFormat: <OLT PON Slot>
    		oltPONPort: <OLT PON Port>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    PRH Extension

    PNF Re-registration Detection

    Refer to PNF Re-registration detection logic handled in 5G use case by extension of PRH micro-service.

    PNF for ONT in A&AI

    Refer to ONT/PNF definition in ONT modeling

    PNF pnfUpdate Event

    This event is the output of PRH active service detection and is consumed by BBS MS.

    "<oltName>/<oltSlot>/<oltPort>"  <x> denotes element
            remote-id: Format: string - This represents the Remote ID within the DHCP Option 82 (Optional)
            c-vlan: Format: int - This represents the Customer VLAN associated with the attachment point (Optional)
            s-vlan: Format: int - The represents the Service VLAN of network interface connected to the attachment point (Optional)
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    


    PRH Extension

    PNF Re-registration Detection

    Refer to PNF Re-registration detection logic handled in 5G use case by extension of PRH micro-service.

    PNF for ONT in A&AI

    Refer to ONT/PNF definition in ONT modeling

    PNF unauthenticated.PNF_UPDATE Event

    This event is the output of PRH mS when it detects a PNF re-registration event. The event is consumed by the BBS mS.


    Code Block
    languagetext
    firstline1
    titlePNF Update Event
    linenumberstrue
    collapsetrue
    { 
     "nf-role":"role",
     "equip-type":"Equipment-Type-1",
     "equip-vendor":"Vendor",
     "equip-model":"E-model-1",
     "serial-number":"SN1234",
     "sw-version":"SW-version-1",
     "correlationId":"PNF-correlation",
       "additionalFields": {
         "attachment-point": "olt1-1-1",
         "cvlan": "1005",
         "svlan": "100",
         "remote-id": "some-remote-id"
      }
     }
    

    Nomadic ONT Event/DCAE_CL_OUTPUT Event 

    This event triggers Policy engine to call SO API to modify the associated HSIA service.  

    DCAE_CL_OUTPUT Event

    Code Block
    languagetext
    firstline1
    titleDCAE Control Loop Event
    linenumberstrue
    collapsetrue
    {
        "closedLoopEventClient": "DCAE.BBS_mSInstance",
        "policyVersion": "1.0.0.5",
        "policyName": "Nomadic_ONT",
        "policyScope": "service=HSIAService,type=SampleType,closedLoopControlName=CL-NomadicONT-d925ed73-8231-4d02-9545-db4e101f88f8",
        "target_type": "VM",
        "AAI": {
            "service-information.hsia-cfs-service-instance-id" : "service-instance-id-example",
    		"attachmentPoint" : "olt1-1-1",
    		"remoteId" : "some-remote-id",
            "cvlan" : "example cvlan-id",
            "svlan" : "example svlan-id"
        },
        "closedLoopAlarmStart": 1484677482204798,
        "closedLoopEventStatus": "ONSET",
        "closedLoopControlName": "ControlLoop-NomadicONT-fd36-4843-a71a-a8c24c70c88b",
        "version": "1.0.2",
        "target": "vserver.vserver-name",
        "requestID": "97964e10-686e-4790-8c45-bdfa61df770f",
        "from": "DCAE"
    }


    A&AI Enrichment

    The moving ONT associated (through pnfName) service ID is looked up in A&AI and enriched in the A&AI portion of the above DCAE_CL_OUTPUT Event which trigger the operational policy in the operational policy defined below.  

    Policy

    There are two options to author and execute the Nomadic ONT policy - Apex PDP(Pdp-A) or Drools PDP(Pdp-D).

    Apex Engine Triggering

    Apex PDP engine is configured to consumes the Nomadic ONT event/DCAE-CL_OUTPUT event from DMAAP and call the SDNC Rest API to take resource re-provisioning actions in the original design in Dublin.  Later on, a workaround approach is taken for the BBS MS to consume the pnfUpdate event produced by PRH and eventually calls SNDC API to proceed the  service associated resource re-provisioning  after certain A&AI query and update. Therefore, the policy engine  configuration and policy definition becomes very simple for the time being.  The only reason for now to keep a no action policy is for the completeness of the control loop so that to the BBS workflow it is actually an open loop so that a CL can be defined and managed by CLAMP through which  DCAE micro-services, such as, Restconf Collector, VES Mapper, PRH as well as the BBS MS can be orchestrated centralized.

    PDP-A Configuration (JSON)

    Simplified Apex Configuration:

    Code Block
    languagetext
    firstline1
    titleApexConfig.json
    linenumberstrue
    collapsetrue
    {       
    	"engineServiceParameters": {           
    		"name": "MyApexEngine",           
    		"version": "0.0.1",           
    		"id": 45,           
    		"instanceCount": 4,           
    		"deploymentPort": 12561,           
    		"policyModelFileName": "policy/ONAPvCPEPolicyModel.json",           
    		"engineParameters": {                
    			"executorParameters": {                   
    				"JAVASCRIPT": {                      
    					"parameterClassName": "org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters"                   
    					}               
    				},               
    			"contextParameters": {                   
    				"parameterClassName": "org.onap.policy.apex.context.parameters.ContextParameters",                   
    				"schemaParameters": {                       
    					"Avro": {                           
    						"parameterClassName": "org.onap.policy.apex.plugins.context.schema.avro.AvroSchemaHelperParameters"                       
    						}                   
    					}               
    				}           
    			}       
    		},       
    	"eventInputParameters": {            
    		"BBSInitConsumer": {                
    			"carrierTechnologyParameters": {                    
    				"carrierTechnology": "FILE",                   
    				"parameters": {                       
    					"fileName": "config/BBSInitiationEvent.json"  // ... example event                   
    					}                
    				},               
    			"eventProtocolParameters": {                   
    				"eventProtocol": "JSON",                   
    				"parameters": {                       
    					"nameAlias": "closedLoopControlName",                       
    					"versionAlias": "version",                       
    					"sourceAlias": "from"                   
    					}               
    				}           
    		},           
    		"DCAEConsumer": {               
    			"carrierTechnologyParameters": {                   
    				"carrierTechnology": "RESTCLIENT",                   
    				"parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters",                   
    				"parameters": {                        
    					"url": "http://<MSB_IP>:3904/dmaap_port>/unauthenticated.DCAE_CL_OUTPUT/APEX/1?timeout=60000"
                        }               
    				},               
    			"eventProtocolParameters": {                   
    				"eventProtocol": "JSON",                   
    				"parameters": {                       
    					"nameAlias": "closedLoopControlName",                       
    					"versionAlias": "version",                       
    					"sourceAlias": "from"                   
    					}               
    				}           
    			}       
    		},       
    		"eventOutputParameters": {           
    			"logProducer": {               
    				"carrierTechnologyParameters": {                  
    					"carrierTechnology": "FILE",                    
    					"parameters": {                        
    						"fileName": "/tmp/BBSEventsOut.json"                    
    						}               
    					},               
    					"eventProtocolParameters": {                   
    						"eventProtocol": "JSON"               
    						}           
    					},           
    			"SDNCProducer": {               
    				"carrierTechnologyParameters": {                   
    					"carrierTechnology": "RESTCLIENT",                   
    					"parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters",                   
    						"parameters": {                       
    							"url": "http://<MSB_IP>:<sdnc_port>/<path-to-HSIA_Service-Resource-Update>"  //...  SDNC REST Call API                   
    							}               
    						},               
    				"eventProtocolParameters": {                   
    					"eventProtocol": "JSON"               
    					}           
    				},           
    			"PolicyLogProducer": {               
    				"carrierTechnologyParameters": {                   
    					"carrierTechnology": "RESTCLIENT",                   
    					"parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters",                   
    					"parameters": {                       
    						"url": "http://<MSB_IP>:<dmaap_port>/events/POLICY_CL_MGT"                   
    						}               
    					},               
    				"eventProtocolParameters": {                   
    					"eventProtocol": "JSON"               
    					},              					
    				"eventNameFilter": "ControlLoopLogEvent"           
    				}       
    			}   
    		}
    
    }


    Apex Policy for Nomadic ONT is created as following. It can be on-board as part of the service Tosca module at design time, distributed to an Apex PDP engine by the policy distribution engine through SDC.  

    NomadicONT Policy Model (WIP)

    This is the Apex Policy state machine for Nomadic ONT.  An open loop operational policy is going to be defined here to support the completeness of control loop in BBS use case in Dublin.

    Code Block
    languagetext
    firstline1
    titleNomadicONTPolicyModel.apex
    linenumberstrue
    collapsetrue
     #-------------------------------------------------------------------------------
     # ============LICENSE_START=======================================================
     #  Copyright (C) 2016-2019 Huawei. All rights reserved.
     # ================================================================================
     # Licensed under the Apache License, Version 2.0 (the "License");
     # you may not use this file except in compliance with the License.
     # You may obtain a copy of the License at
     # 
     #      http://www.apache.org/licenses/LICENSE-2.0
     # 
     # Unless required by applicable law or agreed to in writing, software
     # distributed under the License is distributed on an "AS IS" BASIS,
     # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     # See the License for the specific language governing permissions and
     # limitations under the License.
     # 
     # SPDX-License-Identifier: Apache-2.0
     # ============LICENSE_END=========================================================
     #-------------------------------------------------------------------------------
     
     model create name=NomadicONTPolicyModel
     
     schema create name=SimpleStringType  flavour=Java schema=java.lang.String
     schema create name=SimpleLongType    flavour=Java schema=java.lang.Long
     schema create name=SimpleBooleanType flavour=Java schema=java.lang.Boolean
     schema create name=UUIDType          flavour=Java schema=java.util.UUID
      
     schema create name=BBSAAIInfoType flavour=Avro schema=LS
     #MACROFILE:"src/main/resources/schemas/BBSAAIInfoType.avsc"
     LE
     
     
     schema create name=SDNCInputBodyType flavour=Avro schema=LS
     #MACROFILE:"src/main/resources/schemas/SDNCInputBodyType.avsc"
     LE
     
     schema create name=SDNCOutputBodyType flavour=Avro schema=LS
     #MACROFILE:"src/main/resources/schemas/SDNCOutputBodyType.avsc"
     LE
     
     schema create name=BBSClosedLoopStatusType flavour=Avro schema=LS
     #MACROFILE:"src/main/resources/schemas/BBSClosedLoopStatusType.avsc"
     LE
    
     album create name=BBSClosedLoopStatusAlbum scope=policy writable=true schemaName=BBSClosedLoopStatusType
     
     album create name=ControlLoopExecutionIDAlbum scope=policy writable=true schemaName=UUIDType 
      
     album create name=RequestIDVNFIDAlbum scope=policy writable=true schemaName=UUIDType
      
     event create name=ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b version=1.0.2 nameSpace=org.onap.policy.apex.onap.bbs source=DCAE target=APEX
     
     event parameter create name=ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b parName=closedLoopControlName schemaName=SimpleStringType
     event parameter create name=ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b parName=closedLoopAlarmStart  schemaName=SimpleLongType
     event parameter create name=ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b parName=closedLoopAlarmEnd    schemaName=SimpleLongType   optional=true
     event parameter create name=ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b parName=closedLoopEventClient schemaName=SimpleStringType
     event parameter create name=ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b parName=closedLoopEventStatus schemaName=SimpleStringType
     event parameter create name=ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b parName=requestID             schemaName=SimpleStringType
     event parameter create name=ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b parName=target_type           schemaName=SimpleStringType
     event parameter create name=ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b parName=target                schemaName=SimpleStringType
     event parameter create name=ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b parName=from                  schemaName=SimpleStringType
     event parameter create name=ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b parName=version               schemaName=SimpleStringType
     event parameter create name=ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b parName=AAI                   schemaName=BBSAAIInfoType
     
     event create name=BBSStateUpdatedEvent nameSpace=org.onap.policy.apex.onap.bbs source=APEX target=APEX
     
     event parameter create name=BBSStateUpdatedEvent parName=requestID schemaName=UUIDType
     event parameter create name=BBSStateUpdatedEvent parName=vnfID     schemaName=UUIDType
     
     event create name=SDNCResourceUpdate nameSpace=org.onap.policy.apex.onap.bbs source=APEX target=SDNC
     
     event parameter create name=SDNCResourceUpdate parName=body                schemaName=SDNCInputBodyType
     event parameter create name=SDNCResourceUpdate parName=version             schemaName=SimpleStringType
     event parameter create name=SDNCResourceUpdate parName=rpc-name            schemaName=SimpleStringType
     event parameter create name=SDNCResourceUpdate parName=service-instance-id schemaName=SimpleStringType
     event parameter create name=SDNCResourceUpdate parName=pon-uni             schemaName=SimpleStringType
     event parameter create name=SDNCResourceUpdate parName=olt-nni             schemaName=SimpleStringType
     
     event create name=SDNCResourceUpdate nameSpace=org.onap.policy.apex.onap.bbs source=APEX target=SDNC
     
     event parameter create name=SDNCResourceUpdate parName=body                schemaName=SDNCOutputBodyType
     event parameter create name=SDNCResourceUpdate parName=version             schemaName=SimpleStringType
     event parameter create name=SDNCResourceUpdate parName=rpc-name            schemaName=SimpleStringType
     event parameter create name=SDNCResourceUpdate parName=service-instance-id schemaName=SimpleStringType
     event parameter create name=SDNCResourceUpdate parName=pon-uni             schemaName=SimpleStringType
     event parameter create name=SDNCResourceUpdate parName=olt-nni             schemaName=SimpleStringType 
     
     event create name=ControlLoopLogEvent nameSpace=org.onap.policy.apex.onap.bbs source=APEX target=APEX
      
     event parameter create name=ControlLoopLogEvent parName=AAI                   schemaName=VCPEAAIInfoType
     event parameter create name=ControlLoopLogEvent parName=closedLoopControlName schemaName=SimpleStringType
     event parameter create name=ControlLoopLogEvent parName=closedLoopAlarmStart  schemaName=SimpleLongType
     event parameter create name=ControlLoopLogEvent parName=closedLoopAlarmEnd    schemaName=SimpleLongType   optional=true
     event parameter create name=ControlLoopLogEvent parName=closedLoopEventClient schemaName=SimpleStringType
     event parameter create name=ControlLoopLogEvent parName=closedLoopEventStatus schemaName=SimpleStringType
     event parameter create name=ControlLoopLogEvent parName=version               schemaName=SimpleStringType
     event parameter create name=ControlLoopLogEvent parName=requestID             schemaName=SimpleStringType
     event parameter create name=ControlLoopLogEvent parName=target_type           schemaName=SimpleStringType
     event parameter create name=ControlLoopLogEvent parName=target                schemaName=SimpleStringType
     event parameter create name=ControlLoopLogEvent parName=from                  schemaName=SimpleStringType
     event parameter create name=ControlLoopLogEvent parName=policyScope           schemaName=SimpleStringType
     event parameter create name=ControlLoopLogEvent parName=policyName            schemaName=SimpleStringType
     event parameter create name=ControlLoopLogEvent parName=policyVersion         schemaName=SimpleStringType
     event parameter create name=ControlLoopLogEvent parName=notification          schemaName=SimpleStringType
     event parameter create name=ControlLoopLogEvent parName=message               schemaName=SimpleStringType
     event parameter create name=ControlLoopLogEvent parName=notificationTime      schemaName=SimpleStringType
     
     task create name=GetBBSStateTask
    
     task inputfield create name=GetBBSStateTask fieldName=closedLoopControlName schemaName=SimpleStringType
     task inputfield create name=GetBBSStateTask fieldName=closedLoopAlarmStart  schemaName=SimpleLongType
     task inputfield create name=GetBBSStateTask fieldName=closedLoopAlarmEnd    schemaName=SimpleLongType   optional=true
     task inputfield create name=GetBBSStateTask fieldName=closedLoopEventClient schemaName=SimpleStringType
     task inputfield create name=GetBBSStateTask fieldName=closedLoopEventStatus schemaName=SimpleStringType
     task inputfield create name=GetBBSStateTask fieldName=requestID             schemaName=SimpleStringType
     task inputfield create name=GetBBSStateTask fieldName=target_type           schemaName=SimpleStringType
     task inputfield create name=GetBBSStateTask fieldName=target                schemaName=SimpleStringType
     task inputfield create name=GetBBSStateTask fieldName=from                  schemaName=SimpleStringType
     task inputfield create name=GetBBSStateTask fieldName=version               schemaName=SimpleStringType
     task inputfield create name=GetBBSStateTask fieldName=AAI                   schemaName=BBSAAIInfoType
      
     task contextref create name=GetBBSStateTask albumName=BBSClosedLoopStatusAlbum
      
     task outputfield create name=GetBBSStateTask fieldName=requestID schemaName=UUIDType
     task outputfield create name=GetBBSStateTask fieldName=vnfID     schemaName=UUIDType
      
     task logic create name=GetBBSStateTask logicFlavour=JAVASCRIPT logic=LS
     #MACROFILE:"src/main/resources/logic/GetBBSStateTask.js"
     LE
     
     task create name=SDNCResourceUpdateTask
      
     task inputfield create name=SDNCResourceUpdateTask fieldName=requestID schemaName=UUIDType
     task inputfield create name=SDNCResourceUpdateTask fieldName=vnfID     schemaName=UUIDType
     
     task outputfield create name=SDNCResourceUpdateTask fieldName=body           schemaName=SDNCInputBodyType
     task outputfield create name=SDNCResourceUpdateTask fieldName=version        schemaName=SimpleStringType
     task outputfield create name=SDNCResourceUpdateTask fieldName=rpc-name       schemaName=SimpleStringType
     task outputfield create name=SDNCResourceUpdateTask fieldName=correlation-id schemaName=SimpleStringType
     task outputfield create name=SDNCResourceUpdateTask fieldName=type           schemaName=SimpleStringType
     
     task contextref create name=SDNCResourceUpdateTask albumName=VCPEClosedLoopStatusAlbum
     task contextref create name=SDNCResourceUpdateTask albumName=RequestIDVNFIDAlbum
      
     task logic create name=SDNCResourceUpdateTask logicFlavour=JAVASCRIPT logic=LS
     #MACROFILE:"src/main/resources/logic/SDNCResourceUpdateTask.js"
     LE
     
     task create name=SDNCResourceUpdateRepTask
    
     task inputfield create name=SDNCResourceUpdateRepTask fieldName=body                schemaName=BBSOutputBodyType
     task inputfield create name=SDNCResourceUpdateRepTask fieldName=version             schemaName=SimpleStringType
     task inputfield create name=SDNCResourceUpdateRepTask fieldName=rpc-name            schemaName=SimpleStringType
     task inputfield create name=SDNCResourceUpdateRepTask fieldName=service-instance-id schemaName=SimpleStringType
     
     
     task outputfield create name=SDNCResourceUpdateRepTask fieldName=requestID   schemaName=UUIDType
     task outputfield create name=SDNCResourceUpdateRepTask fieldName=pon-uni     schemaName=UUIDType
    
     task contextref create name=SDNCResourceUpdateRepTask albumName=BBSClosedLoopStatusAlbum
     task contextref create name=SDNCResourceUpdateRepTask albumName=RequestIDVNFIDAlbum
    
     task logic create name=SDNCResourceUpdateRepTask logicFlavour=JAVASCRIPT logic=LS
     #MACROFILE:"src/main/resources/logic/SDNCResourceUpdateRepTask.js"
     LE
    
     task create name=ControlLoopLogTask
     
     task inputfield create name=ControlLoopLogTask fieldName=requestID schemaName=UUIDType
     task inputfield create name=ControlLoopLogTask fieldName=pon-uni     schemaName=UUIDType
     
     task outputfield create name=ControlLoopLogTask fieldName=AAI                   schemaName=VCPEAAIInfoType
     task outputfield create name=ControlLoopLogTask fieldName=closedLoopControlName schemaName=SimpleStringType
     task outputfield create name=ControlLoopLogTask fieldName=closedLoopAlarmStart  schemaName=SimpleLongType
     task outputfield create name=ControlLoopLogTask fieldName=closedLoopAlarmEnd    schemaName=SimpleLongType   optional=true
     task outputfield create name=ControlLoopLogTask fieldName=closedLoopEventClient schemaName=SimpleStringType
     task outputfield create name=ControlLoopLogTask fieldName=closedLoopEventStatus schemaName=SimpleStringType
     task outputfield create name=ControlLoopLogTask fieldName=requestID             schemaName=SimpleStringType
     task outputfield create name=ControlLoopLogTask fieldName=version               schemaName=SimpleStringType
     task outputfield create name=ControlLoopLogTask fieldName=target_type           schemaName=SimpleStringType
     task outputfield create name=ControlLoopLogTask fieldName=target                schemaName=SimpleStringType
     task outputfield create name=ControlLoopLogTask fieldName=from                  schemaName=SimpleStringType
     task outputfield create name=ControlLoopLogTask fieldName=policyScope           schemaName=SimpleStringType
     task outputfield create name=ControlLoopLogTask fieldName=policyName            schemaName=SimpleStringType
     task outputfield create name=ControlLoopLogTask fieldName=policyVersion         schemaName=SimpleStringType
     task outputfield create name=ControlLoopLogTask fieldName=notification          schemaName=SimpleStringType
     task outputfield create name=ControlLoopLogTask fieldName=message               schemaName=SimpleStringType
     task outputfield create name=ControlLoopLogTask fieldName=notificationTime      schemaName=SimpleStringType
     
     task contextref create name=ControlLoopLogTask albumName=BBSClosedLoopStatusAlbum
     
     task logic create name=ControlLoopLogTask logicFlavour=JAVASCRIPT logic=LS
     #MACROFILE:"src/main/resources/logic/ControlLoopLogTask.js"
     LE
     
     policy create name=ReceiveEventPolicy template=Freestyle firstState=GetBBSState
      
     267 policy state create name=ReceiveEventPolicy stateName=AbatedState triggerName=VCPEStateUpdatedEvent defaultTaskName=ControlLoopLogTask
     268 policy state output create name=ReceiveEventPolicy stateName=AbatedState outputName=AbatedOutput eventName=ControlLoopLogEvent
     269 policy state taskref create name=ReceiveEventPolicy stateName=AbatedState taskName=ControlLoopLogTask outputType=DIRECT outputName=AbatedOutput
     270 
     271 policy state create name=ReceiveEventPolicy stateName=OnsetOrAbatedState triggerName=VCPEStateUpdatedEvent defaultTaskName=AbatedTask
     272 policy state output create name=ReceiveEventPolicy stateName=OnsetOrAbatedState outputName=OnsetOutput eventName=GuardRequestEvent
     273 policy state taskref create name=ReceiveEventPolicy stateName=OnsetOrAbatedState taskName=GuardRequestTask outputType=DIRECT outputName=OnsetOutput
     274 policy state output create name=ReceiveEventPolicy stateName=OnsetOrAbatedState outputName=AbatedOutput eventName=VCPEStateUpdatedEvent nextState=AbatedState
     275 policy state taskref create name=ReceiveEventPolicy stateName=OnsetOrAbatedState taskName=AbatedTask outputType=DIRECT outputName=AbatedOutput
     276 
     277 policy state contextref create name=ReceiveEventPolicy stateName=OnsetOrAbatedState albumName=VCPEClosedLoopStatusAlbum
     278 
     279 policy state selecttasklogic create name=ReceiveEventPolicy stateName=OnsetOrAbatedState logicFlavour=JAVASCRIPT logic=LS
     280 #MACROFILE:"src/main/resources/logic/ReceiveEventPolicyOnsetOrAbatedStateTSL.js"
     281 LE
     282 
     283 policy state create name=ReceiveEventPolicy stateName=GetVCPEState triggerName=ControlLoop-vCPE-85317438-861d-42a9-979e-9d96dc0a9ef1 defaultTaskName=GetVCPEStateTask
     284 policy state output create name=ReceiveEventPolicy stateName=GetVCPEState outputName=GetVCPEStateOutput eventName=VCPEStateUpdatedEvent nextState=OnsetOrAbatedState
     285 policy state taskref create name=ReceiveEventPolicy stateName=GetVCPEState taskName=GetVCPEStateTask outputType=DIRECT outputName=GetVCPEStateOutput
     286 
     287 policy create name=RestartAPPCRequestPolicy template=Freestyle firstState=PolicyGuardResponseState
     288 
     289 policy state create name=RestartAPPCRequestPolicy stateName=DeniedState triggerName=VCPEStateUpdatedEvent defaultTaskName=ControlLoopLogTask
     290 policy state output create name=RestartAPPCRequestPolicy stateName=DeniedState outputName=DeniedOutput eventName=ControlLoopLogEvent
     291 policy state taskref create name=RestartAPPCRequestPolicy stateName=DeniedState taskName=ControlLoopLogTask outputType=DIRECT outputName=DeniedOutput
     292 
     293 policy state create name=RestartAPPCRequestPolicy stateName=PermitOrDenyState triggerName=VCPEStateUpdatedEvent defaultTaskName=DeniedTask
     294 policy state output create name=RestartAPPCRequestPolicy stateName=PermitOrDenyState outputName=PermitOutput eventName=APPCRestartVNFRequestEvent
     295 policy state taskref create name=RestartAPPCRequestPolicy stateName=PermitOrDenyState taskName=APPCRestartVNFRequestTask outputType=DIRECT outputName=PermitOutput
     296 policy state output create name=RestartAPPCRequestPolicy stateName=PermitOrDenyState outputName=DenyOutput eventName=VCPEStateUpdatedEvent nextState=DeniedState
     297 policy state taskref create name=RestartAPPCRequestPolicy stateName=PermitOrDenyState taskName=DeniedTask outputType=DIRECT outputName=DenyOutput
     298 
     299 policy state create name=RestartAPPCRequestPolicy stateName=PolicyGuardResponseState triggerName=GuardResponseEvent defaultTaskName=GuardResponseTask
     300 policy state output create name=RestartAPPCRequestPolicy stateName=PolicyGuardResponseState outputName=GuardResponseOutput eventName=VCPEStateUpdatedEvent nextState=PermitOrDenyState
     301 policy state taskref create name=RestartAPPCRequestPolicy stateName=PolicyGuardResponseState taskName=GuardResponseTask outputType=DIRECT outputName=GuardResponseOutput
     302 
     303 policy state contextref create name=RestartAPPCRequestPolicy stateName=PermitOrDenyState albumName=VCPEClosedLoopStatusAlbum
     304 
     305 policy state selecttasklogic create name=RestartAPPCRequestPolicy stateName=PermitOrDenyState logicFlavour=JAVASCRIPT logic=LS
     306 #MACROFILE:"src/main/resources/logic/RestartAPPCRequestPolicyPermitOrDenyTSL.js"
     307 LE
     308 
     309 policy create name=RestartAPPCResponsePolicy template=Freestyle firstState=RestartAPPCResponseState
     310 
     311 policy state create name=RestartAPPCResponsePolicy stateName=ResponseLogState triggerName=VCPEStateUpdatedEvent defaultTaskName=ControlLoopLogTask
     312 policy state output create name=RestartAPPCResponsePolicy stateName=ResponseLogState outputName=ResponseLogOutput eventName=ControlLoopLogEvent
     313 policy state taskref create name=RestartAPPCResponsePolicy stateName=ResponseLogState taskName=ControlLoopLogTask outputType=DIRECT outputName=ResponseLogOutput
     314 
     315 policy state create name=RestartAPPCResponsePolicy stateName=RestartAPPCResponseState triggerName=APPCRestartVNFResponseEvent defaultTaskName=APPCRestartVNFResponseTask
     316 policy state output create name=RestartAPPCResponsePolicy stateName=RestartAPPCResponseState outputName=APPCRestartVNFResponseOutput eventName=VCPEStateUpdatedEvent nextState=ResponseLogState
     317 policy state taskref create name=RestartAPPCResponsePolicy stateName=RestartAPPCResponseState taskName=APPCRestartVNFResponseTask outputType=DIRECT outputName=APPCRestartVNFResponseOutput
     318 
     319 validate
     320 



    Logic Artifacts

    Code Block
    languagetext
    firstline1
    titleNomadic ONT Apex Policy
    linenumberstrue
    collapsetrue

    Schema

    Code Block
    languagetext
    firstline1
    titleSchema Aritifacts
    linenumberstrue
    collapsetrue

    Operational Policy High Level

    Operational Policy

    A simple open loop operation policy to support the completeness of BBS control loop.

    Code Block
    languagetext
    firstline1
    titleNomadic ONT Operation Policy
    linenumberstrue
    collapsetrue
    controlLoop:
      version: 2.0.0
      controlLoopName: ControlLoop-Nomadic-ONT-2179b738-fd36-4843-a71a-a8c24c70c88b
      trigger_policy: unique-policy-id-16-ServiceModify
      timeout: 3600
      abatement: false
        
    policies:
      - id: unique-policy-id-16-ResourceUpdate
        name: Resource Update
        description:
        actor: SDNC
        recipe: resourceUpdate
        target:
          type: VM
        retry: 3
        timeout: 1200
        success: final_success
        failure: final_failure
        failure_timeout: final_failure_timeout
        failure_retries: final_failure_retries
        failure_exception: final_failure_exception
        failure_guard: final_failure_guard
     


    SDNC API/Recipe

    Code Block
    languagetext
    firstline1
    titleSDNC API for BBS Nomadic ONT
    linenumberstrue
    collapsetrue
    # No supported in Dublin for now...


    A&AI APIs

    A&AI APIs Called Directly By Operational Policy

    API for updating the service-instance is the same as before and only this one need to be called twice during ONT Relocation Policy execution. 

    Code Block
    languagetext
    firstline1
    titleService Status Update
    linenumberstrue
    collapsetrue
    PUT
    /business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}

    A&AI APIs Called Indirectly Through SO/SDNC 

    To update the attachment point of the PNF, when the old logical-link object is deleted, it should be automatically removed from the pnf relationship-list, then create a new logical-link object and PUT it into the pnf relationship-list, e.g. as the following

    Code Block
    languagetext
    firstline1
    titleUpdate PNF
    linenumberstrue
    collapsetrue
    PUT /network/pnfs/pnf/{pnf-name}/relationship-list/relationship

    To update the metadata on the service-instance, use the PUT on the metadatum objects. If there are new objects, then add them to the relationship-list on the cp/pnf/generic-vnf, etc, e.g. as the following

    Code Block
    languagetext
    firstline1
    titleUpdate service meta data
    linenumberstrue
    collapsetrue
    PUT /business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}/metadata/metadatum/{metaname}
    
    PUT
    /network/generic-vnfs/generic-vnf/{vnf-id}/relationship-list/relationship


    Design Time Artifacts

    Code Block
    languagetext
    firstline1
    titlePNF Update Event
    linenumberstrue
    collapsetrue

    Nomadic ONT Event/DCAE_CL_OUTPUT Event  (WIP)

    This event triggers Policy engine to call SO API to modify the associated HSIA service.  

    DCAE_CL_OUTPUT Event

    Code Block
    languagetext
    firstline1
    titleDCAE Control Loop Event
    linenumberstrue
    collapsetrue
    {
        "closedLoopEventClient": "DCAE.BBS_mSInstance",
        "policyVersion": "1.0.0.5",
        "policyName": "Nomadic_ONT",
        "policyScope": "service=HSIAService,type=SampleType,closedLoopControlName=CL-NomadicONT-d925ed73-8231-4d02-9545-db4e101f88f8",
        "target_type": "VM",
        "AAI": {
            "service-information.service-instance-id" : "service-instance-id-example",
            "pnf.ontSN" : "ontSN-example"     //...what ever this is
        },
        "closedLoopAlarmStart": 1484677482204798,
        "closedLoopEventStatus": "ONSET",
        "closedLoopControlName": "ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b",
        "version": "1.0.2",
        "target": "vserver.vserver-name",
        "requestID": "97964e10-686e-4790-8c45-bdfa61df770f",
        "from": "DCAE"
    }
    A&AI Enrichment

    The moving ONT associated (through pnfName) service ID is looked up in A&AI and enriched in the A&AI portion of the above DCAE_CL_OUTPUT Event which trigger the operational policy in the operational policy defined below.  

    Update Service Micro-service

    A new micro-service, ONAP Micro-Service or ONAP SM SDK, that handles RG Online (or activation) notification will be introduced to consume a new type of VES event. This event is converted from RG Activation notification by VES Mapper.

    The characters of this generic micro- service could be the following: 

            - hold a set of REST APIs

            - consume VES events from DMAAP and the consumed event types will be configurable at both the design time and run time

            - publish VES events to DMAAP and the published event types will be configurable at both the design time and run time

            - run A&AI query A&AI  enrichment logic 

    The Update Service MS could be built on top of DCAE service SDK ( https://gerrit.onap.org/r/#/admin/projects/dcaegen2/services/sdk - R4).  A MS blueprint is defined at DCAE-DS and this service can be deployed from CLAMP or can be instantiated as a standalone container when DCAE is deployed.

    Both pnfUpdate and CPE Authentication events will be consumed by this micro-service. HSIA re-provisioning action is triggered through Policy executing Nomadic ONT operational policy, while  CPE Authentication event triggers HSIA service update by marking it as activated. 

    RG Activation(CPE Authentication) Event 

    This event is converted from the RG Activation notification by VES Mapper.  Upon receiving this event UpdateService MS will look up for the associated HSIA service and trigger Policy engine to mark (calling SO API?) the service as activated. 

    Example in VES StateChange domain

    The CPE Authentication Event is defined here in VES StateChange domain.  It indicates if the ONT/CPE is successfully authenticated at the Edge after the ONT/CPE relocation is completed. 

    Policy

    Apex Engine Triggering

    PDP-A Configuration (JSON)

    Code Block
    languagetext
    firstline1
    titleNomadic ONT PDP-A Configuration
    linenumberstrue
    collapsetrue
    Policy Schema

    Logic Artifacts

    Pdp-D Option

    Operational Policy

    Code Block
    languagetext
    firstline1
    titleNomadic ONT Operation Policy
    linenumberstrue
    collapsetrue
    ontrolLoop:
      version: 2.0.0
      controlLoopName: ControlLoop-BBS-2179b738-fd36-4843-a71a-a8c24c70c88b
      trigger_policy: unique-policy-id-16-ServiceModify
      timeout: 3600
      abatement: false
       
    policies:
      - id: unique-policy-id-16-ServiceModify
        name: Connectivity Reroute
        description:
        actor: SO
        recipe: serviceModification
        target:
          type: VM
        retry: 3
        timeout: 1200
        success: final_success
        failure: final_failure
        failure_timeout: final_failure_timeout
        failure_retries: final_failure_retries
        failure_exception: final_failure_exception
        failure_guard: final_failure_guard

    SO Recipe

    Design Time

    DCAE-DS

    Micro-service Blueprints

    Code Block
    languagetext
    firstline1
    titleMS Blueprints
    linenumberstrue
    collapsetrue


    CLAMP

    Control Loop (Micro-service) Orchestration

    There are basically 2 ways of CL creation and micro-service orchestration in BBS Nomadic ONT scenario.

    1.  Restconf collector + VES Mapper + PRH + Policy Engine
    2. VES  VES Collector + PRH + Policy Engine


    Notes:

    Interestingly,  this is the first case where DCAE/Policy seem playing roles together in a non-closed/loop or service assurance in sense of usage/solution in ONAP domain,  However,  this does not really matter in the sense of micro services since service is a service as long as it provides the functionality that meets the requirements in a solution, An argument could be that Policy engine does not have to be introduced in this case, However, the important functionality for policy engine is to decouple action takers from the trigger pullers and ultimately establish robust policy driving on this platform w/o code change.