Table of Contents


ETSI Standard Conformation

This proposal conforms to the following ETSI v2.7.1 specifications.


Resource commitment:

Requirement:

ONAP SO Hierarchical Orchestration Architecture

Rationale & Benefits

Rationale

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

Hierarchical Orchestration Architecture

The following diagram depicts ONAP SO hierarchical orchestration architecture.

ONAP SO NFVO Function Overlap View in ETSI MANO

NSD Structure that is supported by NS LCM

ONAP SO NFVO Architecture & Functions

Component Diagram

The following diagram depicts the NFVO component architecture

Note:



SO NFVO Sub-Components

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:


Microservice Component Registgration

TBD

SOL003 Adapter Registration 

The SOL003 Adapter registers itself in the OOM installation

[oom.git] / kubernetes / so / charts / so-vnfm-adapter / templates / service.yaml

1 # Copyright © 2019 Nordix Foundation
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #       http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 apiVersion: v1
15 kind: Service
16 metadata:
17   name: {{ include "common.servicename" . }}
18   namespace: {{ include "common.namespace" . }}
19   labels:
20     app: {{ include "common.name" . }}
21     chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
22     release: {{ include "common.release" . }}
23     heritage: {{ .Release.Service }}
24   annotations:
25     msb.onap.org/service-info: '[
26       {
27           "serviceName": "{{ include "common.servicename" . }}",
28           "version": "v1",
29           "url": "/so/vnfm-adapter/v1",
30           "protocol": "REST",
31           "port": "{{.Values.service.externalPort}}",
32           "visualRange":"1"
33       }
34       ]'
35 spec:
36   type: {{ .Values.service.type }}
37   ports:
38     {{if eq .Values.service.type "NodePort" -}}
39     - port: {{ .Values.service.internalPort }}
40       nodePort: {{ .Values.global.nodePortPrefixExt | default .Values.nodePortPrefixExt }}{{ .Values.service.nodePort }}
41       name: {{ .Values.service.portName }}
42     {{- else -}}
43     - port: {{ .Values.service.externalPort }}
44       targetPort: {{ .Values.service.internalPort }}
45       name: {{ .Values.service.portName }}
46     {{- end}}
47   selector:
48     app: {{ include "common.name" . }}
49     release: {{ include "common.release" . }}


Also, it registers itself with MSB.

metadata:

    name: {{ include "common.servicename" . }}

    namespace: {{ include "common.namespace" . }}

    labels:

        app: {{ include "common.name" . }}

        chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}

        release: {{ include "common.release" . }}

        heritage: {{ .Release.Service }}

    annotations:

        msb.onap.org/service-info: '[

            {

                "serviceName": "{{ include "common.servicename" . }}",

                "version": "v1",

                "url": "/so/vnfm-adapter/v1",

                "protocol": "REST",

                "port": "{{.Values.service.externalPort}}",

                "visualRange":"1"

            }

        ]'

Component Interfaces

The following diagram depicts component interfaces. 

Note: the blue lines represent interfaces within SO NFVO, and the black lines represent NFVO component interfaces with other ONAP components.


Architecture Presentation Slide Deck and Approval

ONAP Architecture Subcommittee approved this architecture on June 16th 2020.

Requirements

Support for ETSI NFV NFVO  Orchestrator in ONAP SO (ONAP SO ETSI-Aligned Hierarchical Orchestration)

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 #RequirementComponentPhase
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
      • ETSI Catalog DB Adapter
      • Camunda Workflow Engine
      • NS Resource Infra Management (RIM) Manager
      • SOL003 Adapter
      • 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 NBIP1
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 LCMP1
NFVO.R4

Sends SOL005-compliant NS LCM notifications to its subscriber, such as ONAP SO or SOL005-compliant clients

  • Send NS Notification
SOL005 NBIP1
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 ManagerP1
NFVO.R6

Supports Virtual Links and VNF-FG - NS LCM 

  • VLs (P1)
  • VNF-FGs (P2)
NS LCMP1
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 AdapterP1
NFVO.R8

Supports VNF Granting interfaces (SOL003) to the SOL003 Adapter 

  • Granting VNF with HPA, leveraging OOF (TBD)
NS LCM, NS RIM Manager, SOL003 AdapterP1
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 AdapterP1
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 LCMP1
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 NBIP1





SOL005 Adapter Requirements 


Requirement #RequirementComponentPhase
SOL005.A.R1Sends SOL005 requests to the ONAP SO NFVO, as one of the choices (SO NFVO, VFC, External NFVO)SOL005 AdapterP1
SOL005.A.R2

Subscribes to ONAP SO NFVO for notifications

  • Conforms to SOL005 Package Management Subscription APIs
  • Create Subscription
  • Delete Subscription
  • Query Subscription
SOL003 AdapterP1
SOL005.A.R3

Provides notification endpoint(s) to receive notifications

  • conforms to SOL005 Package Management Notification API
SOL003 AdapterP1

SOL003 Adapter Requirements

Requirement #RequirementComponentPhase
SOL003.A.R1SOL003 Adapter will be invoked by SO NFVOSOL003 Adapter, NS LCMP1
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 #RequirementComponentPhase




Note: 

  • SOL002 Adapter enhancements are NOT expected for the SO NFVO.

ETSI Catalog Manager Requirements

Requirement #RequirementComponentPhase
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 ManagerP1




Out of Scope Features from Guilin

The following features are out of scope from Guilin:




Use Cases

Epic and User Story

Epic

User Story

Task

Description

In Guilin?

JIRASize

Support for ETSI NFV NFVO  Orchestrator in ONAP SO (ONAP SO ETSI-Aligned Hierarchical Orchestration)













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. 

Yes 


Support for NFVO Microservice Plugin Framework (P1)

<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
      • ETSI Catalog Manager Adapter
      • Camunda Workflow Engine
      • NS Resource Infra Management (RIM) Manager
      • SOL003 Adapter
      • MultiCloud Adapter
      • Inventory DB Adapter (default: AAI)
      • Notification Manager (not for Guilin)
      • Policy Adapter (not for Guilin)
      • K8S Client (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/MSR/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

Yes


<requirements for each SO-NFVO Microservice>

  • to be included to user story requirements
Support for NFVO Service Registration

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 

<NFVO.R2>


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”)
    • Terminate NS (“/api/nslcm/v1/ns_instances/{nsInstanceId}/terminate”)
    • Delete NS (DELETE “/api/nslcm/v1/ns_instances/{nsInstanceId}”)
    • Get Operation Status ( GET /api/nslcm/v1/ns_lcm_op_occs, 
      • / api/nslcm/v1/ns_lcm_op_occs
    • Scale NS (POST “/api/nslcm/v1/ns_instances/{nsInstanceId}/scale”) – (P2)
    • Heal NS (“POST ”/api/nslcm/v1/ns_instances/{nsInstanceId}/heal”) – (P2)
    • Query NS (GET “/api/nslcm/v1/ns_instances”, “/api/nslcm/v1/ns_instances/{nsInstanceId}”)
  • Support NS Fault Management API (stretch goal)
  • Support NS Performance Management APIs (stretch goal)

  • Leverages SOL005 Swagger Files
  • make SO-NFVO Pod is deployable in OOM
Yes



Create NS NBI
  • Supports Create NS: POST /api/nslcm/v1/ns_instances (CreateNsRequest)
  • Responses with NsInstance with 201 (for success) or an error
  • Sends NsIdentifierCreationNotification to the NFVO subscriber(s) (e.g., ONAP SO SOL005 Adapter)
  • Postcondition: NS Instance is NOT_INSTANTIATED state
Yes



Instantiate NS NBI
  • Precondition: NS instance is NOT_INSTNANTIATED state
  • Supports Instantiate NS: POST /api/nslcm/v1/ns_instances/{nsInstanceId}/instantiate (InstantiateNsRequest)
  • Responses 202 Accepted with an empty payload body
    • return dummy 202 until the business logic is ready. 
    • 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}
  • Sends nsLcmOperationOccurrenceNotifiation (start, result)
  • Postcondition: NS Instance is INSTANTIATED state
  • Error handling: if the operation is failed, error information is provided in the notification message
Yes



Terminate NS NBI
  • Precondition: NS instance is INSTANTIATED state
  • Support Terminate NS: POST /api/nslcm/v1/ns_instances/{nsInstanceId}/terminate (TerminateNsRequest)
  • Responses 202 Accepted with an empty payload body
    • return a dummy 202 until its business logic is ready 
    • 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}
  • Sends nsLcmOperationOccurrenceNotifiation with nsLcmOpOccId, notificationStatus (start, result), subscriptionId, etc. 
  • Postcondition: NS Instance is TERMINATED state
  • Error handling: if the operation is failed, error information is provided in the notification message
