Versions Compared

Key

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

...

  • 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)

...

Gliffy Diagram
macroId65987ba7-eb48-48cb-bb3c-f5de64cc0ee0
nameSO NFVO Deployment View - Plan B
pagePin3

Guilin SO NFVO Testing

In case that The UUI - SO - E2E Workflows - NS Workflows - SOL005 Adapter sequences are not ready for Guilin. As a result, the CLI the Curl Command as the SO NFVO client allows to send SOL005-compliant requests to SO NFVO directly.

...

Gliffy Diagram
macroIdf0667805-3d8d-46b0-93c4-516861037812
nameSO NFVO Deployment View - Plan C
pagePin13

Microservice Component Registration

...

View file
nameONAP ETSI SO NFVO Architecture-2020-06-16-v3.pptx
height250

Implementation Plan For Guilin

  • Create NS NBI
  • Instantiate NS NBI
  • Terminate NS NBI
  • Delete NS NBI
  • Create NS Backend
  • Instantiate NS Backend

Requirements

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

...

  • Container Image Management (P2)
  • Resource Management, validation and authorization of NFVI resource requests (P2)
  • VNF-FGs (P2)
  • Container Image Management (P2)

  • Virtualized Resources Information Management (P2)
  • Virtualized Resources Capacity Management (P2)

  • Virtualized Resources Management (P2)
  • Virtualized Resources Change Management (P2)

  • Virtualized Resources Reservation Management (P2)
  • Virtualized Resource Quota Management (P2)

  • Virtualized Resource Performance Management (P2)
  • Virtualized Resource Fault Management (P2)

  • Network Forwarding Path (NFP) Management (P2)
  • Scale NS (POST “/api/nslcm/v1/ns_instances/{nsInstanceId}/scale”) – (P2)
  • Heal NS (“POST ”/api/nslcm/v1/ns_instances/{nsInstanceId}/heal”) – (P2)
  • VNF Modify (ModifyVnfInfo) (P2)
  • VNF Heal (P2)
  • VNF Query (P2)
  • SOL003 NBI enhancements for GNFC-ready (P2)
  • SOL003 Modify, Heal and Scale (P2)
  • K8S Adapter (P2)
  • FM/PM Event Adapter (P2)




Use Cases

  • As a start, simplified vCPE NS use cases plan to be used
    • For simplicity, vCPE NS use cases without nested NSDs will be used for initial component testing.
  • Network Slicing use cases will be defined for official testing
    • TBD

Master Requirement

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 

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2840


Epic and User Story

Epic

User Story

Sub-Task

Description

In Guilin?

JIRASize

Support for NFVO Microservice Plugin (P1)




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)
      • 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)

Yes

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2841



<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 



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”)
    • 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
  • Leverages SOL005 Swagger Files for SO NFVO SOL005 NBI API Handler
  • Make SO-NFVO (so-etsi-nfvo) Pod is deployable in OOM
  • Register the SO NFVO NS LCM pod to AAI automatically 
Yes

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2842



Create NS NBI
  • Preconditions: 
    • SOL007 NS packages are stored in ETSI Catalog Manager.
    • the Cli-based SO NFVO Client is ready to send the SOL005-compliant Create NS request
    • The SO-NFVO (so-etsi-nfvo) pod is ready
PlantUML Macro
typedot
@startuml

participant SO_NFVO_CLI
participant SOL005_NBI
participant NS_LCMGR

autonumber 

    SO_NFVO_CLI -> SOL005_NBI : Create NS (CreateNSRequest)
    SOL005_NBI -> NS_LCMGR : Create NS (CreateNSRequest)
    NS_LCMGR --> NS_LCMGR : Create NS (CreateNSRequest)
    NS_LCMGR -> SOL005_NBI : 201 Created (NSInstance)
    SOL005_NBI -> SO_NFVO_CLI : 201 Created (NSInstance)

Opt Notification will be handled by the separate user story
    NS_LCMGR -> SOL005_NBI : Send NsIdentifierCreationNotification
    SOL005_NBI -> SO_NFVO_CLI : Send NsIdentifierCreationNotification
end

@enduml
  • Support the SOL005-compliant Create NS API 
    • Supports Create NS request API: POST /api/nslcm/v1/ns_instances (CreateNsRequest)
    • Supports Create NS responses with NsInstance with 201 (for success) or an error
      • Returns a dummy 201 until the backend business logic is ready 
      • Only mandatory attributes of NsInstance will be set.
      • Support successful or error conditions
    • Sends NsIdentifierCreationNotification to the NFVO subscriber(s) (e.g., ONAP SO SOL005 Adapter)
      • Note: this will be handled by the separate user story: Sends NsIdentifierCreationNotification to the NFVO subscriber(s) (e.g., ONAP SO SOL005 Adapter)


  • Post conditions: the NS Instance is set as NOT_INSTANTIATED state

Note: secure communication is handled by a separate user story, SO-3165.

Yes

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2858



Instantiate NS NBI
  • Preconditions:
    • NS instance is NOT_INSTNANTIATED state
    • SOL007 NS packages are stored in ETSI Catalog Manager.
    • the Cli-based SO NFVO Client is ready to send the SOL005-compliant Instantiate NS request
    • The SO-NFVO (so-etsi-nfvo) pod is ready
PlantUML Macro
typedot
@startuml

participant SO_NFVO_CLI
participant SOL005_NBI
participant NS_LCMGR

autonumber 

    SO_NFVO_CLI -> SOL005_NBI : Instantiate NS (InstantiateNsRequest)
    SOL005_NBI -> NS_LCMGR : Instantiate NS (InstantiateNsRequest)
    NS_LCMGR --> NS_LCMGR : Instantiate NS Lifecycle Operation Occurrence resource
    NS_LCMGR -> SOL005_NBI : 202 Accepted()
    SOL005_NBI -> SO_NFVO_CLI : 202 Accepted

    NS_LCMGR -> SOL005_NBI : Send NsLcmOperationOccurrenceNotification(start)
    SOL005_NBI -> SO_NFVO_CLI :  Send NsLcmOperationOccurrenceNotification(start)
	NS_LCMGR --> NS_LCMGR : Performs Instantiate NS operations
    NS_LCMGR -> SOL005_NBI : Send NsLcmOperationOccurrenceNotification(result)
    SOL005_NBI -> SO_NFVO_CLI :  Send NsLcmOperationOccurrenceNotification(result)
opt GET individual NS LCM operation occurrence
	SO_NFVO_CLI -> SOL005_NBI : GET .../ns_lcm_op_occs/{nsLcmOpOccId}
	SOL005_NBI -> NS_LCMGR : GET .../ns_lcm_op_occs/{nsLcmOpOccId}
	NS_LCMGR -> SOL005_NBI : 200 OK (NsLcmOpOcc:operationStatus=PROCESSING or COMPLETED)
	SOL005_NBI -> SO_NFVO_CLI
end

@enduml
  • Supports the SOL005-compliant Instantiate NS API 
    • Supports Instantiate NS request API: POST /api/nslcm/v1/ns_instances/{nsInstanceId}/instantiate (InstantiateNsRequest)
    • Supports responses 202 Accepted with an empty payload body
      • Returns a dummy 202 until the backend business logic is ready 
    • Supports NS Lifecycle Operation Occurrence Notification
      • 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.

Yes

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2859



Terminate NS NBI
  • Precondition: NS instance is INSTANTIATED state
  • 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
PlantUML Macro
typedot
@startuml

participant SO_NFVO_CLI
participant SOL005_NBI
participant NS_LCMGR

autonumber 

    SO_NFVO_CLI -> SOL005_NBI : Terminate NS (InstantiateNsRequest)
    SOL005_NBI -> NS_LCMGR : Terminate NS (InstantiateNsRequest)
    NS_LCMGR --> NS_LCMGR : Terminate NS Lifecycle Operation Occurrence resource
    NS_LCMGR -> SOL005_NBI : 202 Accepted()
    SOL005_NBI -> SO_NFVO_CLI : 202 Accepted

    NS_LCMGR -> SOL005_NBI : Send NsLcmOperationOccurrenceNotification(start)
    SOL005_NBI -> SO_NFVO_CLI :  Send NsLcmOperationOccurrenceNotification(start)
	NS_LCMGR --> NS_LCMGR : Performs Instantiate NS operations
    NS_LCMGR -> SOL005_NBI : Send NsLcmOperationOccurrenceNotification(result)
    SOL005_NBI -> SO_NFVO_CLI :  Send NsLcmOperationOccurrenceNotification(result)
