Many operators have their own ETSI-compliant NFVOs, and there is a strong desire for us to have both ETSI- and ONAP-compliant NFVO. So, we propose the ONAP SO NFVO "platform", which is based on ONAP and leveraging modular and extensible plugin-based microservice API management, such as an enhanced MSB, Gravitee, Kong or Kubernetes. Once we build this NFVO platform in ONAP, operators including us can focus on the proprietary development of truly differentiating value-added capabilities on top of the NFVO platform. We believe this approach provides cost saving over implementation of proprietary code, both for initial development, ongoing standardization support and enhancements.
Note: VFC would be still a valid NFVO reference implementation. And, we want to have this NFVO platform which provides modular and extensible capabilities.Â
Benefits
Boosts industry compatibility by leveraging ETSI compliant models, interfaces and package management
Provides pluggable NFVO functional blocks that are modular and extensible
Enables Operators to focus on the proprietary development of truly differentiating value-added capabilities on top of ONAP SO NFVO
Provides cost saving over implementation in proprietary code, both for initial development, ongoing standardization support and enhancements
Hierarchical Orchestration Architecture
The following diagram depicts ONAP SO hierarchical orchestration architecture.
ONAP SO NFVO Function Overlap View in ETSI MANO
The following diagram depicts the SO NFVO position in ETSI MANO.
NSD Structure that is supported by NS LCM
The following diagram depicts the NSD structure that NS LCM supports.
VNF-FG is out of scope from Guilin.
ONAP SO NFVO Architecture & Functions
Target Component Diagram (Not all will be implemented in Guilin)
The following diagram depicts the NFVO component architecture
NFVO Microservice Plugin Platform provides Microservice registration, discovery and routing.
Microservice registration will be performed by configuration.
Note:
we are not building the Microservice service registration, aggregation, discovery and routing engine itself, but we are leveraging the engine's capability (e.g., MSB, API Fabric, Kong, or Kubernetes & service discovery) to offer configuration of NFVO Microservice components access. So, the NFVO Microservice Plugin Platform is the engine + NFVO component configuration.
If dynamic BPMN deployment is not available in Guilin, it is possible the NS Workflows embed Camunda Engine for Guilin, as a Microservice.
In the dynamic BPMN deployment case, the NS Workflows would be a WAR file, containing NS BPMNs + Business Logic, and deployed into Camunda Engine.
SO NFVO Sub-Components
SOL005 NBI Handler
NS LCM Manager
NS Workflows & Business Logic
Shared Camunda Engine
RIM (Resource Infra Management) Manager
SOL003 Adapter
Inventory DB Adapter (for AAI)
NS LCM DB
Catalog DB Adapter (for ETSI Catalog Manager)
MultiCloud Adapter (for MultiCloud)
Configuration Adapter (not for Guilin)
Policy Adapter (not for Guilin)
FM/PM Event Manager (not for Guilin)
K8S Adapter (not for Guilin)
ONAP SO NFVO Component for Guilin
The following diagram diagram depicts ONAP SO NFVO Component for Guilin.
ONAP SO NFVO Component Deployment View
The following diagrams depict a deployment view of ONAP SO NFVO. There are Plan A and B. The Plan B provides a simpler deployment option and will support the NS Workflow BPMNs migration to the Stand-Alone shared Camunda engine (when ONAP SO support custom Workflow deployment).
Deployment View for Guilin
In the Guilin, SO NFVO will consist of the following PODs:
NS LCM Mgr
SOL003 Adapter
NS LCM DB Mgr (not for Guilin; designed to reuse the VFC NS LCM DB Mgr Microservice, but the VFC Microservice is not yet available for Guilin)
In Guilin, NFVO database follows ONAP SO Database mechanism.
Resource Infra Management Mgr (not for Guilin; designed to handle OOF-based resource granting and Or-Vi management, but the OOF-based granting is not available for Guilin)
Guilin SO NFVO Testing
The UUI - SO - E2E Workflows - NS Workflows - SOL005 Adapter sequences are not ready for Guilin. As a result, the Curl Command as the SO NFVO client allows to send SOL005-compliant requests to SO NFVO directly.
Microservice Component Registration
TBD
SOL003 Adapter RegistrationÂ
The SOL003 Adapter registers itself in the OOM installation
Executive Summary - Enable E2E workflows by orchestrating ETSI NFV compliant Network Services and VNFs. This NFVO should provide an ETSI NFV SOL005 v2.7.1 NBI which can onboard ETSI NFV SOL004 and ETSI NFV SOL007 v2.7.1 compliant packages which then can be Life Cycle Managed and monitored. This NFVO should use an ETSI SOL003 v2.7.1 SBI to invoke an external VNF Manager.Â
Business Impact - Enables operators and service providers to use Industry standard Orchestration to deploy, manage and monitor network services. Industry compatibility.
Business Markets - All operators and service providers that are developing ETSI compatible Network Services especially for 5G Slicing where each Slice Subnet is associated with a Network ServiceÂ
Funding/Financial Impacts - Reduction in operations expense from using industry standard ETSI Orchestration.
Organization Mgmt, Sales Strategies -There is no additional organizational management or sales strategies for this requirement outside of a service providers "normal" ONAP deployment and its attendant organizational resources from a service provider.Â
ONAP SO NFVO Requirements for Guilin
ONAP SO NFVO is a sub-component of SO and provides ETSI NFV-compliant NFVO functions in ONAP, such as ETSI NFVO MANO 1) SOL007, SOL004 and SOL001 Modeling and Package, 2) SOL005-compliant NBI, 3) NS LCM and 4) SOL003-compliant SBI for VNFM invocation.
Note:Â
For the ONAP SO NFVO, we plan to build:
1) the NFVO platform foundation,
2) SOL005 NBI (based on the forge.etsi.org SOL005 swagger files; we believe it is easy to upgrade for ETSI specification changes),
3) NS LCM Manager leveraging Camunda BPMN with custom workflows support (in the future, possibly design workflows from SDC and associate them with NS models – model-driven),
4) leveraging VFC NS Instance DB microservice and NS LCM business logic, and
5) CNF support hook. Since ONAP SO already has the SOL003 Adapter, for our project, at this time we don’t need VFC gVNFM and VNFM adapting mechanism.Â
P1: Phase 1 (for Guilin)
P2: Phase 2 (post Guilin)
P3: Phase 3 (future release)
Requirement #
Requirement
Component
Phase
NFVO.R1
Provides a NFVO function Microservice plugin framework for hosting NFVO function components by configuration.
Note: we are not building the Microservice service registration, aggregation, discovery and routing engine itself, but we are leveraging the engine's capability (e.g., MSB, API Fabric, Kong, or Kubernetes & service discovery) to offer configuration of NFVO Microservice components access.Â
Note: the engine choice is under discussion
Support for Microservice registration
The following default function Microservices will be plugged in:Â
SOL005 NBI (API Handler)
NS LCM Manager
NS Workflows and Logic (deployable to Camunda Workflow Engine)
Shared Camunda Engine (if ONAP Dynamic BPMN is available)
Camunda Workflow Engine
ETSI Catalog DB Adapter
NS Resource Infra Management (RIM) Manager
SOL003 Adapter
MultiCloud Adapter (leverage SO MultiCloud Adapter)
Inventory DB Adapter (default: AAI)
Notification Manager (not for Guilin)
Policy Adapter (not for Guilin)
K8S Adapter (not for Guilin)
Configuration Adapter (not for Guilin)
FM/PM Event Adapter (not for Guilin)
Support for substitution of existing function plugins
Supports registration of a new substitution Microservice with version control (leverage a mechanism like AAI ESR/MSB/API Fabric/MSB/Kubernetes/Kong - TBD)
supports plug-in mechanism of substitution Microservices
Dynamic dispatching/launching plugin instances based on configuration/policy
Support for extension of existing function plugins
Default function plugin extension with version control
Dynamic dispatching/launching an extended plugin instance based on configuration/policy
Support for Service Discovery
Support for Inter-Service Communication
Microservice Plugin Framework
(configuration)
P1
NFVO.R2
Supports SOL005-compliant NS LCM (Network Service Lifecycle Management) NBI interfaces for its client such as ONAP SO or SOL005-compliant clients. In Guilin, the following operations will be supported
Create NS
Instantiate NS
Terminate NS
Delete NS
Get NS Operation Status
Subscription (Create, GET, Delete)
Sends Notification (as a client)
SOL005 NBI
P1
NFVO.R3
Supports the ETSI-compliant NS LCM. In Guilin, the following operations will be supported
Create NS
Instantiate NS
Terminate NS
Delete NSÂ
Subscription
NS LCM
P1
NFVO.R4
Sends SOL005-compliant NS LCM notifications to its subscriber, such as ONAP SO or SOL005-compliant clients
Send NS Notification
SOL005 NBI
P1
NFVO.R5
Manages (as a client) virtualized resources via interfaces (Or-Vi) exposed by the VIM
Software Image (P1)
Container Image Management (P2)
Resource Management, validation and authorization of NFVI resource requests (P2)
NS RIM Manager
P1
NFVO.R6
Supports Virtual Links and VNF-FG - NS LCMÂ
VLs (P1)
VNF-FGs (P2)
NS LCM
P1
NFVO.R7
Manages (as a client) virtualized resource management interfaces (SOL003) thru the existing SOL003 Adapter
Create VNFs
Instantiate VNFs
Terminate VNFs
Delete VNFs
Subscription
NS LCM, SOL003 Adapter
P1
NFVO.R8
Supports VNF Granting interfaces (SOL003) to the SOL003 AdapterÂ
Granting VNF with HPA, leveraging OOF (TBD)
NS LCM, NS RIM Manager, SOL003 Adapter
P1
NFVO.R9
Supports VNF lifecycle management (LCM) notifications (SOL003) to the SOL003 AdapterÂ
Provides SOL003-compliant Notification endpoint for the SOL003 Adapter
NS LCM, SOL003 Adapter
P1
NFVO.R10
Interfaces with ETSI Catalog Manager for SOL004 VNF/PNF and SOL007 NS packages
Queries packages (VNF/PNF/NS)
Queries descriptions (VNFD/PNFD/NSD)
Subscription
NS LCM
P1
NFVO.R11
Supports package management notification interfaces to ETSI Catalog Manager
Provides notification endpoints based on the ETSI Catalog Manager package management interfaces
NS LCM
NFVO.R12
Supports Communication Security, conforming SOL005 specificationÂ
ONAP SO NFVO NBI supports HTTPS and Authentication/Authorization towards SO/SOL005 Adapter
ONAP SO NFVO SBI (through SOL003 Adapter) supports HTTPS and Authentication/Authorization towards SVNFMs
NS LCM, SOL005 NBI
P1
ONAP SO and SOL005 Adapter RequirementsÂ
Requirement #
Requirement
Component
Phase
SOL005.A.R1
ONAP SO receives E2E (OSS Service-level) requests and parse them and invoke NS workflows per NSÂ
Sends SOL005 requests to the ONAP SO NFVO, as one of the choices (SO NFVO, VFC, External NFVO)
SOL005 Adapter
P1
SOL005.A.R2
Subscribes to ONAP SO NFVO for notifications
Conforms to SOL005 Package Management Subscription APIs
Create Subscription
Delete Subscription
Query Subscription
SOL003 Adapter
P1
SOL005.A.R3
Provides notification endpoint(s) to receive notifications
conforms to SOL005 Package Management Notification API
SOL003 Adapter
P1
SOL003 Adapter Requirements
Requirement #
Requirement
Component
Phase
SOL003.A.R1
SOL003 Adapter will be invoked by SO NFVO
SOL003 Adapter, NS LCM
P1
Note:Â
SOL003 Adapter features will stay at the current level; i.e., no enhancement to focus on the NFVO development.
NS LCM will use the current SOL003 Adapter NBI.
Additional/Detailed SOL003 Adapter requirements will be addressed at the SOL003 Adapter section.
SOL002 Adapter Requirements
Requirement #
Requirement
Component
Phase
Note:Â
SOL002 Adapter enhancements are NOT expected for the SO NFVO.
ETSI Catalog Manager Requirements
Requirement #
Requirement
Component
Phase
ETSI.CATALOG.R1
ETSI Catalog Manager supports ETSI v.2.7.1 specification
Package Management Swagger needs to be updated to v2.7.1
Package Management Notification Swagger needs to be updated to v2.7.1
Parser needs to be updated to conform to v2.7.1
ETSI Catalog Manager
P1
Out of Scope Features from Guilin
The following features are out of scope from Guilin:
Container Image Management (P2)
Resource Management, validation and authorization of NFVI resource requests (P2)
Executive Summary - Enable E2E workflows by orchestrating ETSI NFV compliant Network Services and VNFs. This NFVO should provide an ETSI NFV SOL005 v2.7.1 NBI which can onboard ETSI NFV SOL004 and ETSI NFV SOL007 v2.7.1 compliant packages which then can be Life Cycle Managed and monitored. This NFVO should use an ETSI SOL003 v2.7.1 SBI to invoke an external VNF Manager.Â
Business Impact - Enables operators and service providers to use Industry standard Orchestration to deploy, manage and monitor network services. Industry compatibility.
Business Markets - All operators and service providers that are developing ETSI compatible Network Services especially for 5G Slicing where each Slice Subnet is associated with a Network ServiceÂ
Funding/Financial Impacts - Reduction in operations expense from using industry standard ETSI Orchestration.
Organization Mgmt, Sales Strategies -There is no additional organizational management or sales strategies for this requirement outside of a service providers "normal" ONAP deployment and its attendant organizational resources from a service provider.Â
Support SO NFVO function Microservice plugin capabilities, leveraging MSB, SpringBoot and Kubernetes, for hosting NFVO function components by configuration. So, the SO NFVO can be customized in a future by operators.
Support for substitution of existing function plugins
Supports registration of a new substitution Microservice with version control (leverage a mechanism like AAI ESR)
supports plug-in mechanism of substitution Microservices
Dynamic dispatching/launching plugin instances based on configuration/policy
Support for extension of existing function plugins
Default function plugin extension with version control
Dynamic dispatching/launching an extended plugin instance based on configuration/policy
Test Service Discovery
Test Inter-Service Communication (for Guilin, SOL003 Adapter)
Note: we are not building the Microservice service registration, aggregation, discovery and routing engine itself, but we are leveraging the engine's capability (e.g., MSB, API Fabric, Kong, or Kubernetes & service discovery) to offer configuration of NFVO Microservice components access.Â
In Guilin, the following will be supported
Configure Microservice registration
The following default function Microservices will be plugged in:Â
NS LCM Manager including:
SOL005 NBI API Handler
NS Workflows and Logic
Embedded Camunda Workflow Engine
MultiCloud Adapter client
ETSI Catalog Manager Adapter
AAI Client
SOL003 Adapter
Shared Camunda Workflow Engine (allow to use ONAP SO Camunda engine) - if ONAP SO Dynamic BPMN is available.
ETSI Catalog Manager Adapter (in Guilin, it is part of NS LCM Manager)
NS Resource Infra Management (RIM) Manager
MultiCloud Adapter (in Guilin, reuse of ONAP SO MultiCloud Adapter)
Inventory DB Adapter (In Guilin, reuse of ONAP SO AAI client)
Supports NFVO Micro-Service Registration for plugging in microservices
Configuration for the default NFVO sub-components
Yes
<requirements for finding SO-NFVO sub-microservices>
to be included to user story requirements
Support for NFVO Service Discovery
Supports NFVO Micro-Service Discovery with version control
Test for the default NFVO sub-component discovery
Yes
<requirements for communication between SO-NFVO sub-microservices>
to be included to user story requirements
Support for NFVO Inter-Service Communication
Supports for NFVO Inter-Service Communication
Test for the default NFVO sub-component communication
Yes
Support for SOL005 NBI API HandlerÂ
Preconditions:
ETSI SOL007 NS packages are onboarded into SDC and distributed to ETSI Catalog Manager.
In Guilin, we are testing SOL005-compliant requests, allowing the CLI-based SOL005 client sends SOL005 requests directly to SO NFVO in case the UUI - SO - E2E Workflows - NS Workflows - SOL005 Adapter sequences are NOT ready for Guilin.
Provides SOL005-compliant Restful Northbound APIs for SO/SOL005 Adapter (P1)
Supports NS Lifecycle Management (LCM) APIs
Create NS  (POST “/api/nslcm/v1/ns_instances”)
 Instantiate NS (POST “/api/nslcm/v1/ns_instances/{nsInstanceId}/instantiate”)