Yes



Delete NS NBI
  • Precondition: NS instance in NOT_INSTANTIATED state
  • Supports Delete NS: DELETE /api/nslcm/v1/ns_instances/{nsInstanceId}
  • Sends 204 No Content with an empty payload body
    • return a dummy 204 until the business logic is ready
  • Sends NsIdentifierDeletionNotification to the NFVO subscriber(s) (e.g., ONAP SO SOL005 Adapter)
  • Postcondition: the resource representing the NS instance has been removed from the list of NS instance resources
  • Error handling: if the individual NS instance is not in NOT_INSTANTIATED state, it rejects the deletion request
Yes



Get NS Operation Status NBI
  • Support multiple NS LCM operation occurrences: GET / api/nslcm/v1/ns_lcm_op_occs
    • Response with 200 OK (NsLcmOpOcc[])
  • Support individual NS LCM operation occurrence: GET /api/nslcm/v1/ns_lcm_op_occs/{nsLcmOpOccId}
    • nsLcmOpOccId is an attribute in the NsLcmOperationOccurrenceNotification
    • Response with 200 OK (NsLcmOpOcc), where its opeationStatus=PROCESSING, COMPLETED)

Note: Instantiate NS and Terminate NS use the individual NS LCM operation occurrence

Yes


<NFVO.R4> Support for SOL005 NBI Subscription APIs

Provides SOL005-compliant Restful Northbound Subscription and Notification APIs for SO/SOL005 Adapter

  • Subscription (POST ”/subscriptions”)
  • Notification (SO SOL005 Adapter client-provided; POST notification based on the callbackUrl from the subscription) 
Yes



Create NS Subscription NBI
  • Supports subscription: POST /api/nslcm/v1/subscriptions (LccnSubscriptionRequest)
  • Tests the callback notification endpoint
    • GET <<callback uri>>
    • expects 204 No Content response from the subscriber (e.g., SO SOL005 Adapter)
  • Responses with 201 Created (LccnSubscription)
Yes



Get NS Subscription NBI
  • Supports Get all subscriptions: GET /api/nslcm/v1/subscriptions/
    • Responses with 200 OK (LccnSubscription[])
  • Supports Get individual subscription: GET /api/nslcm/v1/subscriptions/{subscriptionId}
    • Responses with 200 OK (LccnSubscription)
Yes



Delete NS Subscription NBI
  • Supports Delete subscription: DELETE /api/nslcm/v1/subscriptions/{subscriptionId}
    • Responses with 204 No Content
Yes



Send NS Notifications (As a Client)
  • As a client, sends notifications to the subscriber(s) for NS LCM: POST <<callback URI>> (<<Notification>>)
    • <<Notification>> follows NsLcmOperationOccurrenceNotification, NsIdentifierCreationNotification, NsIdentifierDeletionNotification or NsChangeNotification (see, SOL005 v2.7.1 specification 6.5.2.5 - 6.5.2.8)
  • Gets response: 204 No Content from the subscriber (e.g, SO SOL005 Adapter)
Yes








Supports for NS LCM and Workflows (P1)

<NFVO.R3>


Support for NS LCM and Workflows (P1)

  • Provides NS LCM Manager which manages the following NS orchestration
    • CreateNS
    • InstantiateNS
    • TerminateNS
    • DeleteNS 
  • Provides NS workflows and business logic
    • Provides default NS workflows (part of ONAP NFVO deployment)
      • CreateNS bpmn files with business logic
      • InstantiateNS bpmn files with business logic
      • TerminateNS bpmn files with business logic
      • DeleteNS bpmn files with business logic 
    • Allows custom NS workflows deployment (Hot deployment)
      • Note: it has a dependency on SO dynamic BPMN. If SO dynamic BPMN is not supported in Guilin, the NS LCM manager will embed Camunda instance with the default NS workflows and business logic.
      • The Operators build their own workflows and business logic as war files
      • The Operators drop off custom workflows war files into the Camunda deployment directory
      • UI for the custom workflow war deployment would be supported 
    • Provides business logic for NS LCM
    • Invokes SOL003 Adapter
    • Invokes NS RIM Manager for Granting and other VIM resource management
    • Invokes Catalog DB Adapter (access to ETSI Catalog Manager)
    • Invokes NS Inventory Adapter (access to AAI)
    • Invokes MultiCloud Adapter (for VLs)
    • Invokes Notification Manager (not for Guilin)
    • Invoke Notification Adapter (not for Guilin)
    • Invokes Configuration Manager (not for Guilin)
    • Invokes Policy Adapter (not for Guilin)
    • Invokes OOF Adapter (not for Guilin)
    • Invokes FM/PM Event Adapter (not for Guilin)
    • Invoke K8S Adapter (not for Guilin)
  • NS workflows and business will be packaged as a war and deployed on Camunda engine.
    • see the user story "Package and deploy NS LCM Workflows with business logic"
  • NS Workflows Invoke Camunda Workflow engines (stand-along/clustered Camunda engine) for the NS workflow management
    • Supports Stand-Alone/clustered Camunda engine(s) deployment
    • Allows hot deployment of custom workflow packages  while ONAP NFVO is running

Yes


<NFVO.R3>


Create NS 

NS LCM invokes the Create NS workflows which do the following:

<Create NS>

  • Initialize Parameters: set csar_id, ns_name, description, global_customer_id, service_type from the parameters to the execution variables
  • Get NS Package from ETSI Catalog Manager: query ETSI Catalog Manager for an NS package with the given csar_id 
  • Check NSD Validation: check if the NSD package exists in the ETSI Catalog Manager DB; otherwise generates errors
  • Check if an NS Instance (with the ns_name as the key) exists in the NS Instance DB (NFVO_NSINST DB table)
  • Create NS Instance in NS Instance DB: stores the NS instance data into the NS Instance DB with the status= 'NOT_INSTANTIATED'
    • create an ns instance id (uuid)
    • store ns_instance_id, ns_name, ns_package_id, nsd_id, nsd_invariant_id, description, lastuptime, global_customer_id, service_type
  • Create NS instance in AAI: store an NS instance data to AAI as follows:
    • service-instance-id = ns_inst_id
    • service-instance-name = ns-name
    • service-type = SERVICE_TYPE (NetworkService)
    • service-role = SERVICE_ROLE (NetworkService)
  • get nsInstance from GetNSInfoService
    • collect only the NS related mandatory information, not VnfInstance 
    • Note: CreateVNF and InstantiateVNF happen during the InstantiateNS 
  • return 201 Created with the NsInstance
  • Send NsIdentifierCreationNotification


Yes


<NFVO.R3>

<NFVO.R8>

<NFVO.R9>

Instantiate NS

NS LCM invokes the Instantiate NS workflows which do the following:

<Instantiate NS>


  • NS LCM Mgr: Create a Job: create a job for the ns instance id and return a job_id
    • create a job object with job_type = NS, job_action= NS_INST, ns_inst_id
    • store it to NFVO_JOB database table
    • create an occ id for the ns instance id
    • return 202 Accepted with occ id
  • Initialize Parameters: set ns_inst_id, plan_input
    • plan_input = job_id, ns_inst_id, dst_plan, additionalParamsForNs, additionalParamsForVnf, additionalParamsForPnf
    • 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
  • Update the status of ns_instance record in DB: update the ns instance id row of the NFVO_NSINST db for status (= INSTANTIATING)
  • get a ns instance data from DB for the given ns_inst_id: get an NS records from the NFVO_NSINST db for the ns instance id
  • collect parameters for NS: get and store additional Parameters for NS
  • Get an VIM id: get an VIM id from the cloud owner and cloud region parameters
  • Get VNF VIM: get an VNF VIM from the location constraints
  • set the job status with 'Start Query NSD'
  • get NSD from ETSI Catalog Manager & Parse NSD: get and parse a nsd for the ns package id
    • get ns model (dst_plan)
    • for NSD parsing, 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": "[]"

}'

  • Update NFVO_INST db to modify nsd model (dst_plan)
  • Prepare each VNF request: get VNF list from the nsd 
    • for each VNF,
      • get vnfd_id, vnfm_type, vimId, s_vimId (with "cloud_owner"_"cloud_regionid")
      • select VNFM by leveraging AAI ESR
      • store VNF pararms in collection, with vnf info including vnfmInstanceId
  • Set VL: set vl vim id
    • for each VNF
      • if VNF has dependencies, for each dependency
        • add VNF properties and id into vl_vnf array
    • for each VLs
      • get vnfdId and vimId
      • add vimId into VL array
  • Update NFVO_NSINST db: update NFVO_NSINST with the nsd model
  • get PNF parameters
  • get VNF parameters (from VNF params above)
  • set up Plan Input with job_id, ns_inst_id, tosca plan, additional NS params, VNF params, PNF params)
  • save serviceBaseInfoModel DB
  • Create BPMN workflows for Instantiate NS
  • start workflows with the job_id, ns_inst, plan_input, occ_id).  
    • get service template id from ETSI Catalog Manager
    • get process id from ETSI Catalog Manager
    • workflow run with data (process id, params = plan input)
      • createVLs (call MultiCloud through MultiCloud Adapter)
      • createVNFs (and Instantiate VNFs) (call SVNFMs through SOL003 Adapter)
        • SOL003 Adapter CreateVNF NBI handle both CreateVNF and InstantiateVNF
      • createSFC (Service Function Chain)
      • createPNFs (and Instantiate PNFs)