opt GET individual NS LCM operation occurrence
	SO_NFVO_CLI -> SOL005_NBI : GET .../ns_lcm_op_occs/{nsLcmOpOccId}
	SOL005_NBI -> NS_LCMGR : GET .../ns_lcm_op_occs/{nsLcmOpOccId}
	NS_LCMGR -> SOL005_NBI : 200 OK (NsLcmOpOcc:operationStatus=PROCESSING or COMPLETED)
	SOL005_NBI -> SO_NFVO_CLI
end

@enduml
  • 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.

Yes

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2860



Delete NS NBI
  • Precondition: NS instance in NOT_INSTANTIATED state
  • SOL007 NS packages are stored in ETSI Catalog Manager.
  • the Cli-based SO NFVO Client is ready to send the SOL005-compliant Create NS request
  • The SO-NFVO (so-etsi-nfvo) pod is ready
PlantUML Macro
typedot
@startuml

participant SO_NFVO_CLI
participant SOL005_NBI
participant NS_LCMGR

autonumber 

    SO_NFVO_CLI -> SOL005_NBI : Delete NS (DeleteNSRequest)
    SOL005_NBI -> NS_LCMGR : Delete NS (DeleteNSRequest)
    NS_LCMGR --> NS_LCMGR : Delete NS (DeleteNSRequest)
    NS_LCMGR -> SOL005_NBI : 204 No Content
    SOL005_NBI -> SO_NFVO_CLI : 204 No Content

Opt Notification will be handled by the separate user story
    NS_LCMGR -> SOL005_NBI : Send NsIdentifierDeletionNotification
    SOL005_NBI -> SO_NFVO_CLI : Send NsIdentifierDeletionNotification
end

@enduml
  • Supports the SOL005-compliant Delete NS API
    • Supports Delete NS request API: DELETE /api/nslcm/v1/ns_instances/{nsInstanceId}
    • Supports the Sends 204 No Content with an empty payload body
      • Returns a dummy 204 until the business logic is ready
    • Sends NsIdentifierDeletionNotification to the NFVO subscriber(s) (e.g., ONAP SO SOL005 Adapter)
      • Note: this will be handled by the separate user story: Sends NsIdentifierCreationNotification to the NFVO subscriber(s) (e.g., ONAP SO SOL005 Adapter)
  • Error handling: if the individual NS instance is not in NOT_INSTANTIATED state, it rejects the deletion request


  • Postconditions: the resource representing the NS instance has been removed from the list of NS instance resources

Note: secure communication is handled by a separate user story, SO-3165.

Yes

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2861



Support for secured communication of SOL005 NBI API Handler
Support for secured communication of SOL005 NBI API HandlerYes

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-3165



Get NS Operation Status NBI
  • Supports the SOL005-compliant GET NS LCM operation occurrences API 
    • Supports multiple NS LCM operation occurrences request API: GET / api/nslcm/v1/ns_lcm_op_occs
    • Supports responses for multiple NS LCM operation occurrences with 200 OK (NsLcmOpOcc[])
    • Supports individual NS LCM operation occurrence reqeust API: GET /api/nslcm/v1/ns_lcm_op_occs/{nsLcmOpOccId}
      • nsLcmOpOccId is an attribute in the NsLcmOperationOccurrenceNotification
    • Supports responses for the individual NS LCM operation occurrence with 200 OK (NsLcmOpOcc), where its opeationStatus=PROCESSING, COMPLETED)

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

Note: secure communication is handled by a separate user story, SO-3165.

NoYes

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2862



Support for SOL005 NBI Subscription APIs

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

  • Supports the Subscription (POST ”/subscriptions”) API
  • Supports sending the Notification to SOL005 Adapter by using the SO SOL005 Adapter client-provided interface);
    • POST notification based on the callbackUrl from the subscription) 
Yes
  • Note: secure communication is handled by a separate user story, SO-3165.
No

Jira
Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-3141




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

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2864




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

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2863




Delete NS Subscription NBI
  • Supports Delete subscription request API: DELETE /api/nslcm/v1/subscriptions/{subscriptionId}
  • Supports Delete subscription responses with 204 No Content
YesNo

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2865




Send NS Notifications (As a Client)
  • As a client, supports the 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)
  • Supports the Gets response: 204 No Content from the subscriber (e.g, SO SOL005 Adapter)
No

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2866



Support for secured communication of SOL005 NBI API Handler

Support for secured communication of SOL005 NBI API Handler

  • HTTPS support with certificate
Yes

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-28663165


Support for NS LCM and Workflows Management

Supports NS LCM and Workflows in SO NFVO(P1)

  • Builds the NS LCM Manager component in SO NFVO to manage the following NS orchestration operations by leveraging NS workflows and business logic.
    • CreateNS
    • InstantiateNS
    • TerminateNS
    • DeleteNS 
  • Builds default the following NS workflows and business logic with embedded Camunda Process instance(s) in SO NFVO
    • CreateNS bpmn files with business logic
    • InstantiateNS bpmn files with business logic
    • TerminateNS bpmn files with business logic
    • DeleteNS bpmn files with business logic 
  • Note: when ONAP Dynamic BPMN is available, follow the "Package and deploy NS LCM Workflows with business logic" use case.
Yes

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2843



Create NS LCM and Workflows


Supports the Create NS backend operations and workflows which do the following sequence:

<Create NS: note: the following workflow is a template, and it can be enhanced as needed.>

  • Supports SOL005-compliant CreateNSRequest request and parameters
    • For AAI, supports global_customer_id and service_type as part of HTTP header
      • This is not SOL005 standards, but for AAI, these parameters would be necessary.
      • Note: if there is an alternative way, please propose.
  • Supports getting NS Package from ETSI Catalog Manager
    • Query ETSI Catalog Manager for an NS package with the given csar_id id (nsdId)
  • Supports NSD Validation check:
    • check if the NSD package exists in the ETSI Catalog Manager DB; otherwise generates errors
  • Supports check of an existing NS Instance
    • If an existing NS instance is found, it is an error condition. Returns a proper error.
    • else 
      • Creates NS Instance in the NS Instance DB:
        • stores the NS instance data into the NS Instance DB with the status= 'NOT_INSTANTIATED'
      • Creates a unique ns instance id (uuid)
      • Stores NS instance attribute data into the NS Instance DB.
        • e.g., ns_instance_id, ns_name, ns_package_id, nsd_id, nsd_invariant_id, description, lastuptime, global_customer_id, service_type
        • Adds additional attributes as needed
  • Prerequisite: before calling the Create NS workflows, the Service and Service-subscription objects should be in AAI.
  • Create an NS instance in AAI:
    • Stores an NS instance to the AAI Service Instance with required attributes as follows.
      • Note: shares the AAI Service Instance with the NetworkService type and role.
      • service-instance-id = ns_inst_id
      • service-instance-name = ns-name
      • service-type = SERVICE_TYPE (NetworkService)
      • service-role = SERVICE_ROLE (NetworkService)
  • For the response, gets the nsInstance data from GetNSInfoService
    • Collects only the NS related mandatory information, not VnfInstance, VlInstance, or else
    • Note: CreateVNF and InstantiateVNF happen during the InstantiateNS, not part of Create NS
  • Supports return of 201 Created with the NsInstance (with NS related mandatory information)
  • Register SO NFVO in MSB (SO-3225)
Yes

Jira
serverONAP JIRA
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keySO-2867



Instantiate NS


Supports the Instantiate NS backend operations and workflows which do the following sequence:

<Instantiate NS: note: the following workflow is a template, and it can be enhanced as needed.>


  • Supports SOL005-compliant InstantiateNSRequest request and parameters
    • Creates BPMN workflows and business logic for the following Instantiate NS operations
      • Create a Job Id
        • Updates NS_Instance Status to INSTANTIATING to the NFVO NS Instance database table
        • Handles input parameters from the InstantiateNsRequest
          • additionalParamsForNs
            • additionalParamsForVnf
                • the VnfProfileId is the vnf descriptor id from the tosca.nodes.nfv.VNF vnf_profile (tosca.datatypes.nfv.VnfProifle) properties in NSD
                  • note: the VnfProfile data type properties are: instantiation_Level, min_number_of_instances, max_number_of_instances
                  • note: this property is only used in an NSD service template when describing a VNF node template with the corresponding VnfProfile information.
                • pass vim_id with tenant id
              • additionalParamsForVnf
                • If it is provided in the request, use additionalParamsForVnf attributes when invoking SOL003 Adapter.
                • Otherwise, formulate additionalParams for SOL003 Adapter invocation from the NSD plus additional user input
                • use of VNF input for additionalParamsForVnf is under investigation
              • pseudo logic:
                • 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
              pseudo logic:
              • 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
            • 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
          • gets vnfd_id, vnfm_type, vimId, s_vimId (with "cloud_owner"_"cloud_regionid")
          • SOL003 Adapter selects VNFM by leveraging AAI ESR
          • Follow the SOL003 Adapter process sequences
          • , 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,
          • provides
            • 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)
            • 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
              • 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.



    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2868



    Terminate NS


    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
        Cancels VL list
        • For the Terminate VNF internal request, the SOL003 Adapter will invoke both Terminate and Delete VNF operations
      • Cancels VL list (through MultiCloud Adapter)
        • get VL Inst array
        • for each VL inst
          • DELETE /api/nslcm/v1/ns/vls/{instId}
        • Cancels PNF list (TBD)
          • get pnf inst array
          • for each pnf inst 
            • DELETE /api/nslcm/v1/pnfs/{instId}
          • 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.



    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2869



    Delete NS



    Supports the Delete NS backend operations and workflows which do the following sequence:

    <Delete NS: note: the following workflow is a template, and it can be enhanced as needed.>

    • Supports SOL005-compliant DeleteNS operation with nsInstanceId
    • Creates BPMN workflows and business logic for the following Delete NS operations
      • Supports input parameter handling
        • Initialize Parameters: get ns_inst_id
      • Deletes ns instance in AAI
        • Gets ns_instances from NFVO_NSINST database table
        • if there are ns_instances, 
          • Queries AAI for global_customer_id, service_type, ns_inst_id
          • Invokes delete_ns_aai with global_customer_id, service_type, ns_inst_id, resource_version
            • Formulates the resource url with parameters
            • Invoke AAI Rest API: call_aaI (resource, "DELETE")
        • note: if there are discrepancies between VNF and NS status in AAI (e.g., VNF was not deleted yet), it is an error condition
      • Deletes ns_inst_id row from the NFVO_NSINST database table
        • note: if multiple records for the givin ns_inst_id are found, it is an error condition
      • Deletes ns_inst_id row from the t_lcm_inputparam_mapping database table
      • Deletes ns_inst_id row from the t_lcm_defPackage_mapping database table
      • Deletes ns_inst_id row from the t_lcm_servicebaseinfo database table
      • Returns 204 No Content
      • Send NsIdentifierDeletionNotification
        • Note: this notification will be handled by a separate notification and subscription user story.


    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2870



    Get NS Operation Status

    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.
    NoYes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2871



    Create NS Subscription

    Supports the Create NS Subscription operation and workflows which do the following sequence:

    <Create NS Subscription: note: the following workflow is a template, and it can be enhanced as needed.>


    • Supports SOL005-compliant Create NS Subscription operation
    • Supports input parameters handling:
      • Initializes 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
      • Creates Subscription ID: create subscription id
      • Checks valid auth info:
      • Checks Filter Type:
        • checks if the notification is NOTIFICATION_TYPE.NSLCM_OPERATION_OCCURRENCE_NOTIFICATION
      • Checks Valid:
        • Checks Callback_URI: check callback Uri
          • checks if the callbackUri exists in the NFVO_SUBSCRIPTION DB
            • if no subscription, return true
            • else 
              • checks additional filter types, notificationTypes, operationTypes, operationStates
                • if the filters are NOT equal, return false
              • checks ns instance filter, If the filter type is not equal, return false
            • return true
      • saves subscription request to database
      • returns response with subscription
    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2872



    Get NS Subscription

    Supports the Get NS Subscription operation and workflows which do the following sequence:

    <Get NS Subscription: note: the following workflow is a template, and it can be enhanced as needed.>

    • Supports SOL005-compliant Get NS Subscription operation
    • Supports input parameters handling:
      • Initializes Parameter: set subscription_id, params
    • if there is no param, 
      • Queries NFVO_SUBSCRIPTION DB for all
      • Returns LccSubscription[]
    • else if there is param, subscriptionId,
      • Queries NFVO_SUBSCRIPTION DB for the subscriptionId
      • Returns LccSubscription


    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2874



    Delete NS Subscription

    Supports the Delete NS Subscription operation and workflows which do the following sequence:

    <Delete NS Subscription: note: the following workflow is a template, and it can be enhanced as needed.>

    • Supports SOL005-compliant Delete NS Subscription operation
    • Supports input parameters handling:
      • Initialize Parameters: set subscriptonId
    • Deletes NFVO_SUBSCRIPTION DB for the subscriptionId
    • if success, return 204 No Content
    • else, return error
    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2875



    Send NS Notifications

    Supports the Send NS Notification operation and workflows which do the following sequence:

    <Send NS Notification: note: the following workflow is a template, and it can be enhanced as needed.>

    • Supports SOL005-compliant Send NS Notification operation
    • Supports input parameters handling:
      • Initialize Parameter:
        • query NFVO_SUBSCRIPTION DB for the given key
        • get the callback URI from the return subscription 
    • Formulates 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)


    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2876



    Support for Create VLs 

    Supports the Create VLs operation and workflows which do the following sequence:

    • Note: Create VLs operations are called as part of the Instantiate NS.
    • Supports SOL005-compliant Create VLs operation
      • Supports input parameters handling:
        • Initializes Parameters: set VL data
      • Creates VL to VIM through the MultiCloud Adapter
        • ownerid in the NFVO_VLINST database = ns_inst_id
      • Saves VL to NFVO_VLINST database
      • Creates Network in AAI
      • Supports a simple MultiCloud simulator

    No

    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2886



    Support for Delete VLs

    Supports the Delete VLs operation and workflows which do the following sequence:

    • Note: Delete VLs operations are called as part of the Delete NS.
    • Supports SOL005-compliant Delete VLs operation
      • Gets VL info from the NFVO_VLINST DB for the vl_inst_id
      • Gets ns_inst_id from the VL info ownerid (= ns_inst_id)
      • 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_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
      • Support a simple MultiCloud simulator
    NoYes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2887



    Support for Get VLs

    Supports the Get VLs operation and workflows which do the following sequence:

    • Note: Get VLs operations are called as part of the Instantiate and Delete NS.


    • Supports SOL005-compliant Get VLs operation
      • Queries VL info for the given vl_inst_id
      • Queries NFVO_VLINST DB for the vl_inst_id
      • Returns a record for the vl_inst_id


    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2888



    Support for granting VNF (non OOF-based one)

    Supports the granting VNF (non OOF-based one) operation and workflows which do the following sequence:

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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3142



    Support for NS Catalog DB Adapter 
    • Provides access for ETSI Catalog Manager
    • Get notifications from ETSI Catalog Manager
    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2845




    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):
      • note: for SO NFVO, only NS and VNF package management API will be used, not PNF


    View file
    nameetsicatalog.swagger.json
    height250


    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2877



    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):

    View file
    nameetsicatalog.swagger.notification.json
    height250


    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2878



    Support for NS Inventory (AAI) Adapter 
    • 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
    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2846




    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")
    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2880




    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")
    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2881




    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")
    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2882




    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")
    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2883




    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) for CRUD
    • Creates the following 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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2889



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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2847




    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)
    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2884




    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
    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2885






























    Package and dynamically deploy NS LCM Workflows with business logic




    When ONAP SO support Dynamic BPMN, package and deploy NS LCM workflows with business logic as a WAR file.

    • Packages and deploys NS LCM workflows with business logic for NS LCM as a WAR file
      • contains default NS LCM workflows and business logic
      • deploys the WAR file before or while ONAP SO is running
    • This feature tests ONAP SO custom NS workflows deployment (Hot deployment) for NS 
      • 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/Rest interfaces for the custom workflow war deployment would be supported 
    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2891



    Package and deploy default NS LCM workflows with business logic
    • Provides the default NS LCM workflows with business logic for NS LCM
    • Package the default NS LCM workflows with business logic as a deployable WAR file
      • Removes the embedded Camunda process.
    • Deploy the NS workflow WAR file by leveraging the REST API that is provided by the NS LCM Manager 
    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2892



    Support for UI and REST interfaces for custom workflow war deployment 
    • Supports for UI and REST interfaces for custom workflow war deployment
      • In Guilin, only REST interfaces for the NS Workflows war deployment
      • NS LMC Manager provides the REST interface for the deployment
    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2893









    Support for NS Resource Infra Management  (RIM) Manager (P1 partial)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)
      • 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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2844



    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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2894



    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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2895


    Enhance NFVO invocation sequences from UUI to SOL005 Adapter to make ONAP SO SOL005 compliant



    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

    YesNo

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2857









    <task>






    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: 
      Jira
      serverONAP JIRA
      serverId425b2b0a-557c-3c0c-b515-579789cceedb
      keyMODELING-335
      Jira
      serverONAP JIRA
      serverId425b2b0a-557c-3c0c-b515-579789cceedb
      keyMODELING-336
    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3220



    Register ETSI NFVO in MSB
    Register ETSI NFVO in MSBYes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3225



    Create NFVO Database OOM Files
    Create NFVO Database OOM FilesYes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3159



    Test SO NFVO on Java 11 with Camunda BPMN embedded engine
    Test SO NFVO on Java 11 with Camunda BPMN embedded engineYes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3241



    Add certificates to SO NFVO for secure communications (HTTPS) to SOL003 Adapter
    Add certificates to SO NFVO for secure communications (HTTPS) to SOL003 AdapterYes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3269


    <for Future Release>






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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2848



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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2849



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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2850



    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























    ONAP SO NFVO Invocation Sequence

    The following SOL005-based Operation sequence flow depicts the SO NFVO invocation architecture.

    Image Added



    Create/Instantiate NS Sequences

    The following diagram depicts the Create/Instantiate NS.


    PlantUML Macro
    typedot
    @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

    • 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.


    PlantUML Macro
    typedot
    @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

    • 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.

    Image Added


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

    Additional Info

    ONAP SO NFVO Architecture & Functions

    The following diagram depicts the NFVO component architecture


    Gliffy Diagram
    macroId6eb369b2-795b-470e-91dd-44f9424a19f2
    nameONAP NFVO component architecture
    pagePin25



    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”)
        • Terminate NS (“/api/nslcm/v1/ns_instances/{nsInstanceId}/terminate”)
        • Delete NS (DELETE “/api/nslcm/v1/ns_instances/{nsInstanceId}”)
        • Scale NS (POST “/api/nslcm/v1/ns_instances/{nsInstanceId}/scale”) – stretch goal
        • Heal NS (“POST ”/api/nslcm/v1/ns_instances/{nsInstanceId}/heal”) – stretch goal
        • Query NS (GET “/api/nslcm/v1/ns_instances”, “/api/nslcm/v1/ns_instances/{nsInstanceId}”)
        • Subscription (POST ”/subscriptions”)
        • Notification (SO SOL005 Adapter client-provided; POST notification based on the callbackUrl from the subscription) 
      • Support NS Fault Management API (stretch goal)
      • Support NS Performance Management APIs (stretch goal)

      • Leverages SOL005 Swagger Files

    NS Workflows & Business Logic - high priority

    • Provides Workflow engines (stand-alone/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

    • Provides NS workflows
      • 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)
        • 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 

    Image Added


    ETSI Package Onboarding for NFVO - enhancements of current capabilities

    • ONAP NFVO leverages the ETSI Catalog Manager as the run-time Catalog Database service provider.
      • ETSI NS/VNF/PNF Packages are onboarded and distributed from SDC à ETSI Catalog Manager (note: this is NOT part of NFVO; it is a separate effort)
      • ONAP NFVO queries ETSI NS/VNF/PNF Packages from the ETSI Catalog Manager


    Image Added


    NS LCM Database  - high priority

    • Use the VFC NS LCM database


    SOL003 Adapter for SVNFMs - leveraging existing capabilities

    • Provides SOL003-compliant (Or-Vnfm) Southbound APIs towards SVNFMs
      • Supports VNF Lifecycle Management (LCM)
        • Create VNF
        • Instantiate VNF
        • Terminate VNF
        • Delete VNF
        • Scale VNF
        • Heal VNF
        • Query VNF
        • ModifyInfo VNF
        • Subscription
        • Notification
        • Granting with HPA
      • It is a Microservice and part of ONAP SO NFVO
      • It is launched by NS Workflows for VNF LCM
      • It locates the VNFM instance by leveraging AAI ESR


    Resource Infra Management (RIM) Manager - high priority

    • Provides Resource Granting Information through OOF (Policy, MultiCloud, A&AI)
      • Supports interfaces with OOF to collect Granting information
      • Collects Homing information from OOF and provides the 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)
      • Software Image Management (P1)
      • Container Image Management (P2)

      • Virtualized Resources Information Management (P2)
      • Virtualized Resources Capacity Management (P2)

      • Virtualized Resources Management (P2)
      • Virtualized Resources Change Management (P2)

      • Virtualized Resources Reservation Management (P2)
      • Virtualized Resource Quota Management (P2)

      • Virtualized Resource Performance Management (P2)
      • Virtualized Resource Fault Management (P2)

      • Network Forwarding Path (NFP) Management (P2)

    Notification Adapter (not for Guilin)

    • Supports general-purpose notification services to its clients such as ONAP SO or SOL005 compliant clients
    • TBD


    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

    • 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.
    • TBD






    Create / Instantiate NS

    The following diagram depicts the Create/Instantiate NS.


    PlantUML Macro
    typedot
    @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

    Image Added

    Request

    CreateNsRequest

    • nsdId
    • nsName
    • nsDescription

    Response

    NsInstance

    • see NsInstance from ETSI GS NFV-SOL 005 v2.7.1

    NS LCM Manager Design

    VFC design 

    • get nsdId, nsName and nsDescription, context (globalCustomerId, serivceType) parameters

    • get a ns package by the given nsdId from ETSI Catalog Manager
    • check if ns instance exists from the NFVO_NSINST database table
      • if it exists, log it exists
    • create an ns instance id (uuid) and store it with other nsd info, status (NOT_INSTANTIATED) to NFVO_NSINST database table
    • create an ns instance record (service-instance-id, service-instance-name, service-type, service-role) in AAI
    • get nsInstance from GetNSInfoService
    • return 201 Created with the NsInstance
    • Send NsIdentifierCreationNotification

    Proposal

    The following diagram depicts the Create NS procedure.

    Image Added


    Instantiate NS

    Image Added

    Request

    InstantiateRequest

    Response

    201 Accepted

    NsLcmOperationOccurrenceNotification (Start/Processing/Completed)


    NS LCM Manager Design

    VFC Design

    • Get an ns instance id from the parameter
    • create a job for the ns instance id
    • create an occ id for the ns instance id
    • Update the ns instance id row of the NFVO_NSINST database table for status (= INSTANTIATING)
    • get a ns instance data from the NFVO_NSINST for the ns instance id
    • get and store additional Parameters for NS
    • get an VIM id from the cloud owner and cloud region parameters
    • get an VNF VIM from he location constraints
    • set the job status with 'Start Query NSD'
    • get and parse a nsd for the ns package id
    • modify nsd state
    • 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 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 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)
    • 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)


        • createVL
        • createVNF
        • createSFC (Service Function Chain)

    Proposal

    The following diagram depicts the Instantiate NS.


    Image Added

    Terminate / Delete NS

    The following diagram depicts the Terminate / Delete NS.


    PlantUML Macro
    typedot
    @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

    Image Added


    Request

    TerminateNsRequest

    • terminateTime

    Response

    201 Accepted

    NsLcmOperationOccurrenceNotification (Start/Processing/Completed)


    NS LCM Manager Design

    VFC Design

    • Get an ns_inst_d, job_id and request_data from the parameters
    • if there no matching ns_inst_id from the NFVO_NSINT database table, consider there is nothing to terminate, and return
    • 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
      • 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
      • get VL Inst array
      • for each VL inst
        • DELETE /api/nslcm/v1/ns/vls/{instId}
    • cancel PNF list
      • 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

    Proposal

    The following diagram depicts the Terminate NS.

    Image Added

    Delete NS


    Image Added


    Request

    • No; just parameter nsInstanceId


    Response

    • 204 No Content

    Notification

    • Send NsIdentifierDeletionNotification


    NS LCM Manager Design

    VFC_Design

    • get ns_inst_id
    • delete ns instance in AAI
      • get ns_instances from NFVO_NSINST database table
      • 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 NFVO_INPutParamMapping database table
    • delete ns_inst_id row from the DefPkgMapping database table
    • delete ns_inst_id row from the ServiceBaseInfo database table
    • return 204 No Content
    • Send NsIdentifierDeletionNotification

    Proposal

    The following diagram depicts the Delete NS.

    Image Added


    Subscription NS


    PlantUML Macro
    typedot
    @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

    Image Added

    Request

    • LccnSubscriptionRequest
    • subscriptionId. for GET and DELETE

    Response

    • 204 No Content
    • 201 Created (LccnSubscription)
    • 200 OK (LccnSubscription[])
    • 200 OK (LccnSubscription)


    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

    • create subscription id
    • check callback Uri
    • check filter types
    • save subscription request to database
    • return response with subscription


    Proposal

    The following diagram depicts the Subscription NS.

    Image Added




    Table of Contents


    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

    • 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.

    Gliffy Diagram
    nameONAP SO ETSI Hierarchical Orchestration
    pagePin25

    ONAP SO NFVO Function Overlap View in ETSI MANO

    • The following diagram depicts the SO NFVO position in ETSI MANO.

    Image Added

    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.

    Image Added

    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.


    Gliffy Diagram
    macroId6eb369b2-795b-470e-91dd-44f9424a19f2
    nameONAP NFVO component architecture
    pagePin25


    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.


    Gliffy Diagram
    macroIdb4e23c8d-cd3d-43fc-a755-ff49ca949023
    nameONAP NFVO component architecture - Guilin
    pagePin6

    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)


    Gliffy Diagram
    macroId65987ba7-eb48-48cb-bb3c-f5de64cc0ee0
    nameSO NFVO Deployment View - Plan B
    pagePin3

    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.


    Gliffy Diagram
    macroIdf0667805-3d8d-46b0-93c4-516861037812
    nameSO NFVO Deployment View - Plan C
    pagePin3

    Microservice Component Registration

    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.

    Gliffy Diagram
    macroId8a4b5048-c8b6-4d47-874e-7cfaabed8d83
    nameONAP NFVO component interfaces
    pagePin24


    Architecture Presentation Slide Deck and Approval

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

    View file
    nameONAP ETSI SO NFVO Architecture-2020-06-16-v3.pptx
    height250

    Implementation Plan For Guilin

    • Create NS NBI
    • Instantiate NS NBI
    • Terminate NS NBI
    • Delete NS NBI
    • Create NS Backend
    • Instantiate NS Backend

    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 (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 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





    ONAP SO and SOL005 Adapter Requirements 


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

    • Container Image Management (P2)
    • Resource Management, validation and authorization of NFVI resource requests (P2)
    • VNF-FGs (P2)
    • Container Image Management (P2)

    • Virtualized Resources Information Management (P2)
    • Virtualized Resources Capacity Management (P2)

    • Virtualized Resources Management (P2)
    • Virtualized Resources Change Management (P2)

    • Virtualized Resources Reservation Management (P2)
    • Virtualized Resource Quota Management (P2)

    • Virtualized Resource Performance Management (P2)
    • Virtualized Resource Fault Management (P2)

    • Network Forwarding Path (NFP) Management (P2)
    • Scale NS (POST “/api/nslcm/v1/ns_instances/{nsInstanceId}/scale”) – (P2)
    • Heal NS (“POST ”/api/nslcm/v1/ns_instances/{nsInstanceId}/heal”) – (P2)
    • VNF Modify (ModifyVnfInfo) (P2)
    • VNF Heal (P2)
    • VNF Query (P2)
    • SOL003 NBI enhancements for GNFC-ready (P2)
    • SOL003 Modify, Heal and Scale (P2)
    • K8S Adapter (P2)
    • FM/PM Event Adapter (P2)




    Use Cases

    • As a start, simplified vCPE NS use cases plan to be used
      • For simplicity, vCPE NS use cases without nested NSDs will be used for initial component testing.
    • Network Slicing use cases will be defined for official testing
      • TBD

    Master Requirement

    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 

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2840


    Epic and User Story

    Epic

    User Story

    Sub-Task

    Description

    In Guilin?

    JIRASize

    Support for NFVO Microservice Plugin (P1)




    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)
        • 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)

    Image Added

    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2841



    <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 



    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.

    Image Added

    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
    • Leverages SOL005 Swagger Files for SO NFVO SOL005 NBI API Handler
    • Make SO-NFVO (so-etsi-nfvo) Pod is deployable in OOM
    • Register the SO NFVO NS LCM pod to AAI automatically 
    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2842



    Create NS NBI
    • Preconditions: 
      • SOL007 NS packages are stored in ETSI Catalog Manager.
      • the Cli-based SO NFVO Client is ready to send the SOL005-compliant Create NS request
      • The SO-NFVO (so-etsi-nfvo) pod is ready
    PlantUML Macro
    typedot
    @startuml
    
    participant SO_NFVO_CLI
    participant SOL005_NBI
    participant NS_LCMGR
    
    autonumber 
    
        SO_NFVO_CLI -> SOL005_NBI : Create NS (CreateNSRequest)
        SOL005_NBI -> NS_LCMGR : Create NS (CreateNSRequest)
        NS_LCMGR --> NS_LCMGR : Create NS (CreateNSRequest)
        NS_LCMGR -> SOL005_NBI : 201 Created (NSInstance)
        SOL005_NBI -> SO_NFVO_CLI : 201 Created (NSInstance)
    
    Opt Notification will be handled by the separate user story
        NS_LCMGR -> SOL005_NBI : Send NsIdentifierCreationNotification
        SOL005_NBI -> SO_NFVO_CLI : Send NsIdentifierCreationNotification
    end
    
    @enduml
    • Support the SOL005-compliant Create NS API 
      • Supports Create NS request API: POST /api/nslcm/v1/ns_instances (CreateNsRequest)
      • Supports Create NS responses with NsInstance with 201 (for success) or an error
        • Returns a dummy 201 until the backend business logic is ready 
        • Only mandatory attributes of NsInstance will be set.
        • Support successful or error conditions
      • Sends NsIdentifierCreationNotification to the NFVO subscriber(s) (e.g., ONAP SO SOL005 Adapter)
        • Note: this will be handled by the separate user story: Sends NsIdentifierCreationNotification to the NFVO subscriber(s) (e.g., ONAP SO SOL005 Adapter)


    • Post conditions: the NS Instance is set as NOT_INSTANTIATED state

    Note: secure communication is handled by a separate user story, SO-3165.

    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2858



    Instantiate NS NBI
    • Preconditions:
      • NS instance is NOT_INSTNANTIATED state
      • SOL007 NS packages are stored in ETSI Catalog Manager.
      • the Cli-based SO NFVO Client is ready to send the SOL005-compliant Instantiate NS request
      • The SO-NFVO (so-etsi-nfvo) pod is ready
    PlantUML Macro
    typedot
    @startuml
    
    participant SO_NFVO_CLI
    participant SOL005_NBI
    participant NS_LCMGR
    
    autonumber 
    
        SO_NFVO_CLI -> SOL005_NBI : Instantiate NS (InstantiateNsRequest)
        SOL005_NBI -> NS_LCMGR : Instantiate NS (InstantiateNsRequest)
        NS_LCMGR --> NS_LCMGR : Instantiate NS Lifecycle Operation Occurrence resource
        NS_LCMGR -> SOL005_NBI : 202 Accepted()
        SOL005_NBI -> SO_NFVO_CLI : 202 Accepted
    
        NS_LCMGR -> SOL005_NBI : Send NsLcmOperationOccurrenceNotification(start)
        SOL005_NBI -> SO_NFVO_CLI :  Send NsLcmOperationOccurrenceNotification(start)
    	NS_LCMGR --> NS_LCMGR : Performs Instantiate NS operations
        NS_LCMGR -> SOL005_NBI : Send NsLcmOperationOccurrenceNotification(result)
        SOL005_NBI -> SO_NFVO_CLI :  Send NsLcmOperationOccurrenceNotification(result)
    opt GET individual NS LCM operation occurrence
    	SO_NFVO_CLI -> SOL005_NBI : GET .../ns_lcm_op_occs/{nsLcmOpOccId}
    	SOL005_NBI -> NS_LCMGR : GET .../ns_lcm_op_occs/{nsLcmOpOccId}
    	NS_LCMGR -> SOL005_NBI : 200 OK (NsLcmOpOcc:operationStatus=PROCESSING or COMPLETED)
    	SOL005_NBI -> SO_NFVO_CLI
    end
    
    @enduml
    • Supports the SOL005-compliant Instantiate NS API 
      • Supports Instantiate NS request API: POST /api/nslcm/v1/ns_instances/{nsInstanceId}/instantiate (InstantiateNsRequest)
      • Supports responses 202 Accepted with an empty payload body
        • Returns a dummy 202 until the backend business logic is ready 
      • Supports NS Lifecycle Operation Occurrence Notification
        • 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.

    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2859



    Terminate NS NBI
    • Precondition: NS instance is INSTANTIATED state
    • 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
    PlantUML Macro
    typedot
    @startuml
    
    participant SO_NFVO_CLI
    participant SOL005_NBI
    participant NS_LCMGR
    
    autonumber 
    
        SO_NFVO_CLI -> SOL005_NBI : Terminate NS (InstantiateNsRequest)
        SOL005_NBI -> NS_LCMGR : Terminate NS (InstantiateNsRequest)
        NS_LCMGR --> NS_LCMGR : Terminate NS Lifecycle Operation Occurrence resource
        NS_LCMGR -> SOL005_NBI : 202 Accepted()
        SOL005_NBI -> SO_NFVO_CLI : 202 Accepted
    
        NS_LCMGR -> SOL005_NBI : Send NsLcmOperationOccurrenceNotification(start)
        SOL005_NBI -> SO_NFVO_CLI :  Send NsLcmOperationOccurrenceNotification(start)
    	NS_LCMGR --> NS_LCMGR : Performs Instantiate NS operations
        NS_LCMGR -> SOL005_NBI : Send NsLcmOperationOccurrenceNotification(result)
        SOL005_NBI -> SO_NFVO_CLI :  Send NsLcmOperationOccurrenceNotification(result)
    opt GET individual NS LCM operation occurrence
    	SO_NFVO_CLI -> SOL005_NBI : GET .../ns_lcm_op_occs/{nsLcmOpOccId}
    	SOL005_NBI -> NS_LCMGR : GET .../ns_lcm_op_occs/{nsLcmOpOccId}
    	NS_LCMGR -> SOL005_NBI : 200 OK (NsLcmOpOcc:operationStatus=PROCESSING or COMPLETED)
    	SOL005_NBI -> SO_NFVO_CLI
    end
    
    @enduml
    • 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.

    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2860



    Delete NS NBI
    • Precondition: NS instance in NOT_INSTANTIATED state
    • SOL007 NS packages are stored in ETSI Catalog Manager.
    • the Cli-based SO NFVO Client is ready to send the SOL005-compliant Create NS request
    • The SO-NFVO (so-etsi-nfvo) pod is ready
    PlantUML Macro
    typedot
    @startuml
    
    participant SO_NFVO_CLI
    participant SOL005_NBI
    participant NS_LCMGR
    
    autonumber 
    
        SO_NFVO_CLI -> SOL005_NBI : Delete NS (DeleteNSRequest)
        SOL005_NBI -> NS_LCMGR : Delete NS (DeleteNSRequest)
        NS_LCMGR --> NS_LCMGR : Delete NS (DeleteNSRequest)
        NS_LCMGR -> SOL005_NBI : 204 No Content
        SOL005_NBI -> SO_NFVO_CLI : 204 No Content
    
    Opt Notification will be handled by the separate user story
        NS_LCMGR -> SOL005_NBI : Send NsIdentifierDeletionNotification
        SOL005_NBI -> SO_NFVO_CLI : Send NsIdentifierDeletionNotification
    end
    
    @enduml
    • Supports the SOL005-compliant Delete NS API
      • Supports Delete NS request API: DELETE /api/nslcm/v1/ns_instances/{nsInstanceId}
      • Supports the Sends 204 No Content with an empty payload body
        • Returns a dummy 204 until the business logic is ready
      • Sends NsIdentifierDeletionNotification to the NFVO subscriber(s) (e.g., ONAP SO SOL005 Adapter)
        • Note: this will be handled by the separate user story: Sends NsIdentifierCreationNotification to the NFVO subscriber(s) (e.g., ONAP SO SOL005 Adapter)
    • Error handling: if the individual NS instance is not in NOT_INSTANTIATED state, it rejects the deletion request


    • Postconditions: the resource representing the NS instance has been removed from the list of NS instance resources

    Note: secure communication is handled by a separate user story, SO-3165.

    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2861



    Support for secured communication of SOL005 NBI API Handler
    Support for secured communication of SOL005 NBI API HandlerYes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3165



    Get NS Operation Status NBI
    • Supports the SOL005-compliant GET NS LCM operation occurrences API 
      • Supports multiple NS LCM operation occurrences request API: GET / api/nslcm/v1/ns_lcm_op_occs
      • Supports responses for multiple NS LCM operation occurrences with 200 OK (NsLcmOpOcc[])
      • Supports individual NS LCM operation occurrence reqeust API: GET /api/nslcm/v1/ns_lcm_op_occs/{nsLcmOpOccId}
        • nsLcmOpOccId is an attribute in the NsLcmOperationOccurrenceNotification
      • Supports responses for the individual NS LCM operation occurrence with 200 OK (NsLcmOpOcc), where its opeationStatus=PROCESSING, COMPLETED)

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

    Note: secure communication is handled by a separate user story, SO-3165.

    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2862



    Support for SOL005 NBI Subscription APIs

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

    • Supports the Subscription (POST ”/subscriptions”) API
    • Supports sending the Notification to SOL005 Adapter by using the SO SOL005 Adapter client-provided interface);
      • POST notification based on the callbackUrl from the subscription) 
    • Note: secure communication is handled by a separate user story, SO-3165.
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3141




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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2864




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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2863




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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2865




    Send NS Notifications (As a Client)
    • As a client, supports the 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)
    • Supports the Gets response: 204 No Content from the subscriber (e.g, SO SOL005 Adapter)
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2866



    Support for secured communication of SOL005 NBI API Handler

    Support for secured communication of SOL005 NBI API Handler

    • HTTPS support with certificate
    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3165


    Support for NS LCM and Workflows Management

    Supports NS LCM and Workflows in SO NFVO(P1)

    • Builds the NS LCM Manager component in SO NFVO to manage the following NS orchestration operations by leveraging NS workflows and business logic.
      • CreateNS
      • InstantiateNS
      • TerminateNS
      • DeleteNS 
    • Builds default the following NS workflows and business logic with embedded Camunda Process instance(s) in SO NFVO
      • CreateNS bpmn files with business logic
      • InstantiateNS bpmn files with business logic
      • TerminateNS bpmn files with business logic
      • DeleteNS bpmn files with business logic 
    • Note: when ONAP Dynamic BPMN is available, follow the "Package and deploy NS LCM Workflows with business logic" use case.
    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2843



    Create NS LCM and Workflows


    Supports the Create NS backend operations and workflows which do the following sequence:

    <Create NS: note: the following workflow is a template, and it can be enhanced as needed.>

    Image Added

    • Supports SOL005-compliant CreateNSRequest request and parameters
      • For AAI, supports global_customer_id and service_type as part of HTTP header
        • This is not SOL005 standards, but for AAI, these parameters would be necessary.
        • Note: if there is an alternative way, please propose.
    • Supports getting NS Package from ETSI Catalog Manager
      • Query ETSI Catalog Manager for an NS package with the given csar_id (nsdId)
    • Supports NSD Validation check:
      • check if the NSD package exists in the ETSI Catalog Manager DB; otherwise generates errors
    • Supports check of an existing NS Instance
      • If an existing NS instance is found, it is an error condition. Returns a proper error.
      • else 
        • Creates NS Instance in the NS Instance DB:
          • stores the NS instance data into the NS Instance DB with the status= 'NOT_INSTANTIATED'
        • Creates a unique ns instance id (uuid)
        • Stores NS instance attribute data into the NS Instance DB.
          • e.g., ns_instance_id, ns_name, ns_package_id, nsd_id, nsd_invariant_id, description, lastuptime, global_customer_id, service_type
          • Adds additional attributes as needed
    • Create an NS instance in AAI:
      • Stores an NS instance to the AAI Service Instance with required attributes as follows.
        • Note: shares the AAI Service Instance with the NetworkService type and role.
        • service-instance-id = ns_inst_id
        • service-instance-name = ns-name
        • service-type = SERVICE_TYPE (NetworkService)
        • service-role = SERVICE_ROLE (NetworkService)
    • For the response, gets the nsInstance data from GetNSInfoService
      • Collects only the NS related mandatory information, not VnfInstance, VlInstance, or else
      • Note: CreateVNF and InstantiateVNF happen during the InstantiateNS, not part of Create NS
    • Supports return of 201 Created with the NsInstance (with NS related mandatory information)
    • Register SO NFVO in MSB (SO-3225)
    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2867



    Instantiate NS


    Supports the Instantiate NS backend operations and workflows which do the following sequence:

    <Instantiate NS: note: the following workflow is a template, and it can be enhanced as needed.>

    Image Added


    • Supports SOL005-compliant InstantiateNSRequest request and parameters
      • Creates BPMN workflows and business logic for the following Instantiate NS operations
        • Create a Job Id
          • Updates NS_Instance Status to INSTANTIATING to the NFVO NS Instance database table
          • Handles input parameters from the InstantiateNsRequest
            • additionalParamsForNs
              • the VnfProfileId is the vnf descriptor id from the tosca.nodes.nfv.VNF vnf_profile (tosca.datatypes.nfv.VnfProifle) properties in NSD
                • note: the VnfProfile data type properties are: instantiation_Level, min_number_of_instances, max_number_of_instances
                • note: this property is only used in an NSD service template when describing a VNF node template with the corresponding VnfProfile information.
              • pass vim_id with tenant id
            • additionalParamsForVnf
              • If it is provided in the request, use additionalParamsForVnf attributes when invoking SOL003 Adapter.
              • Otherwise, formulate additionalParams for SOL003 Adapter invocation from the NSD plus additional user input
              • use of VNF input for additionalParamsForVnf is under investigation
            • pseudo logic:
              • 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
          • 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.



    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2868



    Terminate NS


    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.>


    Image Added
    • 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.



    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2869



    Delete NS



    Supports the Delete NS backend operations and workflows which do the following sequence:

    <Delete NS: note: the following workflow is a template, and it can be enhanced as needed.>

    Image Added

    • Supports SOL005-compliant DeleteNS operation with nsInstanceId
    • Creates BPMN workflows and business logic for the following Delete NS operations
      • Supports input parameter handling
        • Initialize Parameters: get ns_inst_id
      • Deletes ns instance in AAI
        • Gets ns_instances from NFVO_NSINST database table
        • if there are ns_instances, 
          • Queries AAI for global_customer_id, service_type, ns_inst_id
          • Invokes delete_ns_aai with global_customer_id, service_type, ns_inst_id, resource_version
            • Formulates the resource url with parameters
            • Invoke AAI Rest API: call_aaI (resource, "DELETE")
        • note: if there are discrepancies between VNF and NS status in AAI (e.g., VNF was not deleted yet), it is an error condition
      • Deletes ns_inst_id row from the NFVO_NSINST database table
        • note: if multiple records for the givin ns_inst_id are found, it is an error condition
      • Deletes ns_inst_id row from the t_lcm_inputparam_mapping database table
      • Deletes ns_inst_id row from the t_lcm_defPackage_mapping database table
      • Deletes ns_inst_id row from the t_lcm_servicebaseinfo database table
      • Returns 204 No Content
      • Send NsIdentifierDeletionNotification
        • Note: this notification will be handled by a separate notification and subscription user story.


    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2870



    Get NS Operation Status

    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

    Image Added

    • 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.
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2871



    Create NS Subscription

    Supports the Create NS Subscription operation and workflows which do the following sequence:

    <Create NS Subscription: note: the following workflow is a template, and it can be enhanced as needed.>

    Image Added


    • Supports SOL005-compliant Create NS Subscription operation
    • Supports input parameters handling:
      • Initializes 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
      • Creates Subscription ID: create subscription id
      • Checks valid auth info:
      • Checks Filter Type:
        • checks if the notification is NOTIFICATION_TYPE.NSLCM_OPERATION_OCCURRENCE_NOTIFICATION
      • Checks Valid:
        • Checks Callback_URI: check callback Uri
          • checks if the callbackUri exists in the NFVO_SUBSCRIPTION DB
            • if no subscription, return true
            • else 
              • checks additional filter types, notificationTypes, operationTypes, operationStates
                • if the filters are NOT equal, return false
              • checks ns instance filter, If the filter type is not equal, return false
            • return true
      • saves subscription request to database
      • returns response with subscription
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2872



    Get NS Subscription

    Supports the Get NS Subscription operation and workflows which do the following sequence:

    <Get NS Subscription: note: the following workflow is a template, and it can be enhanced as needed.>

    Image Added

    • Supports SOL005-compliant Get NS Subscription operation
    • Supports input parameters handling:
      • Initializes Parameter: set subscription_id, params
    • if there is no param, 
      • Queries NFVO_SUBSCRIPTION DB for all
      • Returns LccSubscription[]
    • else if there is param, subscriptionId,
      • Queries NFVO_SUBSCRIPTION DB for the subscriptionId
      • Returns LccSubscription


    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2874



    Delete NS Subscription

    Supports the Delete NS Subscription operation and workflows which do the following sequence:

    <Delete NS Subscription: note: the following workflow is a template, and it can be enhanced as needed.>

    Image Added

    • Supports SOL005-compliant Delete NS Subscription operation
    • Supports input parameters handling:
      • Initialize Parameters: set subscriptonId
    • Deletes NFVO_SUBSCRIPTION DB for the subscriptionId
    • if success, return 204 No Content
    • else, return error
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2875



    Send NS Notifications

    Supports the Send NS Notification operation and workflows which do the following sequence:

    <Send NS Notification: note: the following workflow is a template, and it can be enhanced as needed.>

    Image Added

    • Supports SOL005-compliant Send NS Notification operation
    • Supports input parameters handling:
      • Initialize Parameter:
        • query NFVO_SUBSCRIPTION DB for the given key
        • get the callback URI from the return subscription 
    • Formulates 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)


    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2876



    Support for Create VLs 

    Supports the Create VLs operation and workflows which do the following sequence:

    • Note: Create VLs operations are called as part of the Instantiate NS.
    • Supports Create VLs operation
      • Supports input parameters handling:
        • Initializes Parameters: set VL data
      • Creates VL to VIM through the MultiCloud Adapter
        • ownerid in the NFVO_VLINST database = ns_inst_id
      • Saves VL to NFVO_VLINST database
      • Creates Network in AAI
      • Supports a simple MultiCloud simulator

    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2886



    Support for Delete VLs

    Supports the Delete VLs operation and workflows which do the following sequence:

    • Note: Delete VLs operations are called as part of the Delete NS.
    • Supports Delete VLs operation
      • Gets VL info from the NFVO_VLINST DB for the vl_inst_id
      • Gets ns_inst_id from the VL info ownerid (= ns_inst_id)
      • 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_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
      • Support a simple MultiCloud simulator
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2887



    Support for Get VLs

    Supports the Get VLs operation and workflows which do the following sequence:

    • Note: Get VLs operations are called as part of the Instantiate and Delete NS.


    • Supports SOL005-compliant Get VLs operation
      • Queries VL info for the given vl_inst_id
      • Queries NFVO_VLINST DB for the vl_inst_id
      • Returns a record for the vl_inst_id


    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2888



    Support for granting VNF (non OOF-based one)

    Supports the granting VNF (non OOF-based one) operation and workflows which do the following sequence:

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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3142



    Support for NS Catalog DB Adapter 
    • Provides access for ETSI Catalog Manager
    • Get notifications from ETSI Catalog Manager
    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2845




    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):
      • note: for SO NFVO, only NS and VNF package management API will be used, not PNF


    View file
    nameetsicatalog.swagger.json
    height250


    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2877



    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):

    View file
    nameetsicatalog.swagger.notification.json
    height250


    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2878



    Support for NS Inventory (AAI) Adapter 
    • 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
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2846




    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")
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2880




    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")
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2881




    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")
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2882




    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")
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2883




    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) for CRUD
    • Creates the following 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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2889



    Support for MultiCloud Adapter
    • Provides MultiCloud Access
    • Refactoring of the current SO MultiCloud Adapter
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2847




    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)
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2884




    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
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2885






























    Package and dynamically deploy NS LCM Workflows with business logic




    When ONAP SO support Dynamic BPMN, package and deploy NS LCM workflows with business logic as a WAR file.

    • Packages and deploys NS LCM workflows with business logic for NS LCM as a WAR file
      • contains default NS LCM workflows and business logic
      • deploys the WAR file before or while ONAP SO is running
    • This feature tests ONAP SO custom NS workflows deployment (Hot deployment) for NS 
      • 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/Rest interfaces for the custom workflow war deployment would be supported 
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2891



    Package and deploy default NS LCM workflows with business logic
    • Provides the default NS LCM workflows with business logic for NS LCM
    • Package the default NS LCM workflows with business logic as a deployable WAR file
      • Removes the embedded Camunda process.
    • Deploy the NS workflow WAR file by leveraging the REST API that is provided by the NS LCM Manager 
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2892



    Support for UI and REST interfaces for custom workflow war deployment 
    • Supports for UI and REST interfaces for custom workflow war deployment
      • In Guilin, only REST interfaces for the NS Workflows war deployment
      • NS LMC Manager provides the REST interface for the deployment
    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2893









    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)
      • 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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2844



    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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2894



    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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2895


    Enhance NFVO invocation sequences from UUI to SOL005 Adapter to make ONAP SO SOL005 compliant



    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

    No

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2857









    <task>






    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: 
      Jira
      serverONAP JIRA
      serverId425b2b0a-557c-3c0c-b515-579789cceedb
      keyMODELING-335
      Jira
      serverONAP JIRA
      serverId425b2b0a-557c-3c0c-b515-579789cceedb
      keyMODELING-336
    Yes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3220



    Register ETSI NFVO in MSB
    Register ETSI NFVO in MSBYes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3225



    Create NFVO Database OOM Files
    Create NFVO Database OOM FilesYes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3159



    Test SO NFVO on Java 11 with Camunda BPMN embedded engine
    Test SO NFVO on Java 11 with Camunda BPMN embedded engineYes

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-3241









    <for Future Release>






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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2848



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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2849



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

    Jira
    serverONAP JIRA
    serverId425b2b0a-557c-3c0c-b515-579789cceedb
    keySO-2850



    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























    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.

    ...

    PlantUML Macro
    typedot
    @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

    • 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.

    ...

    PlantUML Macro
    typedot
    @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

    • 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.

    ...

    • 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.

    ...

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

    Additional Info

    ONAP SO NFVO Architecture & Functions

    The following diagram depicts the NFVO component architecture

    ...

    Gliffy Diagram
    macroId6eb369b2-795b-470e-91dd-44f9424a19f2
    nameONAP NFVO component architecture
    pagePin25



    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”)
        • Terminate NS (“/api/nslcm/v1/ns_instances/{nsInstanceId}/terminate”)
        • Delete NS (DELETE “/api/nslcm/v1/ns_instances/{nsInstanceId}”)
        • Scale NS (POST “/api/nslcm/v1/ns_instances/{nsInstanceId}/scale”) – stretch goal
        • Heal NS (“POST ”/api/nslcm/v1/ns_instances/{nsInstanceId}/heal”) – stretch goal
        • Query NS (GET “/api/nslcm/v1/ns_instances”, “/api/nslcm/v1/ns_instances/{nsInstanceId}”)
        • Subscription (POST ”/subscriptions”)
        • Notification (SO SOL005 Adapter client-provided; POST notification based on the callbackUrl from the subscription) 
      • Support NS Fault Management API (stretch goal)
      • Support NS Performance Management APIs (stretch goal)

      • Leverages SOL005 Swagger Files

    NS Workflows & Business Logic - high priority

    • Provides Workflow engines (stand-alone/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

    • Provides NS workflows
      • 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)
        • 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 


    ETSI Package Onboarding for NFVO - enhancements of current capabilities

    • ONAP NFVO leverages the ETSI Catalog Manager as the run-time Catalog Database service provider.
      • ETSI NS/VNF/PNF Packages are onboarded and distributed from SDC à ETSI Catalog Manager (note: this is NOT part of NFVO; it is a separate effort)
      • ONAP NFVO queries ETSI NS/VNF/PNF Packages from the ETSI Catalog Manager



    NS LCM Database  - high priority

    • Use the VFC NS LCM database


    SOL003 Adapter for SVNFMs - leveraging existing capabilities

    • Provides SOL003-compliant (Or-Vnfm) Southbound APIs towards SVNFMs
      • Supports VNF Lifecycle Management (LCM)
        • Create VNF
        • Instantiate VNF
        • Terminate VNF
        • Delete VNF
        • Scale VNF
        • Heal VNF
        • Query VNF
        • ModifyInfo VNF
        • Subscription
        • Notification
        • Granting with HPA
      • It is a Microservice and part of ONAP SO NFVO
      • It is launched by NS Workflows for VNF LCM
      • It locates the VNFM instance by leveraging AAI ESR


    Resource Infra Management (RIM) Manager - high priority

    • Provides Resource Granting Information through OOF (Policy, MultiCloud, A&AI)
      • Supports interfaces with OOF to collect Granting information
      • Collects Homing information from OOF and provides the 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)
      • Software Image Management (P1)
      • Container Image Management (P2)

      • Virtualized Resources Information Management (P2)
      • Virtualized Resources Capacity Management (P2)

      • Virtualized Resources Management (P2)
      • Virtualized Resources Change Management (P2)

      • Virtualized Resources Reservation Management (P2)
      • Virtualized Resource Quota Management (P2)

      • Virtualized Resource Performance Management (P2)
      • Virtualized Resource Fault Management (P2)

      • Network Forwarding Path (NFP) Management (P2)

    Notification Adapter (not for Guilin)

    • Supports general-purpose notification services to its clients such as ONAP SO or SOL005 compliant clients
    • TBD


    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

    • 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.
    • TBD






    Create / Instantiate NS

    The following diagram depicts the Create/Instantiate NS.

    ...

    PlantUML Macro
    typedot
    @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

    • nsdId
    • nsName
    • nsDescription

    Response

    NsInstance

    • see NsInstance from ETSI GS NFV-SOL 005 v2.7.1

    NS LCM Manager Design

    VFC design 

    • get nsdId, nsName and nsDescription, context (globalCustomerId, serivceType) parameters

    • get a ns package by the given nsdId from ETSI Catalog Manager
    • check if ns instance exists from the NFVO_NSINST database table
      • if it exists, log it exists
    • create an ns instance id (uuid) and store it with other nsd info, status (NOT_INSTANTIATED) to NFVO_NSINST database table
    • create an ns instance record (service-instance-id, service-instance-name, service-type, service-role) in AAI
    • get nsInstance from GetNSInfoService
    • return 201 Created with the NsInstance
    • Send NsIdentifierCreationNotification

    ...

    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

    • Get an ns instance id from the parameter
    • create a job for the ns instance id
    • create an occ id for the ns instance id
    • Update the ns instance id row of the NFVO_NSINST database table for status (= INSTANTIATING)
    • get a ns instance data from the NFVO_NSINST for the ns instance id
    • get and store additional Parameters for NS
    • get an VIM id from the cloud owner and cloud region parameters
    • get an VNF VIM from he location constraints
    • set the job status with 'Start Query NSD'
    • get and parse a nsd for the ns package id
    • modify nsd state
    • 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 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 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)
    • 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)


        • createVL
        • createVNF
        • createSFC (Service Function Chain)

    ...

    The following diagram depicts the Instantiate NS.


    Terminate / Delete NS

    The following diagram depicts the Terminate / Delete NS.

    ...

    PlantUML Macro
    typedot
    @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

    • terminateTime

    Response

    201 Accepted

    NsLcmOperationOccurrenceNotification (Start/Processing/Completed)


    NS LCM Manager Design

    VFC Design

    • Get an ns_inst_d, job_id and request_data from the parameters
    • if there no matching ns_inst_id from the NFVO_NSINT database table, consider there is nothing to terminate, and return
    • 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
      • 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
      • get VL Inst array
      • for each VL inst
        • DELETE /api/nslcm/v1/ns/vls/{instId}
    • cancel PNF list
      • 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

    ...

    The following diagram depicts the Terminate NS.

    Delete NS



    Request

    • No; just parameter nsInstanceId


    Response

    • 204 No Content

    Notification

    • Send NsIdentifierDeletionNotification


    NS LCM Manager Design

    VFC_Design

    • get ns_inst_id
    • delete ns instance in AAI
      • get ns_instances from NFVO_NSINST database table
      • 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 NFVO_INPutParamMapping database table
    • delete ns_inst_id row from the DefPkgMapping database table
    • delete ns_inst_id row from the ServiceBaseInfo database table
    • return 204 No Content
    • Send NsIdentifierDeletionNotification

    ...

    The following diagram depicts the Delete NS.


    Subscription NS


    PlantUML Macro
    typedot
    @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

    • LccnSubscriptionRequest
    • subscriptionId. for GET and DELETE

    Response

    • 204 No Content
    • 201 Created (LccnSubscription)
    • 200 OK (LccnSubscription[])
    • 200 OK (LccnSubscription)


    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

    • create subscription id
    • check callback Uri
    • check filter types
    • save subscription request to database
    • return response with subscription

    ...