Use a Location HTTP header that points to the new individual NS Lifecycle Operation Occurrence resource; i.e. the URI of that resource (.../ns_lcm_op_occs/{nsLcmOpOccId}
Supports the Sends nsLcmOperationOccurrenceNotifiation (start, result) notification operation until the result status becomes COMPLETED
Optionally, Instantiate NS operations uses the GET individual NS LCM operation occurrence request and response
Error handling: if the operation is failed, error information is provided in the notification message
Post conditions: the NS Instance is as the INSTANTIATED state
Note: secure communication is handled by a separate user story, SO-3165.
SOL007 NS packages are stored in ETSI Catalog Manager.
the Cli-based SO NFVO Client is ready to send the SOL005-compliant Terminate NS request
The SO-NFVO (so-etsi-nfvo) pod is ready
Supports the SOL005-compliant Terminate NS API
Supports Terminate NS request API: POST /api/nslcm/v1/ns_instances/{nsInstanceId}/terminate (TerminateNsRequest)
Supports responses 202 Accepted with an empty payload body
Returns a dummy 202 until the backend business logic is readyÂ
Use a Location HTTP header that points to the new individual NS Lifecycle Operation Occurrence resource; i.e. the URI of that resource (.../ns_lcm_op_occs/{nsLcmOpOccId}
Supports the Sends nsLcmOperationOccurrenceNotifiation with nsLcmOpOccId, notificationStatus (start, result) until the result status becomes COMPLETEDÂ
Optionally, Terminate NS operations uses the GET individual NS LCM operation occurrence request and response
Error handling: if the operation is failed, error information is provided in the notification message
Post conditions: the NS Instance is set as the TERMINATED state
Note: secure communication is handled by a separate user story, SO-3165.
dst_plan = get nsd with the given nspackage_id, input parameters
Get an ns instance id from the parameter
get job id and occ id from the NS LCM Mgr
Gets VNF VIM from the location_constraints
Gets NSD from ETSI Catalog Manager and parses NSD (by using either SDC parser or ETSI Catalog Manager parser)
Note: until either SDC parser or ETSI Catalog Manager parser is ready, use the current SO NFVO internal TOSCA parser
If ETSI Catalog Manage parser is used, use the following ETSI Catalog Manager API:
curl -X POST /api/parser/v1/parsernsd' \
-H 'Content-Type: application/json' \
--data-raw '{
   "csarId": "csarid",
   "packageType": "ns",
   "inputs": "[]"
}'
Updates NFVO_INST db to modify nsd model
Gets VNFs from the NSD
For each VNF, invokes the SOL003 Adapter with SOL003-compliant requests
To call the SOL003 Adapter, use the current SOL003 Adapter Rest API (which is internal to SO)
Note: exposing ETSI SOL003-compliant SOL003 Adapter REST API will be handled by the separate user story (most likely in the Honolulu release).Â
The SOL003 Adapter internal REST API will be enhanced to carry additional attribute(s), such as tenant id, VNF package id
The Create VNF internal API in SOL003 Adapter will invoke both Create and Instantiate VNFs
Send parameters such as vnfd_id, vnfm_type, vimId, s_vimId (with "cloud_owner"_"cloud_regionid") and tenant id to SOL003 Adapter
For Granting VNF, support VNF granting based on the existing SOL003 Adapter.
Note:Â
Currently SOL003 adapter uses “ModelVersionId" from generic-vnf to retrieve the VNFD from SDC/etsi catalog. In order to create generic-vnf it also need model invariant id because of the relationship defined between generic-vnf and service-design-and-creation/models.
Supports VirtualLink connections between VNFs
Supports createVLs (call MultiCloud through MultiCloud Adapter)
Follow the Create VLs user story
Updates NFVO_NSINST db table: update NFVO_NSINST with the nsd model
Sets job status = NS Instantiate ends
Updates NsLcmOpOCC to COMPLETED
Note: Sends nsLcmOperationOccurrenceNotification
Note: this notification will be handled by a separate notification and subscription user story.
Supports the Terminate NS backend operations and workflows which do the following sequence:
<Terminate NS: note: the following workflow is a template, and it can be enhanced as needed.>
Supports SOL005-compliant TerminateNSRequest request and parameters
Only support for the immediate Terminate request; i.e., terminateTime field is empty.
Creates BPMN workflows and business logic for the following Terminate NS operations
Supports input parameter handling
Initialize Parameters: Get an ns_inst_d, job_id and request_data from the parameters
set terminate_type, terminate_timeout from request_dataÂ
set job_id, ns_inst_id
set occ_id by creating a record in NsLcmOpOccModel DB
Checks if the NS instance already exists
if there no matching NS instance from the NFVO_NSINT database table, consider there is nothing to terminate, and return (not an error, but log that there is no matching NS instance)
Sets Job Status to Starting: set job status as "Starting terminate..."
Updates the NFVO_NSINST database table with the status = TERMINATING
Cancels VNF list (through SOL003 Adapter)
Gets a VNF instance list from the NFVO_NFINST
for each vnf inst
delete_vnf (nf_instid)
POST /api/nslcm/v1/ns/terminateVnf/{instId} to the SOL003 Adapter
For the Terminate VNF internal request, the SOL003 Adapter will invoke both Terminate and Delete VNF operations
Cancels VL list (through MultiCloud Adapter)
Follow the Delete VLs user story; pass the VL list
Modifies the NFVO_NSINST database table, status = NOT_INSTANTIATED
Sets job status = NS terminate ends
Updates NsLcmOpOCC to COMPLETED
Note: Send nsLcmOperationOccurrenceNotification
Note: this notification will be handled by a separate notification and subscription user story.
Supports the Get NS Operation Status operation and workflows which do the following sequence:
<Get NS Operation Status: note: the following workflow is a template, and it can be enhanced as needed.>
Note: the following workflow is for illustration purpose. Since the operation sequence (sending a query to a database and get the NsLcmOpOcc data, the work flow is not necessary
Supports SOL005-compliant Get NS Operation Status operation
Supports input parameters handling:
Initialize Parameters: set lcm_op_occ_id, parameter
if the nsLcmOpOccId exists,Â
Queries NSLCMOPOCCS DB for the nsLcmOpOccId
Returns NsLcmOpOcc
else
Queries NSLCMOPOCCS DB for all
Returns NsLcmOpOcc[]
In Guilin, support only the individual GET nsLCMOPOCCS.
supports the Create NS AAI (global_customer_id, service_type, service_instance_id, data)Â
data = { Â Â "service-instance-id": ns_inst_id, Â Â "service-instance-name": ns_name, Â Â "service-type": NetworkService, Â Â "service-role": NetworkService }
supports the Create Network AAI (network_id, data)
data = {   "network-id": self.vl_inst_id,   "network-name": self.vl_inst_id,   "is-bound-to-vpn": False,   "is-provider-network": True,   "is-shared-network": True,   "is-external-network": True,   "relationship-list": {     "relationship": [       {         "related-to": "service-instance",         "relationship-data": [           {             "relationship-key": "customer.global-customer-id",             "relationship-value": self.global_customer_id           },           {             "relationship-key": "service-subscription.service-type",             "relationship-value": self.service_type            },           {             "relationship-key": "service-instance.service-instance-id",             "relationship-value": self.owner_id           }         ]       }     ]   } }
data = {   "subnets": {     "subnet": [       {         "subnet-id": self.related_subnetwork_id,         "dhcp-enabled": False       }     ]   }, }
call AAI (resource, "PUT", data)
supports the Query subnet AAI (network_id, subnet_id)
resource = /network/generic-vnfs/generic-vnf/{vnf_id}Â Â
data = {   "vnf-id": nf_inst_id,   "vnf-name": vnf_inst_name,   "vnf-type": "vnf-type-test111",   "service-id": ns_inst_id,   "in-maint": True,   "is-closed-loop-disabled": False,   "relationship-list": {     "relationship": [     {       "related-to": "service-instance",       "relationship-data": [         {           "relationship-key": "customer.global-customer-id",           "relationship-value": global_customer_id         },         {           "relationship-key": "service-subscription.service-type",           "relationship-value": service_type         },        {           "relationship-key": "service-instance.service-instance-id",           "relationship-value": ns_inst_id        }       ]     }     ]   } }
data = {   "vserver-id": vserver_id,   "vserver-name": vserver_name,   "prov-status": "ACTIVE",   "vserver-selflink": "",   "in-maint": True,   "is-closed-loop-disabled": False,   "relationship-list": {     "relationship": [     {       "related-to": "generic-vnf",       "relationship-data": [         {           "relationship-key": "generic-vnf.vnf-id",           "relationship-value": vnf_instid         }       ]     }     ]   } }
call AAI (resource, "PUT", data)
supports the Query Vserver AAI (cloud_owner, cloud_region_id, tenant_id, vserver_id)
data = { Â Â "vimid": vim_id, Â Â "vimtype": vim_resp_body["type"], Â Â "url": vim_resp_body["url"], Â Â "user": vim_resp_body["userName"], Â Â "passwd": vim_resp_body["password"], Â Â "tenant": vim_resp_body["tenant"]
data = { Â Â "vimid": vim_id, Â Â "vimtype": vim_resp_body["type"], Â Â "url": vim_resp_body["url"], Â Â "user": vim_resp_body["userName"], Â Â "passwd": vim_resp_body["password"], Â Â "tenant": vim_resp_body["tenant"]
if ther are subnetwork, delete_subnet (subnet_id=subnetwokr_id)
Support for NS Resource Infra Management (RIM) Manager
Provides Resource Granting Information through OOF (Policy, MultiCloud, A&AI) (P1)
Supports interfaces with OOF to collect Granting information
Collects Homing information from OOF or ONAP SO (service-level homing thru OOF)
Cache/Persist Resource Homing information from ONAP SO or OOF
Provides the Grant information to other NFVO components
Supports Or-Vi Interfaces that provided by VIM, Infrastructure Manager, VIM or CaaS manager (note: for Guilin, many of them would be stretch goals) (P1 Partial)
remove ETSI Catalog Manager trigger from ONAP SO for package distribution
remove ETSI Catalog Manager trigger from ONAP SO for package distribution
In Guilin, ETSI Catalog Manager directly consumes SDC package notification and query for the ETSI packages
Fix ONAP SO after the Modeling user story code check-in:Â
MODELING-335
-
Getting issue details...STATUS
,Â
MODELING-336
-
Getting issue details...STATUS
Provides general-purpose notification service for events from:
NS LCM
FM & PM
VNF LCM
Delivers notifications to external components through SOL005 NBI
No
Support for FM/PM Event Adapter (P3)
Provides access to DCAE
No
Support for K8S client (P3)
Provides access to K8S
When we support CNF, it will be done, not for Guilin
No
ONAP SO NFVO Invocation Sequence
The following SOL005-based Operation sequence flow depicts the SO NFVO invocation architecture.
Create/Instantiate NS Sequences
The following diagram depicts the Create/Instantiate NS.
CreateNS
Register ONAP SO NFVO into AAI through ESR
From VID/UUI, invoke the NS LCM
 CreateVFCNSResource.bpmn
CreateVFCNSResource.groovy
preProcessRequest()
Select vfcAdapter/SOL005 Adapter
createNetworkService()
Populate String reqBody ="""{ "nsServiceName":"${nsServiceName}", Â Â "nsServiceDescription":"${nsServiceDescription}", Â Â "nsServiceModelUUID":"${nsServiceModelUUID}", Â Â "nsOperationKey":${nsOperationKey}, Â Â "nsParameters":{ Â Â "locationConstraints":${locationConstraints}, Â Â "additionalParamForNs":${requestInputs} Â Â } }"""
Send a request to vfcAdapter/SOL005 Adapter
vfcAdapterUrl + "/ns/" with reqBody
SOL005Adapter
createNS()Â
Create createNsRequest data
from the additionalParamForNS, get the NFVO orchestrator
Query AAI to get a proper NFVO instance
Prepare CreateNs request header
Map<String, String> requestHeader = new HashMap<>(); requestHeader.put("GLOBALCUSTOMERID", segInput.getNsOperationKey().getGlobalSubscriberId()); requestHeader.put("SERVICETYPE", segInput.getNsOperationKey().getServiceType());
Send a CreateNS request to ONAP SO NFVO
Get an nsInstanceId response from SOL005 Adapter
Save resource operation information
Add relation between Service and NS in AAI
InstantiateNS
Register ONAP SO NFVO into AAI through ESR
From VID/UUI, invoke the NS LCM
 CreateVFCNSResource.bpmn
CreateVFCNSResource.groovy
preProcessRequest()
Select vfcAdapter/SOL005 Adapter
instantiateNetworkService()
Populate String reqBody ="""{   "nsServiceName":"${nsServiceName}",   "nsServiceDescription":"${nsServiceDescription}",   "nsOperationKey":${nsOperationKey},   "nsParameters":${nsParameters} }"""
Send a request to vfcAdapter/SOL005 Adapter
vfcAdapterUrl + "/ns/" + nsInstanceId + "/instantiate" with reqBody
SOL005Adapter
instantiateNS()Â
Create instantiateNsRequest data
set VnfLocationConstraint if any
set additionalParamsForNs
from the additionalParamForNS, get the NFVO orchestrator
Query AAI to get a proper NFVO instance
Prepare CreateNs request header
Map<String, String> requestHeader = new HashMap<>(); requestHeader.put("GLOBALCUSTOMERID", segInput.getNsOperationKey().getGlobalSubscriberId()); requestHeader.put("SERVICETYPE", segInput.getNsOperationKey().getServiceType());
Send a instantiateNS request to ONAP SO NFVO
Get an response status from SOL005 Adapter
if 202 successful, get an Job id
Save resource operation information
Add relation between Service and NS in AAI
Terminate/Delete NS Sequences
The following diagram depicts the Terminate / Delete NS.
Terminate and Delete NS
Register ONAP SO NFVO into AAI through ESR
From VID/UUI, invoke the NS LCM
DeleteVFCNSResource.bpmn
DeleteVFCNSResource.groovy
preProcessRequest()Â
DoDeleteVFCNetworkServiceInstance.groovy
preProcessRequest()
Select vfcAdapter/SOL005 Adapter
String nsOperationKey = """{ Â Â "globalSubscriberId":"${globalSubscriberId}", Â Â "serviceType":"${serviceType}", Â Â "serviceId":"${serviceId}", Â Â "operationId":"${operationId}", Â Â "nodeTemplateUUID":"${nodeTemplateUUID}" }"""
deleteNSRelationship()
delete relation between service and resource from AAI
terminateNetworkService()
POST vfcAdapterUrl + "/ns/" + nsInstanceId + "/terminate" with nsOperationKey
DoDeleteVFCNetworkServiceInstance.groovy
preProcessRequest()
Select vfcAdapter/SOL005 Adapter
String nsOperationKey = """{ Â Â "globalSubscriberId":"${globalSubscriberId}", Â Â "serviceType":"${serviceType}", Â Â "serviceId":"${serviceId}", Â Â "operationId":"${operationId}", Â Â "nodeTemplateUUID":"${nodeTemplateUUID}" }"""
deleteNetworkService()
Send a request to vfcAdapter/SOL005 Adapter
DELETE vfcAdapterUrl + "/ns/"Â with nsInstanceId
SOL005Adapter
terminateNS()Â
Send a terminateNS request to ONAP SO NFVO, with reqBody (terminationTime)
add operation status to database
deleteNS()
Send a deleteNS request to ONAP SO NFVOÂ
add operation status to database
Gaps and Issues
CreateNsRequest
For the Create NS, the CreateNsRequest is sent to SO NFVO.
nsdId
nsName
nsDescription
Also, the current SOL005 Adapter passes the following attributes through HTTP header. This is a workaround, not part of ETSI specification. Maybe, ETSI SOL005 specification needs to be enhanced to allow additional parameters?
GLOBALCUSTOMERID
SERVICETYPE
InstantiateNsRequest
For the Instantiate NS, the InstantiateNsRequest is sent to SO NFVO. As part of the InstantiateNsRequest, additionalParamsForNs is passed, but additionalParamsForVnf is NOT passed from the SOL005 Adapter to NFVO. According to ETSI SOL005 specification, multiple additionalParamsForVnf (data type: ParamsForVnf) can be passed. It seems that currently the additionalParams for VNF is constructed based on the vnf properties in NSD.
The following diagram depicts the NFVO component architecture
NFVO Microservice Plugin Framework - high priority
Provides the NFVO function Microservice plugin framework for supporting service registration, discovery and routing by configuration.
Note: we are not building the Microservice service registration, aggregation, discovery and routing engine itself, but we are leveraging the engine's capability (e.g., MSB, API Fabric, Kong, or Kubernetes & service discovery) to offer configuration of NFVO Microservice components access.Â
Default function plugins support (following default plugins will be registered to the Framework; routing will be configured):
SOL005 NBI (API Handler)
NS LCM Manager
ETSI Catalog DB Adapter (for ETSI Catalog Manager)
Camunda Workflow Engine
NS Workflows and Logic
Resource Infra Management (RIM) Manager
Configuration Adapter
MultiCloud Adapter
Inventory DB Adapter
Notification Manager
FM/PM Event Adapter (for DCAE)
K8S Adapter
Substitution of existing function plugins
Registration of a new substitution Microservice with version control (leverage a mechanism like AAI ESR/MSR/API Fabric/MSB/Kubernetes/Kong - TBD)
Plug-in a substitution Microservice
Dynamic dispatching/launching a new plugin instance based on configuration/policy
Extension of existing function plugins
Default function plugin extension with version control
Dynamic dispatching/launching an extended plugin instance based on configuration/policy
SOL005 NBI (API Handler)- high priority
Provides SOL005-compliant Restful Northbound APIs for SO/SOL005 Adapter
Supports NS Lifecycle Management (LCM) APIs
Create NS  (POST “/api/nslcm/v1/ns_instances”)
 Instantiate NS (POST “/api/nslcm/v1/ns_instances/{nsInstanceId}/instantiate”)
Many operators have their own ETSI-compliant NFVOs, and there is a strong desire for us to have both ETSI- and ONAP-compliant NFVO. So, we propose the ONAP SO NFVO "platform", which is based on ONAP and leveraging modular and extensible plugin-based microservice API management, such as an enhanced MSB, Gravitee, Kong or Kubernetes. Once we build this NFVO platform in ONAP, operators including us can focus on the proprietary development of truly differentiating value-added capabilities on top of the NFVO platform. We believe this approach provides cost saving over implementation of proprietary code, both for initial development, ongoing standardization support and enhancements.
Note: VFC would be still a valid NFVO reference implementation. And, we want to have this NFVO platform which provides modular and extensible capabilities.Â
Benefits
Boosts industry compatibility by leveraging ETSI compliant models, interfaces and package management
Provides pluggable NFVO functional blocks that are modular and extensible
Enables Operators to focus on the proprietary development of truly differentiating value-added capabilities on top of ONAP SO NFVO
Provides cost saving over implementation in proprietary code, both for initial development, ongoing standardization support and enhancements
Hierarchical Orchestration Architecture
The following diagram depicts ONAP SO hierarchical orchestration architecture.
ONAP SO NFVO Function Overlap View in ETSI MANO
The following diagram depicts the SO NFVO position in ETSI MANO.
NSD Structure that is supported by NS LCM
The following diagram depicts the NSD structure that NS LCM supports.
VNF-FG is out of scope from Guilin.
ONAP SO NFVO Architecture & Functions
Target Component Diagram (Not all will be implemented in Guilin)
The following diagram depicts the NFVO component architecture
NFVO Microservice Plugin Platform provides Microservice registration, discovery and routing.
Microservice registration will be performed by configuration.
Note:
we are not building the Microservice service registration, aggregation, discovery and routing engine itself, but we are leveraging the engine's capability (e.g., MSB, API Fabric, Kong, or Kubernetes & service discovery) to offer configuration of NFVO Microservice components access. So, the NFVO Microservice Plugin Platform is the engine + NFVO component configuration.
If dynamic BPMN deployment is not available in Guilin, it is possible the NS Workflows embed Camunda Engine for Guilin, as a Microservice.
In the dynamic BPMN deployment case, the NS Workflows would be a WAR file, containing NS BPMNs + Business Logic, and deployed into Camunda Engine.
SO NFVO Sub-Components
SOL005 NBI Handler
NS LCM Manager
NS Workflows & Business Logic
Shared Camunda Engine
RIM (Resource Infra Management) Manager
SOL003 Adapter
Inventory DB Adapter (for AAI)
NS LCM DB
Catalog DB Adapter (for ETSI Catalog Manager)
MultiCloud Adapter (for MultiCloud)
Configuration Adapter (not for Guilin)
Policy Adapter (not for Guilin)
FM/PM Event Manager (not for Guilin)
K8S Adapter (not for Guilin)
ONAP SO NFVO Component for Guilin
The following diagram diagram depicts ONAP SO NFVO Component for Guilin.
ONAP SO NFVO Component Deployment View
The following diagrams depict a deployment view of ONAP SO NFVO. There are Plan A and B. The Plan B provides a simpler deployment option and will support the NS Workflow BPMNs migration to the Stand-Alone shared Camunda engine (when ONAP SO support custom Workflow deployment).
Deployment View for Guilin
In the Guilin, SO NFVO will consist of the following PODs:
NS LCM Mgr
SOL003 Adapter
NS LCM DB Mgr (not for Guilin; designed to reuse the VFC NS LCM DB Mgr Microservice, but the VFC Microservice is not yet available for Guilin)
In Guilin, NFVO database follows ONAP SO Database mechanism.
Resource Infra Management Mgr (not for Guilin; designed to handle OOF-based resource granting and Or-Vi management, but the OOF-based granting is not available for Guilin)
Guilin SO NFVO Testing
The UUI - SO - E2E Workflows - NS Workflows - SOL005 Adapter sequences are not ready for Guilin. As a result, the Curl Command as the SO NFVO client allows to send SOL005-compliant requests to SO NFVO directly.
Microservice Component Registration
TBD
SOL003 Adapter RegistrationÂ
The SOL003 Adapter registers itself in the OOM installation
Executive Summary - Enable E2E workflows by orchestrating ETSI NFV compliant Network Services and VNFs. This NFVO should provide an ETSI NFV SOL005 v2.7.1 NBI which can onboard ETSI NFV SOL004 and ETSI NFV SOL007 v2.7.1 compliant packages which then can be Life Cycle Managed and monitored. This NFVO should use an ETSI SOL003 v2.7.1 SBI to invoke an external VNF Manager.Â
Business Impact - Enables operators and service providers to use Industry standard Orchestration to deploy, manage and monitor network services. Industry compatibility.
Business Markets - All operators and service providers that are developing ETSI compatible Network Services especially for 5G Slicing where each Slice Subnet is associated with a Network ServiceÂ
Funding/Financial Impacts - Reduction in operations expense from using industry standard ETSI Orchestration.
Organization Mgmt, Sales Strategies -There is no additional organizational management or sales strategies for this requirement outside of a service providers "normal" ONAP deployment and its attendant organizational resources from a service provider.Â
ONAP SO NFVO Requirements for Guilin
ONAP SO NFVO is a sub-component of SO and provides ETSI NFV-compliant NFVO functions in ONAP, such as ETSI NFVO MANO 1) SOL007, SOL004 and SOL001 Modeling and Package, 2) SOL005-compliant NBI, 3) NS LCM and 4) SOL003-compliant SBI for VNFM invocation.
Note:Â
For the ONAP SO NFVO, we plan to build:
1) the NFVO platform foundation,
2) SOL005 NBI (based on the forge.etsi.org SOL005 swagger files; we believe it is easy to upgrade for ETSI specification changes),
3) NS LCM Manager leveraging Camunda BPMN with custom workflows support (in the future, possibly design workflows from SDC and associate them with NS models – model-driven),
4) leveraging VFC NS Instance DB microservice and NS LCM business logic, and
5) CNF support hook. Since ONAP SO already has the SOL003 Adapter, for our project, at this time we don’t need VFC gVNFM and VNFM adapting mechanism.Â
P1: Phase 1 (for Guilin)
P2: Phase 2 (post Guilin)
P3: Phase 3 (future release)
Requirement #
Requirement
Component
Phase
NFVO.R1
Provides a NFVO function Microservice plugin framework for hosting NFVO function components by configuration.
Note: we are not building the Microservice service registration, aggregation, discovery and routing engine itself, but we are leveraging the engine's capability (e.g., MSB, API Fabric, Kong, or Kubernetes & service discovery) to offer configuration of NFVO Microservice components access.Â
Note: the engine choice is under discussion
Support for Microservice registration
The following default function Microservices will be plugged in:Â
SOL005 NBI (API Handler)
NS LCM Manager
NS Workflows and Logic (deployable to Camunda Workflow Engine)
Shared Camunda Engine (if ONAP Dynamic BPMN is available)
Camunda Workflow Engine
ETSI Catalog DB Adapter
NS Resource Infra Management (RIM) Manager
SOL003 Adapter
MultiCloud Adapter (leverage SO MultiCloud Adapter)
Inventory DB Adapter (default: AAI)
Notification Manager (not for Guilin)
Policy Adapter (not for Guilin)
K8S Adapter (not for Guilin)
Configuration Adapter (not for Guilin)
FM/PM Event Adapter (not for Guilin)
Support for substitution of existing function plugins
Supports registration of a new substitution Microservice with version control (leverage a mechanism like AAI ESR/MSB/API Fabric/MSB/Kubernetes/Kong - TBD)
supports plug-in mechanism of substitution Microservices
Dynamic dispatching/launching plugin instances based on configuration/policy
Support for extension of existing function plugins
Default function plugin extension with version control
Dynamic dispatching/launching an extended plugin instance based on configuration/policy
Support for Service Discovery
Support for Inter-Service Communication
Microservice Plugin Framework
(configuration)
P1
NFVO.R2
Supports SOL005-compliant NS LCM (Network Service Lifecycle Management) NBI interfaces for its client such as ONAP SO or SOL005-compliant clients. In Guilin, the following operations will be supported
Create NS
Instantiate NS
Terminate NS
Delete NS
Get NS Operation Status
Subscription (Create, GET, Delete)
Sends Notification (as a client)
SOL005 NBI
P1
NFVO.R3
Supports the ETSI-compliant NS LCM. In Guilin, the following operations will be supported
Create NS
Instantiate NS
Terminate NS
Delete NSÂ
Subscription
NS LCM
P1
NFVO.R4
Sends SOL005-compliant NS LCM notifications to its subscriber, such as ONAP SO or SOL005-compliant clients
Send NS Notification
SOL005 NBI
P1
NFVO.R5
Manages (as a client) virtualized resources via interfaces (Or-Vi) exposed by the VIM
Software Image (P1)
Container Image Management (P2)
Resource Management, validation and authorization of NFVI resource requests (P2)
NS RIM Manager
P1
NFVO.R6
Supports Virtual Links and VNF-FG - NS LCMÂ
VLs (P1)
VNF-FGs (P2)
NS LCM
P1
NFVO.R7
Manages (as a client) virtualized resource management interfaces (SOL003) thru the existing SOL003 Adapter
Create VNFs
Instantiate VNFs
Terminate VNFs
Delete VNFs
Subscription
NS LCM, SOL003 Adapter
P1
NFVO.R8
Supports VNF Granting interfaces (SOL003) to the SOL003 AdapterÂ
Granting VNF with HPA, leveraging OOF (TBD)
NS LCM, NS RIM Manager, SOL003 Adapter
P1
NFVO.R9
Supports VNF lifecycle management (LCM) notifications (SOL003) to the SOL003 AdapterÂ
Provides SOL003-compliant Notification endpoint for the SOL003 Adapter
NS LCM, SOL003 Adapter
P1
NFVO.R10
Interfaces with ETSI Catalog Manager for SOL004 VNF/PNF and SOL007 NS packages
Queries packages (VNF/PNF/NS)
Queries descriptions (VNFD/PNFD/NSD)
Subscription
NS LCM
P1
NFVO.R11
Supports package management notification interfaces to ETSI Catalog Manager
Provides notification endpoints based on the ETSI Catalog Manager package management interfaces
NS LCM
NFVO.R12
Supports Communication Security, conforming SOL005 specificationÂ
ONAP SO NFVO NBI supports HTTPS and Authentication/Authorization towards SO/SOL005 Adapter
ONAP SO NFVO SBI (through SOL003 Adapter) supports HTTPS and Authentication/Authorization towards SVNFMs
NS LCM, SOL005 NBI
P1
ONAP SO and SOL005 Adapter RequirementsÂ
Requirement #
Requirement
Component
Phase
SOL005.A.R1
ONAP SO receives E2E (OSS Service-level) requests and parse them and invoke NS workflows per NSÂ
Sends SOL005 requests to the ONAP SO NFVO, as one of the choices (SO NFVO, VFC, External NFVO)
SOL005 Adapter
P1
SOL005.A.R2
Subscribes to ONAP SO NFVO for notifications
Conforms to SOL005 Package Management Subscription APIs
Create Subscription
Delete Subscription
Query Subscription
SOL003 Adapter
P1
SOL005.A.R3
Provides notification endpoint(s) to receive notifications
conforms to SOL005 Package Management Notification API
SOL003 Adapter
P1
SOL003 Adapter Requirements
Requirement #
Requirement
Component
Phase
SOL003.A.R1
SOL003 Adapter will be invoked by SO NFVO
SOL003 Adapter, NS LCM
P1
Note:Â
SOL003 Adapter features will stay at the current level; i.e., no enhancement to focus on the NFVO development.
NS LCM will use the current SOL003 Adapter NBI.
Additional/Detailed SOL003 Adapter requirements will be addressed at the SOL003 Adapter section.
SOL002 Adapter Requirements
Requirement #
Requirement
Component
Phase
Note:Â
SOL002 Adapter enhancements are NOT expected for the SO NFVO.
ETSI Catalog Manager Requirements
Requirement #
Requirement
Component
Phase
ETSI.CATALOG.R1
ETSI Catalog Manager supports ETSI v.2.7.1 specification
Package Management Swagger needs to be updated to v2.7.1
Package Management Notification Swagger needs to be updated to v2.7.1
Parser needs to be updated to conform to v2.7.1
ETSI Catalog Manager
P1
Out of Scope Features from Guilin
The following features are out of scope from Guilin:
Container Image Management (P2)
Resource Management, validation and authorization of NFVI resource requests (P2)
Executive Summary - Enable E2E workflows by orchestrating ETSI NFV compliant Network Services and VNFs. This NFVO should provide an ETSI NFV SOL005 v2.7.1 NBI which can onboard ETSI NFV SOL004 and ETSI NFV SOL007 v2.7.1 compliant packages which then can be Life Cycle Managed and monitored. This NFVO should use an ETSI SOL003 v2.7.1 SBI to invoke an external VNF Manager.Â
Business Impact - Enables operators and service providers to use Industry standard Orchestration to deploy, manage and monitor network services. Industry compatibility.
Business Markets - All operators and service providers that are developing ETSI compatible Network Services especially for 5G Slicing where each Slice Subnet is associated with a Network ServiceÂ
Funding/Financial Impacts - Reduction in operations expense from using industry standard ETSI Orchestration.
Organization Mgmt, Sales Strategies -There is no additional organizational management or sales strategies for this requirement outside of a service providers "normal" ONAP deployment and its attendant organizational resources from a service provider.Â
Support SO NFVO function Microservice plugin capabilities, leveraging MSB, SpringBoot and Kubernetes, for hosting NFVO function components by configuration. So, the SO NFVO can be customized in a future by operators.
Support for substitution of existing function plugins
Supports registration of a new substitution Microservice with version control (leverage a mechanism like AAI ESR)
supports plug-in mechanism of substitution Microservices
Dynamic dispatching/launching plugin instances based on configuration/policy
Support for extension of existing function plugins
Default function plugin extension with version control
Dynamic dispatching/launching an extended plugin instance based on configuration/policy
Test Service Discovery
Test Inter-Service Communication (for Guilin, SOL003 Adapter)
Note: we are not building the Microservice service registration, aggregation, discovery and routing engine itself, but we are leveraging the engine's capability (e.g., MSB, API Fabric, Kong, or Kubernetes & service discovery) to offer configuration of NFVO Microservice components access.Â
In Guilin, the following will be supported
Configure Microservice registration
The following default function Microservices will be plugged in:Â
NS LCM Manager including:
SOL005 NBI API Handler
NS Workflows and Logic
Embedded Camunda Workflow Engine
MultiCloud Adapter client
ETSI Catalog Manager Adapter
AAI Client
SOL003 Adapter
Shared Camunda Workflow Engine (allow to use ONAP SO Camunda engine) - if ONAP SO Dynamic BPMN is available.
ETSI Catalog Manager Adapter (in Guilin, it is part of NS LCM Manager)
NS Resource Infra Management (RIM) Manager
MultiCloud Adapter (in Guilin, reuse of ONAP SO MultiCloud Adapter)
Inventory DB Adapter (In Guilin, reuse of ONAP SO AAI client)
Supports NFVO Micro-Service Registration for plugging in microservices
Configuration for the default NFVO sub-components
Yes
<requirements for finding SO-NFVO sub-microservices>
to be included to user story requirements
Support for NFVO Service Discovery
Supports NFVO Micro-Service Discovery with version control
Test for the default NFVO sub-component discovery
Yes
<requirements for communication between SO-NFVO sub-microservices>
to be included to user story requirements
Support for NFVO Inter-Service Communication
Supports for NFVO Inter-Service Communication
Test for the default NFVO sub-component communication
Yes
Support for SOL005 NBI API HandlerÂ
Preconditions:
ETSI SOL007 NS packages are onboarded into SDC and distributed to ETSI Catalog Manager.
In Guilin, we are testing SOL005-compliant requests, allowing the CLI-based SOL005 client sends SOL005 requests directly to SO NFVO in case the UUI - SO - E2E Workflows - NS Workflows - SOL005 Adapter sequences are NOT ready for Guilin.
Provides SOL005-compliant Restful Northbound APIs for SO/SOL005 Adapter (P1)
Supports NS Lifecycle Management (LCM) APIs
Create NS  (POST “/api/nslcm/v1/ns_instances”)
 Instantiate NS (POST “/api/nslcm/v1/ns_instances/{nsInstanceId}/instantiate”)