Yes


<NFVO.R3>

<NFVO.R8>

<NFVO.R9>

Terminate NS

NS LCM invokes the Terminate NS workflows which do the following:

<Terminate NS>


  • 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
  • Check if the NS instance in NS_INST DB: if there no matching ns_inst_id from the NFVO_NSINT database table, consider there is nothing to terminate, and return
  • Set Job Status to Starting: set job status as "Starting terminate..."
  • update the ns_inst_id row from the NFVO_NSINST database table with the status = TERMINATING
  • cancel SFC list
    • get sfc inst array
    • for each sfc inst
      • DELETE /api/nslcm/v1/ns/sfcs/{instId}
  • cancel VNF list (through SOL003 Adapter)
    • get vnf inst list array from NFVO_NFINST
      • for each vnf inst
        • delete_vnf (nf_instid)
          • POST /api/nslcm/v1/ns/terminateVnf/{instId}
  • cancel VL list (through MultiCloud Adapter)
    • get VL Inst array
    • for each VL inst
      • DELETE /api/nslcm/v1/ns/vls/{instId}
  • cancel PNF list (TBD)
    • get pnf inst array
    • for each pnf inst 
      • DELETE /api/nslcm/v1/pnfs/{instId}
  • modify the ns_inst_id row state from the NFVO_NSINST database table
  • modify NFVO_NSINST status = NOT_INSTANTIATED
  • set job status = NS terminate ends
  • Update NsLcmOpOCC to COMPLETED
  • Send nsLcmOperationOccurrenceNotification



Yes


<NFVO.R3>


Delete NS

NS LCM invokes the Delete NS workflows which do the following:

<Delete NS>

  • Initialize Parameters: get ns_inst_id
  • delete ns instance in AAI
    • get ns_instances from NFVO_NSINST database table
    • if there are ns_instances, 
      • query AAI for global_customer_id, service_type, ns_inst_id
      • invoke delete_ns_aai with global_customer_id, service_type, ns_inst_id, resource_version
        • formulate the resource url with parameters
        • call_aaI (resource, "DELETE")
  • delete ns_inst_id row from the NFVO_NSINST database table
  • delete ns_inst_id row from the t_lcm_inputparam_mapping database table
  • delete ns_inst_id row from the t_lcm_defPackage_mapping database table
  • delete ns_inst_id row from the t_lcm_servicebaseinfo database table
  • return 204 No Content
  • Send NsIdentifierDeletionNotification


Yes



Get NS Operation Status

NS LCM invokes the Get NS Operation Status workflows which do the following:

  • Initialize Parameters: set lcm_op_occ_id, parameter
  • if the nsLcmOpOccId pareameter is present, 
    • Query NSLCMOPOCCS DB for the nsLcmOpOccId
    • return NsLcmOpOcc
  • else
    • Query NSLCMOPOCCS DB for all
    • return NsLcmOpOcc[]
Yes



Create NS Subscription

NS LCM invokes the Create NS Subscription workflows which do the following:


  • Initialize Parameters: set subscription filters
    • callback_uri
    • authentication
    • notification_types
    • operation_types
    • operation_states
    • ns_component_types
    • lcm_opname_impactin_nscomponent
    • lcm_opoccstatus_impacting_nscomponent
    • nsInstanceSubscriptionFilter
  • Create Subscription ID: create subscription id
  • Check valid auth info:
  • Check Filter Type:
    • check if the notification is NOTIFICATION_TYPE.NSLCM_OPERATION_OCCURRENCE_NOTIFICATION
  • Check Valid:
    • Check Callback_URI: check callback Uri
      • check if the callbackUri exists in the NFVO_SUBSCRIPTION DB
        • if no subscription, return true
        • else 
          • check additional filter types, notificationTypes, operationTypes, operationStates
            • if the filters are NOT equal, return false
          • check ns instance filter, If the filter type is not equal, return false
        • return true
  • save subscription request to database
  • return response with subscription
Yes



Get NS Subscription

NS LCM invokes the Get NS Subscription workflows which do the following:

  • Initialize Parameter: set subscription_id, params
  • if there is no param, 
    • query NFVO_SUBSCRIPTION DB for all
    • return LccSubscription[]
  • else if there is param, subscriptionId,
    • query NFVO_SUBSCRIPTION DB for the subscriptionId
    • return LccSubscription


Yes



Delete NS Subscription

NS LCM invokes the Delete NS Subscription workflows which do the following:

  • Initialize Parameters: set subscriptonId
  • Delete NFVO_SUBSCRIPTION DB for the subscriptionId
  • if success, return 204 No Content
  • else, return error
Yes



Send NS Notifications

NS LCM sends notifications to SOL005 NBI Handler as the following:

  • Initialize Parameter:
    • query NFVO_SUBSCRIPTION DB for the given key
    • get the callback URI from the return subscription 
  • Formulate notification data (one of the followings)
    • NsLcmOperationOccurrenceNotification,
    • NsIdentifierCreationNotification,
    • NsIdentifierDeletionNotification or
    • NsChangeNotification
  • Sends notifications to the subscriber(s) for NS LCM: POST <<callback URI>> (<<Notification>>)
  • Gets response: 204 No Content from the subscriber (e.g, SO SOL005 Adapter)


Yes


<NFVO.R6>Support for Create VLs 

Creates NS invokes Create VLs


  • Initializes Parameters: set VL data
  • Creates VL to VIM through the MultiCloud Adapter
  • Creates VL to RIM Manager 
  • Saves VL to NFVO_VLINST database
  • Create Network AAI
Yes


<NFVO.R6>Support for Delete VLs

Deletes NS invokes Delete VLs


  • gets VL info from the NFVO_VLINST DB for the vl_inst_id
  • gets ns_inst_id from the VL info ownerid
  • gets vim_id from the VL info vimid
  • gets subnet_id_list from the VL info relatedsubnetworkid
  • gets network_id
  • invokes delete_vl_from_vim (vim_id, subnetwork_id_list, network_id) thru the MultiCloud Adapter
  • invokes delete_vl_from_RIM mgr()
  • invokes delete_network_and_subnet_in_aai()
    • delete_network_aai
  • invokes delete_vl_from_db (vl_inst_info)
    • delete the vl_inst_info record from NFVO_VLINST DB
Yes


<NFVO.R6>Support for Get VLs

Queries VL info for the given vl_inst_id

  • queries NFVO_VLINST DB for the vl_inst_id
  • return a record for the vl_inst_id


Yes



Support for granting VNF (non OOF-based one)

Support for granting VNF (non OOF-based one)

  • When SOL003 Adapter requests for VNF granting, it provides granting decisions
  • Migrate the current SOL003 Adapter granting logic to here.
Yes








Package and deploy NS LCM Workflows with business logic

<NFVO.R3>


When ONAP SO support Dynamic BPMN...

  • Package and deploy NS LCM workflows with business logic for NS LCM
    • default NS LCM workflows and business logic
  • Allows custom NS workflows deployment (Hot deployment)
    • The Operators build their own workflows and business logic as war files
    • The Operators drop off custom workflows war files into the Camunda deployment directory
    • UI for the custom workflow war deployment would be supported 
Yes



Package and deploy default NS LCM workflows with business logic
  • Provides default for NS LCM workflows with business logic for NS LCM
Yes



Support for UI and REST interfaces for custom workflow war deployment 
  • Supports for UI and REST interfaces for custom workflow war deployment
Yes














Support for NS Resource Infra Management  (RIM) Manager (P1 partial)

<NFVO.R5>


  • 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)
    • Software Image Management (P1)
    • Container Image Management (P2)

    • Virtualized Resources Information Management
    • Virtualized Resources Capacity Management

    • Virtualized Resources Management
    • Virtualized Resources Change Management

    • Virtualized Resources Reservation Management
    • Virtualized Resource Quota Management

    • Virtualized Resource Performance Management
    • Virtualized Resource Fault Management

    • Network Forwarding Path (NFP) Management
No



Support for OOF-based Granting VNF
  • Provides Grant VNF
  • Receives a Grant VNF request from SOL003 Adapter 
  • If OOF-based Grant VNF is supported
    • Uses homing data from ONAP SO E2E
  • else use the non-OOF-based Grant
No



Support for Software Image Management
  • Provides Software Image to VIM based on the Or-Vi, by leveraging VIM or MultiCloud APIs.
  • Note: it depends on the current VIM / MultiCloud API support. If they don't support this, we defer this to the future release. 
    • Add Image operation (AddImageRequest); gets AddImageResponse
    • Query Images operation (QueryImagesRequest); get QueryImagesResponse
    • Query Image operation (QueryImageRequest); get QueryImageResponse
    • Update Images operation (UpdateImageRequest); get UpdateImageResponse
    • Delete Images operation (DeleteImageRequest); get UpdateImageResponse
No


Support for NS Catalog DB Adapter (P1) <NFVO.R3>
  • Provides access for ETSI Catalog Manager
  • Get notifications from ETSI Catalog Manager
Yes



Support for queries for VNF/PNF/NS package management
  • Queries ETSI Catalog Manager for NS/PNF/VNF packages by using the ETSI Catalog Manager package management swagger
    • Note: for VNF packages, refer to the existing SOL003 Adapter ETSI Catalog Manager access mechanism
    • ETSI Catalog Manager package management swagger (could be updated for v2.7.1):



Yes



Support for notification endpoint for ETSI Catalog Manager notification
  • Provides the notification endpoint for NS/PNF/VNF packages by using the ETSI Catalog Manager package management notification swagger.
    • Note: for VNF package notification, refer the existing SOL003 Adapter ETSI Catalog Manager access mechanism
    • Note: use the notification endpoint as callback uri during subscription
    • ETSI Catalog Manager package management notification swagger (could be updated for v2.7.1):


Yes


Support for NS Inventory Adapter (P1) <NFVO.R3>
  • Provides access for AAI for NS LCM, leveraging the AAI client module
  • Refactoring of the current AAI Adapter
  • Support for NS AAI APIs (CRUD)
  • Support for Network AAI APIs (CRUD)
  • Support for VNF AAI APIs (CRUD)
  • Support for Vserver AAI APIs (CRUD)
  • Support for Customer AAI APIs (CRUD) - TBD
Yes



Support for NS AAI APIs (CRUD)
  • 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
      }

    • resource = /business/customers/customer/{global_customer_id}/service-subscriptions/service-subscription/{service_type}/service-instances/service-instance/{service_instance_id}

    • call AAI (resource, "PUT", data)
  • supports the Query NS AAI (global_customer_id, service_type, service_instance_id) 
    • resource = /business/customers/customer/{global_customer_id}/service-subscriptions/service-subscription/{service_type}/service-instances/service-instance/{service_instance_id}?depth=all

    • call AAI (resource, "GET")
  • supports the Delete NS AAI (global_customer_id, service_type, service_instance_id, resource_version)
    • resource = /business/customers/customer/{global_customer_id}/service-subscriptions/service-subscription/{service_type}/service-instances/service-instance/{service_instance_id}
    • if resource_version is not empty, resource_version = resource + "?resource-version={resource_version}
    • call AAI (resource, "DELETE")
Yes



Support for Network AAI APIs (CRUD)
  • 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
                          }
                      ]
                  }
              ]
          }
      }

    • resource = network/l3-networks/l3-network/{network_id}
    • call AAI (resource, "PUT", data)
  • supports the Delete Network AAI (network_id, resource_version="")
    • resource = network/l3-networks/l3-network/{network_id}
    • if resource_version is not empty, resource_version = resource + "?resource-version={resource_version}
    • call AAI (resource, "DELETE")
  • supports the Query Network AAI (network_id)
    • resource = network/l3-networks/l3-network/{network_id}
    • call AAI (resource, "GET")
  • supports the Create subnet AAI (network_id, subnet_id, data)
    • resource = /network/l3-networks/l3-network/{network_id}/subnets/subnet/{subnet_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/l3-networks/l3-network/{network_id}/subnets/subnet/{subnet_id}
    • call AAI (resource, "GET")
  • supports the Delete subnet AAI (network_id, subnet_id, resource_version = "")
    • resource = /network/l3-networks/l3-network/{network_id}/subnets/subnet/{subnet_id} 
    • if resource_version is not empty, resource_version = resource + "?resource-version={resource_version}
    • call AAI (resource, "DELETE")
Yes



Support for VNF AAI APIs (CRUD)
  • supports the Create VNF AAI (vnf_id, data)
    • 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
                    }
                  ]
              }
              ]
          }
      }
    • call AAI (resource, "PUT" data)
  • supports the Query VNF AAI (vnf_id)

    • resource = /network/generic-vnfs/generic-vnf/{vnf_id}?depth=all

    • call AAI (resource, "GET")
  • supports the Delete VNF AAI (vnf_id, resource_version="")
    • resource = network/generic-vnfs/generic-vnf/{vnf_id}
    • if resource_version is not empty, resource_version = resource + "?resource-version={resource_version}
    • call AAI (resource, "DELETE")
Yes



Support for Vserver AAI APIs (CRUD)
  • supports the Create Vserver AAI (cloud_owner, cloud_region_id, tenant_id, vserver_id, data)

    • resource = /cloud-infrastructure/cloud-regions/cloud-region/{cloud_owner}/{cloud_region_id}/tenants/tenant/{tenant_id}/vservers/vserver/{vserver_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)
    • resource = /cloud-infrastructure/cloud-regions/cloud-region/{cloud_owner}/{cloud_region_id}/tenants/tenant/{tenant_id}/vservers/vserver/{vserver_id}?depth=all
    • call AAI (resource, "GET")
  • supports the Delete Vserver AAI (cloud_owner, cloud_region_id, tenant_id, vserver_id, resource_version="")
    • resource = /cloud-infrastructure/cloud-regions/cloud-region/{cloud_owner}/{cloud_region_id}/tenants/tenant/{tenant_id}/vservers/vserver/{vserver_id}
    • if resource_version is not empty, resource_version = resource + "?resource-version={resource_version}
    • call AAI (resource, "DELETE")
Yes



Support for Customer AAI APIs (CRUD)
  • TBD for its use case









Support for NS LCM Database Management
  • Provides NS LCM Database Management
  • Creates NS LCM Database tables
  • Provides Database Access Objects (DAO)
Yes



Create NS LCM Database tables and provide CRUD

creates NS LCM Database tables and provides CRUD

  • NFVO_NSINST

id = models.CharField(db_column='ID', primary_key=True, max_length=200)
name = models.CharField(db_column='NAME', max_length=200)
nspackage_id = models.CharField(db_column='NSPACKAGEID', max_length=200, null=True, blank=True)
nsd_id = models.CharField(db_column='NSDID', max_length=200)
nsd_invariant_id = models.CharField(db_column='NSDINVARIANTID', max_length=200)
description = models.CharField(db_column='DESCRIPTION', max_length=255, null=True, blank=True)
sdncontroller_id = models.CharField(db_column='SDNCONTROLLERID', max_length=200, null=True, blank=True)
flavour_id = models.CharField(db_column='FLAVOURID', max_length=200, null=True, blank=True)
ns_level = models.CharField(db_column='NSLEVEL', max_length=200, null=True, blank=True)
status = models.CharField(db_column='STATUS', max_length=200, null=True, blank=True)
nsd_model = models.TextField(db_column='NSDMODEL', max_length=20000, null=True, blank=True)
input_params = models.TextField(db_column='INPUTPARAMS', max_length=2000, null=True, blank=True)
scale_params = models.TextField(db_column='SCALEPARAMS', max_length=2000, null=True, blank=True)
create_time = models.CharField(db_column='CREATETIME', max_length=200, null=True, blank=True)
lastuptime = models.CharField(db_column='LASTUPTIME', max_length=200, null=True, blank=True)
global_customer_id = models.CharField(db_column='GLOBALCUSTOMERID', max_length=50, null=True, blank=True)
service_type = models.CharField(db_column='SERVICETYPE', max_length=50, null=True, blank=True)

  • NFVO_NFINST