Use a Location HTTP header that points to the new individual NS Lifecycle Operation Occurrence resource; i.e. the URI of that resource (.../ns_lcm_op_occs/{nsLcmOpOccId}
Supports the Sends nsLcmOperationOccurrenceNotifiation (start, result) notification operation until the result status becomes COMPLETED
Optionally, Instantiate NS operations uses the GET individual NS LCM operation occurrence request and response
Error handling: if the operation is failed, error information is provided in the notification message
Post conditions: the NS Instance is as the INSTANTIATED state
Note: secure communication is handled by a separate user story, SO-3165.
SOL007 NS packages are stored in ETSI Catalog Manager.
the Cli-based SO NFVO Client is ready to send the SOL005-compliant Terminate NS request
The SO-NFVO (so-etsi-nfvo) pod is ready
Supports the SOL005-compliant Terminate NS API
Supports Terminate NS request API: POST /api/nslcm/v1/ns_instances/{nsInstanceId}/terminate (TerminateNsRequest)
Supports responses 202 Accepted with an empty payload body
Returns a dummy 202 until the backend business logic is readyÂ
Use a Location HTTP header that points to the new individual NS Lifecycle Operation Occurrence resource; i.e. the URI of that resource (.../ns_lcm_op_occs/{nsLcmOpOccId}
Supports the Sends nsLcmOperationOccurrenceNotifiation with nsLcmOpOccId, notificationStatus (start, result) until the result status becomes COMPLETEDÂ
Optionally, Terminate NS operations uses the GET individual NS LCM operation occurrence request and response
Error handling: if the operation is failed, error information is provided in the notification message
Post conditions: the NS Instance is set as the TERMINATED state
Note: secure communication is handled by a separate user story, SO-3165.
dst_plan = get nsd with the given nspackage_id, input parameters
Get an ns instance id from the parameter
get job id and occ id from the NS LCM Mgr
Gets VNF VIM from the location_constraints
Gets NSD from ETSI Catalog Manager and parses NSD (by using either SDC parser or ETSI Catalog Manager parser)
Note: until either SDC parser or ETSI Catalog Manager parser is ready, use the current SO NFVO internal TOSCA parser
If ETSI Catalog Manage parser is used, use the following ETSI Catalog Manager API:
curl -X POST /api/parser/v1/parsernsd' \
-H 'Content-Type: application/json' \
--data-raw '{
   "csarId": "csarid",
   "packageType": "ns",
   "inputs": "[]"
}'
Updates NFVO_INST db to modify nsd model
Gets VNFs from the NSD
For each VNF, invokes the SOL003 Adapter with SOL003-compliant requests
To call the SOL003 Adapter, use the current SOL003 Adapter Rest API (which is internal to SO)
Note: exposing ETSI SOL003-compliant SOL003 Adapter REST API will be handled by the separate user story (most likely in the Honolulu release).Â
The SOL003 Adapter internal REST API will be enhanced to carry additional attribute(s), such as tenant id, VNF package id
The Create VNF internal API in SOL003 Adapter will invoke both Create and Instantiate VNFs
Send parameters such as vnfd_id, vnfm_type, vimId, s_vimId (with "cloud_owner"_"cloud_regionid") and tenant id to SOL003 Adapter
For Granting VNF, support VNF granting based on the existing SOL003 Adapter.
Note:Â
Currently SOL003 adapter uses “ModelVersionId" from generic-vnf to retrieve the VNFD from SDC/etsi catalog. In order to create generic-vnf it also need model invariant id because of the relationship defined between generic-vnf and service-design-and-creation/models.
Supports VirtualLink connections between VNFs
Supports createVLs (call MultiCloud through MultiCloud Adapter)
Follow the Create VLs user story
Updates NFVO_NSINST db table: update NFVO_NSINST with the nsd model
Sets job status = NS Instantiate ends
Updates NsLcmOpOCC to COMPLETED
Note: Sends nsLcmOperationOccurrenceNotification
Note: this notification will be handled by a separate notification and subscription user story.
Supports the Terminate NS backend operations and workflows which do the following sequence:
<Terminate NS: note: the following workflow is a template, and it can be enhanced as needed.>
Supports SOL005-compliant TerminateNSRequest request and parameters
Only support for the immediate Terminate request; i.e., terminateTime field is empty.
Creates BPMN workflows and business logic for the following Terminate NS operations
Supports input parameter handling
Initialize Parameters: Get an ns_inst_d, job_id and request_data from the parameters
set terminate_type, terminate_timeout from request_dataÂ
set job_id, ns_inst_id
set occ_id by creating a record in NsLcmOpOccModel DB
Checks if the NS instance already exists
if there no matching NS instance from the NFVO_NSINT database table, consider there is nothing to terminate, and return (not an error, but log that there is no matching NS instance)
Sets Job Status to Starting: set job status as "Starting terminate..."
Updates the NFVO_NSINST database table with the status = TERMINATING
Cancels VNF list (through SOL003 Adapter)
Gets a VNF instance list from the NFVO_NFINST
for each vnf inst
delete_vnf (nf_instid)
POST /api/nslcm/v1/ns/terminateVnf/{instId} to the SOL003 Adapter
For the Terminate VNF internal request, the SOL003 Adapter will invoke both Terminate and Delete VNF operations
Cancels VL list (through MultiCloud Adapter)
Follow the Delete VLs user story; pass the VL list
Modifies the NFVO_NSINST database table, status = NOT_INSTANTIATED
Sets job status = NS terminate ends
Updates NsLcmOpOCC to COMPLETED
Note: Send nsLcmOperationOccurrenceNotification
Note: this notification will be handled by a separate notification and subscription user story.
Supports the Get NS Operation Status operation and workflows which do the following sequence:
<Get NS Operation Status: note: the following workflow is a template, and it can be enhanced as needed.>
Note: the following workflow is for illustration purpose. Since the operation sequence (sending a query to a database and get the NsLcmOpOcc data, the work flow is not necessary
Supports SOL005-compliant Get NS Operation Status operation
Supports input parameters handling:
Initialize Parameters: set lcm_op_occ_id, parameter
if the nsLcmOpOccId exists,Â
Queries NSLCMOPOCCS DB for the nsLcmOpOccId
Returns NsLcmOpOcc
else
Queries NSLCMOPOCCS DB for all
Returns NsLcmOpOcc[]
In Guilin, support only the individual GET nsLCMOPOCCS.
supports the Create NS AAI (global_customer_id, service_type, service_instance_id, data)Â
data = { Â Â "service-instance-id": ns_inst_id, Â Â "service-instance-name": ns_name, Â Â "service-type": NetworkService, Â Â "service-role": NetworkService }
supports the Create Network AAI (network_id, data)
data = {   "network-id": self.vl_inst_id,   "network-name": self.vl_inst_id,   "is-bound-to-vpn": False,   "is-provider-network": True,   "is-shared-network": True,   "is-external-network": True,   "relationship-list": {     "relationship": [       {         "related-to": "service-instance",         "relationship-data": [           {             "relationship-key": "customer.global-customer-id",             "relationship-value": self.global_customer_id           },           {             "relationship-key": "service-subscription.service-type",             "relationship-value": self.service_type            },           {             "relationship-key": "service-instance.service-instance-id",             "relationship-value": self.owner_id           }         ]       }     ]   } }
data = {   "subnets": {     "subnet": [       {         "subnet-id": self.related_subnetwork_id,         "dhcp-enabled": False       }     ]   }, }
call AAI (resource, "PUT", data)
supports the Query subnet AAI (network_id, subnet_id)
resource = /network/generic-vnfs/generic-vnf/{vnf_id}Â Â
data = {   "vnf-id": nf_inst_id,   "vnf-name": vnf_inst_name,   "vnf-type": "vnf-type-test111",   "service-id": ns_inst_id,   "in-maint": True,   "is-closed-loop-disabled": False,   "relationship-list": {     "relationship": [     {       "related-to": "service-instance",       "relationship-data": [         {           "relationship-key": "customer.global-customer-id",           "relationship-value": global_customer_id         },         {           "relationship-key": "service-subscription.service-type",           "relationship-value": service_type         },        {           "relationship-key": "service-instance.service-instance-id",           "relationship-value": ns_inst_id        }       ]     }     ]   } }
data = {   "vserver-id": vserver_id,   "vserver-name": vserver_name,   "prov-status": "ACTIVE",   "vserver-selflink": "",   "in-maint": True,   "is-closed-loop-disabled": False,   "relationship-list": {     "relationship": [     {       "related-to": "generic-vnf",       "relationship-data": [         {           "relationship-key": "generic-vnf.vnf-id",           "relationship-value": vnf_instid         }       ]     }     ]   } }
call AAI (resource, "PUT", data)
supports the Query Vserver AAI (cloud_owner, cloud_region_id, tenant_id, vserver_id)
data = { Â Â "vimid": vim_id, Â Â "vimtype": vim_resp_body["type"], Â Â "url": vim_resp_body["url"], Â Â "user": vim_resp_body["userName"], Â Â "passwd": vim_resp_body["password"], Â Â "tenant": vim_resp_body["tenant"]
data = { Â Â "vimid": vim_id, Â Â "vimtype": vim_resp_body["type"], Â Â "url": vim_resp_body["url"], Â Â "user": vim_resp_body["userName"], Â Â "passwd": vim_resp_body["password"], Â Â "tenant": vim_resp_body["tenant"]
if ther are subnetwork, delete_subnet (subnet_id=subnetwokr_id)
Support for NS Resource Infra Management (RIM) Manager
Provides Resource Granting Information through OOF (Policy, MultiCloud, A&AI) (P1)
Supports interfaces with OOF to collect Granting information
Collects Homing information from OOF or ONAP SO (service-level homing thru OOF)
Cache/Persist Resource Homing information from ONAP SO or OOF
Provides the Grant information to other NFVO components
Supports Or-Vi Interfaces that provided by VIM, Infrastructure Manager, VIM or CaaS manager (note: for Guilin, many of them would be stretch goals) (P1 Partial)
remove ETSI Catalog Manager trigger from ONAP SO for package distribution
remove ETSI Catalog Manager trigger from ONAP SO for package distribution
In Guilin, ETSI Catalog Manager directly consumes SDC package notification and query for the ETSI packages
Fix ONAP SO after the Modeling user story code check-in:Â
MODELING-335
-
Getting issue details...STATUS
,Â
MODELING-336
-
Getting issue details...STATUS
Provides general-purpose notification service for events from:
NS LCM
FM & PM
VNF LCM
Delivers notifications to external components through SOL005 NBI
No
Support for FM/PM Event Adapter (P3)
Provides access to DCAE
No
Support for K8S client (P3)
Provides access to K8S
When we support CNF, it will be done, not for Guilin
No
ONAP SO NFVO Invocation Sequence
The following SOL005-based Operation sequence flow depicts the SO NFVO invocation architecture.
Create/Instantiate NS Sequences
The following diagram depicts the Create/Instantiate NS.
CreateNS
Register ONAP SO NFVO into AAI through ESR
From VID/UUI, invoke the NS LCM
 CreateVFCNSResource.bpmn
CreateVFCNSResource.groovy
preProcessRequest()
Select vfcAdapter/SOL005 Adapter
createNetworkService()
Populate String reqBody ="""{ "nsServiceName":"${nsServiceName}", Â Â "nsServiceDescription":"${nsServiceDescription}", Â Â "nsServiceModelUUID":"${nsServiceModelUUID}", Â Â "nsOperationKey":${nsOperationKey}, Â Â "nsParameters":{ Â Â "locationConstraints":${locationConstraints}, Â Â "additionalParamForNs":${requestInputs} Â Â } }"""
Send a request to vfcAdapter/SOL005 Adapter
vfcAdapterUrl + "/ns/" with reqBody
SOL005Adapter
createNS()Â
Create createNsRequest data
from the additionalParamForNS, get the NFVO orchestrator
Query AAI to get a proper NFVO instance
Prepare CreateNs request header
Map<String, String> requestHeader = new HashMap<>(); requestHeader.put("GLOBALCUSTOMERID", segInput.getNsOperationKey().getGlobalSubscriberId()); requestHeader.put("SERVICETYPE", segInput.getNsOperationKey().getServiceType());
Send a CreateNS request to ONAP SO NFVO
Get an nsInstanceId response from SOL005 Adapter
Save resource operation information
Add relation between Service and NS in AAI
InstantiateNS
Register ONAP SO NFVO into AAI through ESR
From VID/UUI, invoke the NS LCM
 CreateVFCNSResource.bpmn
CreateVFCNSResource.groovy
preProcessRequest()
Select vfcAdapter/SOL005 Adapter
instantiateNetworkService()
Populate String reqBody ="""{   "nsServiceName":"${nsServiceName}",   "nsServiceDescription":"${nsServiceDescription}",   "nsOperationKey":${nsOperationKey},   "nsParameters":${nsParameters} }"""
Send a request to vfcAdapter/SOL005 Adapter
vfcAdapterUrl + "/ns/" + nsInstanceId + "/instantiate" with reqBody
SOL005Adapter
instantiateNS()Â
Create instantiateNsRequest data
set VnfLocationConstraint if any
set additionalParamsForNs
from the additionalParamForNS, get the NFVO orchestrator
Query AAI to get a proper NFVO instance
Prepare CreateNs request header
Map<String, String> requestHeader = new HashMap<>(); requestHeader.put("GLOBALCUSTOMERID", segInput.getNsOperationKey().getGlobalSubscriberId()); requestHeader.put("SERVICETYPE", segInput.getNsOperationKey().getServiceType());
Send a instantiateNS request to ONAP SO NFVO
Get an response status from SOL005 Adapter
if 202 successful, get an Job id
Save resource operation information
Add relation between Service and NS in AAI
Terminate/Delete NS Sequences
The following diagram depicts the Terminate / Delete NS.
Terminate and Delete NS
Register ONAP SO NFVO into AAI through ESR
From VID/UUI, invoke the NS LCM
DeleteVFCNSResource.bpmn
DeleteVFCNSResource.groovy
preProcessRequest()Â
DoDeleteVFCNetworkServiceInstance.groovy
preProcessRequest()
Select vfcAdapter/SOL005 Adapter
String nsOperationKey = """{ Â Â "globalSubscriberId":"${globalSubscriberId}", Â Â "serviceType":"${serviceType}", Â Â "serviceId":"${serviceId}", Â Â "operationId":"${operationId}", Â Â "nodeTemplateUUID":"${nodeTemplateUUID}" }"""
deleteNSRelationship()
delete relation between service and resource from AAI
terminateNetworkService()
POST vfcAdapterUrl + "/ns/" + nsInstanceId + "/terminate" with nsOperationKey
DoDeleteVFCNetworkServiceInstance.groovy
preProcessRequest()
Select vfcAdapter/SOL005 Adapter
String nsOperationKey = """{ Â Â "globalSubscriberId":"${globalSubscriberId}", Â Â "serviceType":"${serviceType}", Â Â "serviceId":"${serviceId}", Â Â "operationId":"${operationId}", Â Â "nodeTemplateUUID":"${nodeTemplateUUID}" }"""
deleteNetworkService()
Send a request to vfcAdapter/SOL005 Adapter
DELETE vfcAdapterUrl + "/ns/"Â with nsInstanceId
SOL005Adapter
terminateNS()Â
Send a terminateNS request to ONAP SO NFVO, with reqBody (terminationTime)
add operation status to database
deleteNS()
Send a deleteNS request to ONAP SO NFVOÂ
add operation status to database
Gaps and Issues
CreateNsRequest
For the Create NS, the CreateNsRequest is sent to SO NFVO.
nsdId
nsName
nsDescription
Also, the current SOL005 Adapter passes the following attributes through HTTP header. This is a workaround, not part of ETSI specification. Maybe, ETSI SOL005 specification needs to be enhanced to allow additional parameters?
GLOBALCUSTOMERID
SERVICETYPE
InstantiateNsRequest
For the Instantiate NS, the InstantiateNsRequest is sent to SO NFVO. As part of the InstantiateNsRequest, additionalParamsForNs is passed, but additionalParamsForVnf is NOT passed from the SOL005 Adapter to NFVO. According to ETSI SOL005 specification, multiple additionalParamsForVnf (data type: ParamsForVnf) can be passed. It seems that currently the additionalParams for VNF is constructed based on the vnf properties in NSD.
The following diagram depicts the NFVO component architecture
NFVO Microservice Plugin Framework - high priority
Provides the NFVO function Microservice plugin framework for supporting service registration, discovery and routing by configuration.
Note: we are not building the Microservice service registration, aggregation, discovery and routing engine itself, but we are leveraging the engine's capability (e.g., MSB, API Fabric, Kong, or Kubernetes & service discovery) to offer configuration of NFVO Microservice components access.Â
Default function plugins support (following default plugins will be registered to the Framework; routing will be configured):
SOL005 NBI (API Handler)
NS LCM Manager
ETSI Catalog DB Adapter (for ETSI Catalog Manager)
Camunda Workflow Engine
NS Workflows and Logic
Resource Infra Management (RIM) Manager
Configuration Adapter
MultiCloud Adapter
Inventory DB Adapter
Notification Manager
FM/PM Event Adapter (for DCAE)
K8S Adapter
Substitution of existing function plugins
Registration of a new substitution Microservice with version control (leverage a mechanism like AAI ESR/MSR/API Fabric/MSB/Kubernetes/Kong - TBD)
Plug-in a substitution Microservice
Dynamic dispatching/launching a new plugin instance based on configuration/policy
Extension of existing function plugins
Default function plugin extension with version control
Dynamic dispatching/launching an extended plugin instance based on configuration/policy
SOL005 NBI (API Handler)- high priority
Provides SOL005-compliant Restful Northbound APIs for SO/SOL005 Adapter
Supports NS Lifecycle Management (LCM) APIs
Create NS  (POST “/api/nslcm/v1/ns_instances”)
 Instantiate NS (POST “/api/nslcm/v1/ns_instances/{nsInstanceId}/instantiate”)