nfinstid = models.CharField(db_column='NFINSTID', max_length=200, primary_key=True)
mnfinstid = models.CharField(db_column='M_NFINSTID', max_length=200, blank=True, null=True)
nf_name = models.CharField(db_column='NFNAME', max_length=100, blank=True, null=True)
template_id = models.CharField(db_column='TEMPLATEID', max_length=200, blank=True, null=True)
vnf_id = models.CharField(db_column='VNFID', max_length=200, blank=True, null=True)
package_id = models.CharField(db_column='PACKAGEID', max_length=200, blank=True, null=True)
vnfm_inst_id = models.CharField(db_column='VNFMINSTID', max_length=200, blank=True, null=True)
ns_inst_id = models.CharField(db_column='NSINSTID', max_length=200, blank=True, null=True)
status = models.CharField(db_column='STATUS', max_length=20, blank=True, null=True)
flavour_id = models.CharField(db_column='FLAVOURID', max_length=200, blank=True, null=True)
vnf_level = models.CharField(db_column='VNFLEVEL', max_length=200, blank=True, null=True)
location = models.CharField(db_column='LOCATION', max_length=200, blank=True, null=True)
max_vm = models.IntegerField(db_column='MAXVM', null=True)
max_cpu = models.IntegerField(db_column='MAXCPU', null=True)
max_ram = models.IntegerField(db_column='MAXRAM', null=True)
max_hd = models.IntegerField(db_column='MAXHD', null=True)
max_shd = models.IntegerField(db_column='MAXSHD', null=True)
max_net = models.IntegerField(db_column='MAXNET', null=True)
version = models.CharField(db_column='VERSION', max_length=255, null=True)
vendor = models.CharField(db_column='VENDOR', max_length=255, null=True, blank=True)
vnfd_model = models.TextField(db_column='VNFDMODEL', max_length=20000, blank=True, null=True)
input_params = models.TextField(db_column='INPUTPARAMS', max_length=2000, blank=True, null=True)
scale_params = models.TextField(db_column='SCALEPARAMS', max_length=2000, null=True, blank=True)
create_time = models.CharField(db_column='CREATETIME', max_length=200, null=True, blank=True)
lastuptime = models.CharField(db_column='LASTUPTIME', max_length=200, blank=True, null=True)
extension = models.TextField(db_column='EXTENSION', max_length=65535, blank=True, null=True)

  • NFVO_VLINST

vlinstanceid = models.CharField(db_column='VLINSTANCEID', max_length=255, primary_key=True)
vldid = models.CharField(db_column='VLDID', max_length=255)
vlinstancename = models.CharField(db_column='VLINSTANCENAME', max_length=255, blank=True, null=True)
ownertype = models.IntegerField(db_column='OWNERTYPE')
ownerid = models.CharField(db_column='OWNERID', max_length=255)
relatednetworkid = models.CharField(db_column='RELATEDNETWORKID', max_length=255, blank=True, null=True)
relatedsubnetworkid = models.CharField(db_column='RELATEDSUBNETWORKID', max_length=255, blank=True,
null=True)
vltype = models.IntegerField(db_column='VLTYPE', default=0)
vimid = models.CharField(db_column='VIMID', max_length=255)
tenant = models.CharField(db_column='TENANT', max_length=255)
status = models.CharField(db_column='STATUS', max_length=255)

  • NFVO_JOB

jobid = models.CharField(db_column='JOBID', primary_key=True, max_length=255)
jobtype = models.CharField(db_column='JOBTYPE', max_length=255)
jobaction = models.CharField(db_column='JOBACTION', max_length=255)
resid = models.CharField(db_column='RESID', max_length=255)
status = models.IntegerField(db_column='STATUS', null=True, blank=True)
starttime = models.CharField(db_column='STARTTIME', max_length=255, null=True, blank=True)
endtime = models.CharField(db_column='ENDTIME', max_length=255, null=True, blank=True)
progress = models.IntegerField(db_column='PROGRESS', null=True, blank=True)
user = models.CharField(db_column='USER', max_length=255, null=True, blank=True)
parentjobid = models.CharField(db_column='PARENTJOBID', max_length=255, null=True, blank=True)
resname = models.CharField(db_column='RESNAME', max_length=255, null=True, blank=True)

  • NFVO_OOF_DATA

request_id = models.CharField(db_column='REQUESTID', max_length=255)
transaction_id = models.CharField(db_column='TRANSACTIONID', max_length=255)
request_status = models.CharField(db_column='REQUESTSTATUS', max_length=50)
request_module_name = models.CharField(db_column='RESOURCEMODULENAME', max_length=100)
service_resource_id = models.CharField(db_column='SERVICERESOURCEID', max_length=255, primary_key=True)
vim_id = models.CharField(db_column='VIMID', max_length=255, null=True, blank=True)
cloud_owner = models.CharField(db_column='CLOUDOWNER', max_length=100, null=True, blank=True)
cloud_region_id = models.CharField(db_column='CLOUDREGIONID', max_length=255, null=True, blank=True)
vdu_info = models.TextField(db_column='VDUINFO', max_length=65535, null=True, blank=True)

  • NFVO_SUBSCRIPTION

subscription_id = models.CharField(db_column='SUBSCRIPTIONID', max_length=255, primary_key=True)
vnf_instance_filter = models.TextField(db_column='VNFINSTANCEFILTER', null=True)
ns_instance_filter = models.TextField(db_column='NSINSTANCEFILTER', null=True)
notification_types = models.TextField(db_column='NOTIFICATIONTYPES', null=True)
operation_types = models.TextField(db_column='OPERATIONTYPES', null=True)
operation_states = models.TextField(db_column='OPERATIONSTATES', null=True)
ns_component_types = models.TextField(db_column='NSCOMPONENTTYPES', null=True)
lcm_opname_impacting_nscomponent = models.TextField(db_column='LCMOPNAMEIMPACTINGNSCOMPONENT', null=True)
lcm_opoccstatus_impacting_nscomponent = models.TextField(db_column='LCMOPOCCSTATUSIMPACTINGNSCOMPONENT', null=True)
callback_uri = models.CharField(db_column='CALLBACKURI', max_length=255)
links = models.TextField(db_column='LINKS', max_length=20000)
auth_info = models.TextField(db_column='AUTHINFO', max_length=20000, blank=True, null=True)

  • NSLCMOPOCCS

id = models.CharField(db_column='ID', max_length=255, primary_key=True)
operation_state = models.CharField(db_column='OPERATIONSTATE', null=False, max_length=30)
state_entered_time = models.CharField(db_column='STATEENTEREDTIME', null=False, max_length=30)
start_time = models.CharField(db_column='STARTTIME', null=False, max_length=30)
ns_instance_id = models.CharField(db_column='NSINSTANCEID', null=False, max_length=255)
operation = models.CharField(db_column='OPERATION', null=False, max_length=30)
is_automatic_invocation = models.CharField(db_column='ISAUTOMATICINVOCATION', null=False, max_length=5)
operation_params = models.TextField(db_column='OPERATIONPARAMS', null=False)
is_cancel_pending = models.CharField(db_column='ISCANCELPENDING', null=False, max_length=5)
cancel_mode = models.TextField(db_column='CANCELMODE', null=True)
error = models.TextField(db_column='ERROR', null=True)
resource_changes = models.TextField(db_column='RESOURCECHANGES', null=True)
links = models.TextField(db_column='LINKS', null=False)

  • NFVO_PNFINST

pnfId = models.CharField(db_column='PNFID', primary_key=True, max_length=255)
pnfName = models.CharField(db_column='PNFNAME', max_length=255)
pnfdId = models.CharField(db_column='PNFDID', max_length=50)
pnfdInfoId = models.CharField(db_column='PNFDINFOID', max_length=100)
pnfProfileId = models.CharField(db_column='PNFPROFILEID', max_length=255)
cpInfo = models.TextField(db_column='CPINFO', max_length=255, null=True, blank=True)
emsId = models.CharField(db_column='EMSID', null=True, max_length=255)
nsInstances = models.TextField(db_column='NSINSTANCES', max_length=1000, null=True, blank=True)

  • t_lcm_defPackage_mapping 

service_id = models.CharField(db_column='serviceId', max_length=255, primary_key=True)
service_def_id = models.CharField(db_column='serviceDefId', max_length=255)
template_id = models.CharField(db_column='templateId', max_length=255)
template_name = models.CharField(db_column='templateName', max_length=255)

  • t_lcm_inputParam_mapping 

service_id = models.CharField(db_column='serviceId', max_length=255)
input_key = models.CharField(db_column='inputKey', max_length=255)
input_value = models.CharField(db_column='inputValue', max_length=255, null=True, blank=True)

  • t_lcm_servicebaseinfo 

service_id = models.CharField(db_column='serviceId', max_length=255, primary_key=True)
service_name = models.CharField(db_column='serviceName', max_length=255)
service_type = models.CharField(db_column='serviceType', max_length=20)
description = models.CharField(db_column='description', max_length=255, null=True, blank=True)
active_status = models.CharField(db_column='activeStatus', max_length=20)
status = models.CharField(db_column='status', max_length=20)
creator = models.CharField(db_column='creator', max_length=50)
create_time = models.BigIntegerField(db_column='createTime')

Yes














Support for MultiCloud Adapter (P1)
  • Provides MultiCloud Access
  • Refactoring of the current SO MultiCloud Adapter
Yes



Support for Create Network to VIM API
  • supports the Create Network to VIM through MultiCloud (network_data)
    • gets VIM info: vim_resp_body = get_vim_by_id (vim_id) from AAI

      • call AAI ("/cloud-infrastructure/cloud-regions/cloud-region/{cloud_owner}/{cloud_regionid}?depth=all", "GET")

    • 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"]
           }
    • create API (data)
      • call MultiVimAPI.create_network(auth_info, data)
Yes



Support for Delete Network (VL) from VIM API
  • supports the Delete Network from VIM through MultiCloud (vim_id, subnetwork_id_list, network_id)
    • delete_vl_from_vim
    • gets VIM info: vim_resp_body = get_vim_by_id (vim_id) from AAI

      • call AAI ("/cloud-infrastructure/cloud-regions/cloud-region/{cloud_owner}/{cloud_regionid}?depth=all", "GET")

    • 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)
    • delete_network (network_id = network_id)
      • call MultiVimAPI delete network
Yes


Support for Configuration Adapter (P2)
  • Provides APPC and or CDS access
  • Refactoring of the current APPC and CDS connection
No


Support for Policy Adapter (P2)
  • Provides Policy access
  • Refactoring of the current Policy access
No


Support for OOF Adapter (P1)
  • Provides OOF access for homing
  • Refactoring of the current OOF access
  • Need to discuss further
No


Supports for Notification Manager (P2)
  • 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

Support for SOL005 Adapter to interface to/from ONAP SO NFVO (P1)

SOL005 Adapter supports interfaces to/from ONAP SO NFVO

  • Using UUI / CLI, the E2E request will be sent to SO. Make SO handles the E2E request
    • from UUI, selects NFVO
    • If CLI is used, pass the selected NFVO in the request
  • Make/enhance SO Workflows to extract NSDs from the E2E
  • For each NSD, make SO to invoke the SOL005 Adapter
  • SOL005 Adapter sends SOL005 requests to the ONAP SO NFVO, as one of the choices (SO NFVO, VFC, External NFVO)
    • Chooses the SO NFVO based on the selected NFVO in the request 
    • SOL005 Adapter sends CRUD SOL005-compliant NS requests which include multiple VNFs and VLs.
  • SOL005 Adapter subscribes (CREATE and DELETE) to ONAP SO NFVO for notifications
  • SOL005 Adapter provides notification endpoint(s) to receive notifications (P1)
  • Swagger will be provided to the SOL005 Adapter development


Note: assign to Verizon

Yes















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.


@startuml
participant SO
participant SOL005_Adapter
participant SOL005_NBI
participant NS_LCMGR
participant RIM_Mgr
participant MultiCloud_Adapter
participant OOF
participant Catalog_DB_Adapter
participant ETSI_Catalog_Mgr
participant NFVO_NS_DB
participant Inventory_DB_Adapter
participant AAI
participant SOL003_Adapter
participant VIM
participant VNFM

autonumber 

group Create NS
	SO -> SOL005_Adapter : Create NS
    SOL005_Adapter -> SOL005_NBI : Create NS
    SOL005_NBI -> NS_LCMGR : Create NS
    NS_LCMGR -> NFVO_NS_DB : Create NS instance in NS INST DB
    NFVO_NS_DB -> NS_LCMGR : Response for Create NS instance record
    NS_LCMGR -> Inventory_DB_Adapter : Create NS record
    Inventory_DB_Adapter -> AAI : Create NS record
    AAI --> AAI : Create NS record
    AAI -> Inventory_DB_Adapter : Response for Create NS record
    Inventory_DB_Adapter -> NS_LCMGR: Response for Create NS record
    NS_LCMGR -> SOL005_NBI : Response for Create NS record	
    SOL005_NBI -> SOL005_Adapter : Response with NS Instance Id
    SOL005_Adapter -> SO : Response with NsInstance\n(including NS Instance Id)
    NS_LCMGR -> SOL005_NBI : Send\nNsIdentifierCreationNotification
    SOL005_NBI -> SOL005_Adapter : Send\nNsIdentifierCreationNotification
    SOL005_Adapter -> SO : Send\nNsIdentifierCreationNotification
end
group Instantiate NS
    NS_LCMGR -> Catalog_DB_Adapter : Read NS descriptor
    Catalog_DB_Adapter -> ETSI_Catalog_Mgr : Read NS descriptor
    ETSI_Catalog_Mgr -> Catalog_DB_Adapter : Return NS descriptor
    Catalog_DB_Adapter -> NS_LCMGR : Return NS descriptor
    NS_LCMGR --> NS_LCMGR : Parse & Decompose NS descriptor
    NS_LCMGR --> NS_LCMGR : Instantiate NS
    NS_LCMGR --> NS_LCMGR : Instantiate VLs between VNFs
    NS_LCMGR -> MultiCloud_Adapter : Create Network
    MultiCloud_Adapter -> VIM : Create Network
    VIM -> MultiCloud_Adapter : Response for Create Network
    MultiCloud_Adapter -> NS_LCMGR : Response for Create Network
    NS_LCMGR -> Inventory_DB_Adapter : Create VL record
    Inventory_DB_Adapter -> AAI : Create VL record
    AAI --> AAI : Create VL record
    AAI -> Inventory_DB_Adapter : Response for Create VL record
    Inventory_DB_Adapter -> NS_LCMGR : Response for Create VL record
    NS_LCMGR -> RIM_Mgr : Request Homing Information\nfor Network Service
    RIM_Mgr -> OOF : Requests Homing Information\nfor Network Service
    OOF -> RIM_Mgr : Response with Homing Information\nfor Network Service
    RIM_Mgr --> RIM_Mgr : Persist Homing Information\nfor Network Service
loop Go through each VNF    
    NS_LCMGR -> SOL003_Adapter : Request for Instantiate VNF
    SOL003_Adapter -> VNFM : Request for Instantiate VNF
    VNFM -> SOL003_Adapter : Request Grant VNF resource
    SOL003_Adapter -> NS_LCMGR : Request Grant VNF resource
    NS_LCMGR -> RIM_Mgr : Request Homing Information 
    RIM_Mgr -> NS_LCMGR : Return with Homing Information\nfor the VNF
    NS_LCMGR --> NS_LCMGR : Make a Grant decision
    NS_LCMGR -> SOL003_Adapter : Return with a Grant decision
    SOL003_Adapter -> VNFM: Return with a Grant decision
    VNFM --> VNFM : Instantiate VNF
    VNFM -> SOL003_Adapter : Notify the changes\nof VNF/VDUs/CPs
    SOL003_Adapter -> NS_LCMGR : Notify the changes\nof VNF/VUD/CPs
end
    NS_LCMGR -> SOL005_NBI : Send\nnsLcmOperationOccurrenceNotification
    SOL005_NBI -> SOL005_Adapter : Send\nnsLcmOperationOccurrenceNotification
    SOL005_Adapter -> SO : Send\nnsLcmOperationOccurrenceNotification
end    


@enduml


CreateNS


InstantiateNS


Terminate/Delete NS Sequences

The following diagram depicts the Terminate / Delete NS.


@startuml
participant SO
participant SOL005_Adapter
participant SOL005_NBI
participant NS_LCMGR
participant RIM_Mgr
participant MultiCloud_Adapter
participant OOF
participant Catalog_DB_Adapter
participant ETSI_Catalog_Mgr
participant Inventory_DB_Adapter
participant AAI
participant SOL003_Adapter
participant VIM
participant VNFM

autonumber 

group Terminate NS
	SO -> SOL005_Adapter : Terminate NS
    SOL005_Adapter -> SOL005_NBI : Terminate NS
    SOL005_NBI -> NS_LCMGR : Terminate NS
    NS_LCMGR -> Inventory_DB_Adapter : Query all instances related to NS
    Inventory_DB_Adapter -> AAI : Query all instances related to NS
    AAI -> Inventory_DB_Adapter : Return all instances for NS
    Inventory_DB_Adapter -> NS_LCMGR : Return all instances for NS
    NS_LCMGR --> NS_LCMGR : Start Delete NS instances
    NS_LCMGR -> RIM_Mgr : Request Homing Information\nfor Network Service
    RIM_Mgr -> OOF : Requests Homing Information\nfor Network Service
    OOF -> RIM_Mgr : Response with Homing Information\nfor Network Service
    RIM_Mgr --> RIM_Mgr : Persist Homing Information\nfor Network Service
loop Go thru each VNF
    NS_LCMGR -> SOL003_Adapter : Delete VNF
    SOL003_Adapter -> VNFM : Delete VNF
    VNFM -> SOL003_Adapter : Request Grant resource for deletion
    SOL003_Adapter -> NS_LCMGR : Request Grant resource for deletion
    VNFM -> SOL003_Adapter : Request Grant VNF resource
    SOL003_Adapter -> NS_LCMGR : Request Grant VNF resource
    NS_LCMGR -> RIM_Mgr : Request Homing Information 
    RIM_Mgr -> OOF : Request Homing Information
    OOF -> RIM_Mgr : Return with Homing Information\nfor the VNF
    RIM_Mgr -> NS_LCMGR : Return with Homing Information\nfor the VNF
    NS_LCMGR --> NS_LCMGR : Make a Grant decision
    NS_LCMGR -> SOL003_Adapter : Return with a Grant decision
    SOL003_Adapter -> VNFM: Return with a Grant decision  
	VNFM --> VNFM : Delete Resources
    VNFM -> SOL003_Adapter : Notify changes of VNF/VDUs/CPs
    SOL003_Adapter -> NS_LCMGR : Notify changes of VNF/VDUs/CPs
    NS_LCMGR -> Inventory_DB_Adapter : Update records for Delete VNF/VDUs/CPs
    Inventory_DB_Adapter -> AAI : Update records for Delete VNF/VDUs/CPs
    AAI --> AAI : Update records for Delete VNF/VDUs/CPs
    AAI -> Inventory_DB_Adapter : Return with Delete VNF/VDUs/CPs
    Inventory_DB_Adapter -> NS_LCMGR : Return with Delete VNF/VDUs/CPs
end
    NS_LCMGR -> MultiCloud_Adapter : Request for Delete VLs (if needed)
    MultiCloud_Adapter -> VIM : Request for Delete VLs
    VIM --> VIM : Delete VLs
    NS_LCMGR -> Inventory_DB_Adapter : Update records for Delete VLs
    Inventory_DB_Adapter -> AAI : Update records for Delete VLs
    AAI --> AAI : Update records for Delete VLs
    AAI -> Inventory_DB_Adapter : Return with Delete VLs
    Inventory_DB_Adapter -> NS_LCMGR : Return with Delete VLs

    NS_LCMGR -> SOL005_NBI : Send\nnsLcmOperationOccurrenceNotification
    SOL005_NBI -> SOL005_Adapter : Send\nnsLcmOperationOccurrenceNotification
    SOL005_Adapter -> SO : Send\nnsLcmOperationOccurrenceNotification
end    



@enduml

Terminate and Delete NS



Gaps and Issues

CreateNsRequest

For the Create NS, the CreateNsRequest is sent to SO NFVO.

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?


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.


====================================================================================================================================================================================

Additional Info

ONAP SO NFVO Architecture & Functions

The following diagram depicts the NFVO component architecture




NFVO Microservice Plugin Framework - high priority

SOL005 NBI (API Handler)- high priority

NS Workflows & Business Logic - high priority


ETSI Package Onboarding for NFVO - enhancements of current capabilities



NS LCM Database  - high priority


SOL003 Adapter for SVNFMs - leveraging existing capabilities


Resource Infra Management (RIM) Manager - high priority

Notification Adapter (not for Guilin)


FM/PM Event Adapter (not for Guilin)

TBD


ONAP SO, SOL005 Adapter and NFVO Interaction


Descriptions
Existing SO E2E Business Logic for VFC/SOL005 Adapter
  • ONAP SO leverages the existing E2E service instance management logic
  • SO receives Create E2E Service Instance Request
  • SO runs E2E Service BPMNs
    • Decomposes E2E service requests for network resources
    • Checks resource subcategory is “Network Service”
    • Invokes Create Network Service Request through SOL005 Adapter
  • SOL005 Adapter fetches NFVO endpoint details from AAI ESR
    • Collects NFVO endpoint details from AAI ESR
    • Sends SOL005 Create NS request to NFVO
New ONAP SO NFVO Path
  • NFVO creates NS LCM
    • Returns NS ID
  • NFVO instantiates NS LCM


ONAP SO Refactoring for NFVO Function Extraction

Note: to analyze the following further (extracting NS-related operations)

ONAP SONFVO

Asdc-controller (scope: Service, NS, VNF, VF-Module)

Asdc-controller for NS, leveraging ETSI Catalog Manager

API Handler

SOL005 API Handler

BPMN Infra (scope: Service, NS, VNF, VF-Module) including Workflows with embedded Camunda Workflow engine

NS LCM +

Default NS Workflows (with business logic) + Custom NS Workflows (with business logic)

Stand-Alone/Clustered Camunda Workflow Engine

VFC / SOL005 Adapter

Not Applicable

SOL003 Adapter in SO

SOL003 Adapter in NFVO (move its home)

Catalog DB Adapter

Leverage ETSI Catalog Manager

Request DB Adapter (scope: service, NS, VNF, VF-Module)

Request DB Adapter for NS scope

APPC Orchestrator

Configuration Manager Client

ve-vnfm-adapter (SOL002 Adapter)

TBD

sdnc-adapter

TBD

nssmf-adapter

TBD

Openstack adapter / MultiCloud adapter

Resource Infra Management (RIM) Manager

VNF Adapter

Not Applicable (SOL003 Adapter delegates VNF operations to SVNFM)

K8S Client (PoC)

K8S Adapter

SO-monitoring

SO-monitoring for NS and VNF

Common (beans and utils common for all the projects)

Leverage Common as needed

Close Loop Handling

FM/PM Event Adapter





Communication Security






Create / Instantiate NS

The following diagram depicts the Create/Instantiate NS.


@startuml
participant SO
participant SOL005_Adapter
participant SOL005_NBI
participant NS_LCMGR
participant RIM_Mgr
participant MultiCloud_Adapter
participant OOF
participant Catalog_DB_Adapter
participant ETSI_Catalog_Mgr
participant Inventory_DB_Adapter
participant AAI
participant SOL003_Adapter
participant VIM
participant VNFM

autonumber 

group Create NS
	SO -> SOL005_Adapter : Create NS
    SOL005_Adapter -> SOL005_NBI : Create NS
    SOL005_NBI -> NS_LCMGR : Create NS
    NS_LCMGR -> Inventory_DB_Adapter : Create NS record
    Inventory_DB_Adapter -> AAI : Create NS record
    AAI --> AAI : Create NS record
    AAI -> Inventory_DB_Adapter : Response for Create NS record
    Inventory_DB_Adapter -> NS_LCMGR: Response for Create NS record
    NS_LCMGR -> SOL005_NBI : Response for Create NS record	
    SOL005_NBI -> SOL005_Adapter : Response with NS Instance Id
    SOL005_Adapter -> SO : Response with NsInstance\n(including NS Instance Id)
    NS_LCMGR -> SOL005_NBI : Send\nNsIdentifierCreationNotification
    SOL005_NBI -> SOL005_Adapter : Send\nNsIdentifierCreationNotification
    SOL005_Adapter -> SO : Send\nNsIdentifierCreationNotification
end
group Instantiate NS
    NS_LCMGR -> Catalog_DB_Adapter : Read NS descriptor
    Catalog_DB_Adapter -> ETSI_Catalog_Mgr : Read NS descriptor
    ETSI_Catalog_Mgr -> Catalog_DB_Adapter : Return NS descriptor
    Catalog_DB_Adapter -> NS_LCMGR : Return NS descriptor
    NS_LCMGR --> NS_LCMGR : Parse & Decompose NS descriptor
    NS_LCMGR --> NS_LCMGR : Instantiate NS
    NS_LCMGR --> NS_LCMGR : Instantiate VLs between VNFs
    NS_LCMGR -> MultiCloud_Adapter : Create Network
    MultiCloud_Adapter -> VIM : Create Network
    VIM -> MultiCloud_Adapter : Response for Create Network
    MultiCloud_Adapter -> NS_LCMGR : Response for Create Network
    NS_LCMGR -> Inventory_DB_Adapter : Create VL record
    Inventory_DB_Adapter -> AAI : Create VL record
    AAI --> AAI : Create VL record
    AAI -> Inventory_DB_Adapter : Response for Create VL record
    Inventory_DB_Adapter -> NS_LCMGR : Response for Create VL record
    NS_LCMGR -> RIM_Mgr : Request Homing Information\nfor Network Service
    RIM_Mgr -> OOF : Requests Homing Information\nfor Network Service
    OOF -> RIM_MGR : Response with Homing Information\nfor Network Service
    RIM_Mgr --> RIM_Mgr : Persist Homing Information\nfor Network Service
loop Go through each VNF    
    NS_LCMGR -> SOL003_Adapter : Request for Instantiate VNF
    SOL003_Adapter -> VNFM : Request for Instantiate VNF
    VNFM -> SOL003_Adapter : Request Grant VNF resource
    SOL003_Adapter -> NS_LCMGR : Request Grant VNF resource
    NS_LCMGR -> RIM_Mgr : Request Homing Information 
    RIM_Mgr -> NS_LCMGR : Return with Homing Information\nfor the VNF
    NS_LCMGR --> NS_LCMGR : Make a Grant decision
    NS_LCMGR -> SOL003_Adapter : Return with a Grant decision
    SOL003_Adapter -> VNFM: Return with a Grant decision
    VNFM --> VNFM : Instantiate VNF
    VNFM -> SOL003_Adapter : Notify the changes\nof VNF/VDUs/CPs
    SOL003_Adapter -> NS_LCMGR : Notify the changes\nof VNF/VUD/CPs
end
    NS_LCMGR -> SOL005_NBI : Send\nnsLcmOperationOccurrenceNotification
    SOL005_NBI -> SOL005_Adapter : Send\nnsLcmOperationOccurrenceNotification
    SOL005_Adapter -> SO : Send\nnsLcmOperationOccurrenceNotification
end    


@enduml


Create NS

Request

CreateNsRequest

Response

NsInstance

NS LCM Manager Design

VFC design 

Proposal

The following diagram depicts the Create NS procedure.


Instantiate NS

Request

InstantiateRequest

Response

201 Accepted

NsLcmOperationOccurrenceNotification (Start/Processing/Completed)


NS LCM Manager Design

VFC Design

Proposal

The following diagram depicts the Instantiate NS.


Terminate / Delete NS

The following diagram depicts the Terminate / Delete NS.


@startuml
participant SO
participant SOL005_Adapter
participant SOL005_NBI
participant NS_LCMGR
participant RIM_Mgr
participant MultiCloud_Adapter
participant OOF
participant Catalog_DB_Adapter
participant ETSI_Catalog_Mgr
participant Inventory_DB_Adapter
participant AAI
participant SOL003_Adapter
participant VIM
participant VNFM

autonumber 

group Terminate NS
	SO -> SOL005_Adapter : Terminate NS
    SOL005_Adapter -> SOL005_NBI : Terminate NS
    SOL005_NBI -> NS_LCMGR : Terminate NS
    NS_LCMGR -> Inventory_DB_Adapter : Query all instances related to NS
    Inventory_DB_Adapter -> AAI : Query all instances related to NS
    AAI -> Inventory_DB_Adapter : Return all instances for NS
    Inventory_DB_Adapter -> NS_LCMGR : Return all instances for NS
    NS_LCMGR --> NS_LCMGR : Start Delete NS instances
    NS_LCMGR -> RIM_Mgr : Request Homing Information\nfor Network Service
    RIM_Mgr -> OOF : Requests Homing Information\nfor Network Service
    OOF -> RIM_Mgr : Response with Homing Information\nfor Network Service
    RIM_Mgr --> RIM_Mgr : Persist Homing Information\nfor Network Service
loop Go thru each VNF
    NS_LCMGR -> SOL003_Adapter : Delete VNF
    SOL003_Adapter -> VNFM : Delete VNF
    VNFM -> SOL003_Adapter : Request Grant resource for deletion
    SOL003_Adapter -> NS_LCMGR : Request Grant resource for deletion
    VNFM -> SOL003_Adapter : Request Grant VNF resource
    SOL003_Adapter -> NS_LCMGR : Request Grant VNF resource
    NS_LCMGR -> RIM_Mgr : Request Homing Information 
    RIM_Mgr -> OOF : Request Homing Information
    OOF -> RIM_Mgr : Return with Homing Information\nfor the VNF
    RIM_Mgr -> NS_LCMGR : Return with Homing Information\nfor the VNF
    NS_LCMGR --> NS_LCMGR : Make a Grant decision
    NS_LCMGR -> SOL003_Adapter : Return with a Grant decision
    SOL003_Adapter -> VNFM: Return with a Grant decision  
	VNFM --> VNFM : Delete Resources
    VNFM -> SOL003_Adapter : Notify changes of VNF/VDUs/CPs
    SOL003_Adapter -> NS_LCMGR : Notify changes of VNF/VDUs/CPs
    NS_LCMGR -> Inventory_DB_Adapter : Update records for Delete VNF/VDUs/CPs
    Inventory_DB_Adapter -> AAI : Update records for Delete VNF/VDUs/CPs
    AAI --> AAI : Update records for Delete VNF/VDUs/CPs
    AAI -> Inventory_DB_Adapter : Return with Delete VNF/VDUs/CPs
    Inventory_DB_Adapter -> NS_LCMGR : Return with Delete VNF/VDUs/CPs
end
    NS_LCMGR -> MultiCloud_Adapter : Request for Delete VLs (if needed)
    MultiCloud_Adapter -> VIM : Request for Delete VLs
    VIM --> VIM : Delete VLs
    NS_LCMGR -> Inventory_DB_Adapter : Update records for Delete VLs
    Inventory_DB_Adapter -> AAI : Update records for Delete VLs
    AAI --> AAI : Update records for Delete VLs
    AAI -> Inventory_DB_Adapter : Return with Delete VLs
    Inventory_DB_Adapter -> NS_LCMGR : Return with Delete VLs

    NS_LCMGR -> SOL005_NBI : Send\nnsLcmOperationOccurrenceNotification
    SOL005_NBI -> SOL005_Adapter : Send\nnsLcmOperationOccurrenceNotification
    SOL005_Adapter -> SO : Send\nnsLcmOperationOccurrenceNotification
end    



@enduml


Terminate NS


Request

TerminateNsRequest

Response

201 Accepted

NsLcmOperationOccurrenceNotification (Start/Processing/Completed)


NS LCM Manager Design

VFC Design

Proposal

The following diagram depicts the Terminate NS.

Delete NS



Request


Response

Notification


NS LCM Manager Design

VFC_Design

Proposal

The following diagram depicts the Delete NS.


Subscription NS


@startuml
participant SO
participant SOL005_Adapter
participant SOL005_NBI
participant NS_LCMGR

autonumber 

group Create Subscription NS
	SO -> SOL005_Adapter : Create Subscription NS
    SOL005_Adapter -> SOL005_NBI : Create Subscription NS
    SOL005_NBI -> NS_LCMGR : Create Subscription NS
    NS_LCMGR --> NS_LCMGR : Check Subscription Filter
	NS_LCMGR -> NS_LCMGR : Test subscription\nnotification (callbackUrl) endpoint
    NS_LCMGR --> NS_LCMGR : Save Subscription to Database
    NS_LCMGR -> SOL005_NBI : Response with LccnSubscription
end

group Delete Subscription NS
	SO -> SOL005_Adapter : Delete Subscription NS
    SOL005_Adapter -> SOL005_NBI : Delete Subscription NS
    SOL005_NBI -> NS_LCMGR : Delete Subscription NS
    NS_LCMGR --> NS_LCMGR : Delete Subscription NS 
    NS_LCMGR -> SOL005_NBI : Response with 204 No Content
    SOL005_NBI -> SOL005_Adapter : Response for Delete Subscription NS
    SOL005_Adapter -> SO : Response for Delete Subscription NS 
	
end

@enduml

Subscription NS

Request

Response


Subscription Filter Request

The following table describes the Subscription filter request.

attribute namedata typecardinalitydescription

nsdIds

Identifier0..N

If present, match NS instances that were

created based on an NSD identified by one of

the nsdId values listed in this attribute.

See note 1.

vnfdIds

Identifier0..N

If present, match NS instances that contain

VNF instances that were created based on a

VNFD identified by one of the vnfdId values

listed in this attribute.

See note 1.

pnfdIdsIdentifier0..N

If present, match NS instances that contain

PNFs that are represented by a PNFD

identified by one of the pnfdId values listed in

this attribute.

See note 1.

nsInstanceIdIdentifier0..N

If present, match NS instances with an

instance identifier listed in this attribute.

See note 2.

nsInstanceNamesString0..N

If present, match NS instances with an NS

Instance Name listed in this attribute.

See note 2.

NOTE 1: The attributes "nsdIds", "vnfdIds" and "pnfdIds" are alternatives to reference to NS instances that are

created based on certain NSDs, or contain VNF instances that are based on certain VNFDs, or contain

PNFs that are based on certain PNFDs in a filter. They should not be used together in the same filter

instance, but one alternative should be chosen.

NOTE 2: The attributes "nsInstanceIds" and "nsInstanceNames" are alternatives to reference to particular NS

Instances in a filter. They should not be used both in the same filter instance, but one alternative should be

chosen.


NS LCM Manager Design

VFC Design


Proposal

The following diagram depicts the Subscription NS.