ONAP SO

SO Install & Configure

Get Ubuntu

Get the Ubuntu ISO image from ubuntu.com. The recommended version is 16.04.3 LTS (Long Term Support), desktop edition.

Get VirtualBox and VirtualBox Guest Additions

Make sure you have the VirtualBox Guest Additions ISO for your version of VirtualBox. I’m using VirtualBox 5.1.28. Save the Guest Additions ISO on your host computer along with the Ubuntu ISO. Get the Guest Additions ISO from here:

http://download.virtualbox.org/virtualbox

NOTE: Guest Additions versions prior to 5.1 will not work with Ubuntu 16.04.3. If you have an earlier version of VirtualBox, you should upgrade to the latest 5.1 version.

Create a new VM in VirtualBox for Ubuntu

Type: Linux

Version: Ubuntu (64-bit)

At least 2048 MB memory

At least 40 GB VDI

Network: Attached to: NAT

Create a port-forwarding rule for SSH

Create a port-forwarding rule so that you can use PuTTY (or other SSH client) to connect to the VM.

Go to “Network” settings in VirtualBox, add a port forwarding rule:

Name: SSH

Protocol: TCP

Host IP: 127.0.0.1

Host Port: 1022

Guest IP: <leave blank>

Guest Port: 22

_images/Configure_ubuntu_SO_1.png

.

_images/Configure_ubuntu_SO_2.png

Create Shared Folder

This is oriented to Windows users. If you’re using a MAC or a Linux host computer, the details may be different. You can share any folder on the host computer with the Ubuntu VM. On Windows, a practical choice is to share the C:Users folder, so that your Windows home directory will be accessible from the Ubuntu VM.

Go to “Shared Folders” settings in VirtualBox, add a share:

Folder Path: C:Users

Folder Name: Users

Auto-mount: <checked>

Read-only: <unchecked>

_images/Configure_ubuntu_SO_3.png

.

_images/Configure_ubuntu_SO_4.png

Install Ubuntu in the VM

On the “Storage” panel in VirtualBox, click on “[ optical drive ]” and then “Choose Disk Image”.

Select your Ubuntu ISO image:

_images/Configure_ubuntu_SO_5.png

After selecting the ISO image, start the VM.

Follow the prompts to install Ubuntu.

Proxy Configuration (optional)

If you’re behind a corporate firewall, configure some proxy settings. NOTE: your proxy configuration may require username and password credentials, not shown here. Ubuntu system proxy setting:

System Settings → Network → Network proxy

(Replace “proxyhost” and port with your actual proxy information)

_images/Configure_ubuntu_SO_6.png
apt proxy setting:

Edit /etc/apt/apt.conf and add one line at the top (replace “proxyhost:port” with your actual proxy information):

Acquire::http::Proxy “http://proxyhost:port”;

Reboot the VM.

Install SSH Server

sudo apt update
sudo apt install openssh-server

Connect to the VM from your host computer

The PuTTY SSH client is popular. A connection to localhost:1022 (or whatever port you have forwarded) will go to the VM.

_images/Configure_ubuntu_SO_7.png

Install VirtualBox Guest Additions

On the “Storage” panel in VirtualBox, click on “[ optical drive ]” and then “Choose Disk Image”. Select your VirtualBox Guest Additions ISO image.

_images/Configure_ubuntu_SO_8.png

In a VM terminal window, mount the cdrom:

sudo mkdir -p /media/cdrom
sudo mount /dev/cdrom /media/cdrom

Install necessary dependencies:

sudo apt update
sudo apt install gcc g++ dkms

Install the guest additions. NOTE: look for errors in the command output! If you see an error that says you are missing kernel headers, the most likely cause is that you are using a VirtualBox version that is too old. The error message is misleading.

cd /media/cdrom
sudo ./VBoxLinuxAdditions.run
_images/Configure_ubuntu_SO_9.png

Add yourself to the vboxsf user group (replace “userid” with your user ID):

sudo usermod -a -G vboxsf userid

Reboot the VM.

In a VM terminal window, verify that you can access your home directory on the host computer, which should be mounted under here:

/media/sf_Users

Further Reading

Install Docker

Make sure curl is installed on the Ubuntu VM:

sudo apt update
sudo apt install curl
If you are behind a corporate firewall (replace “proxyhost:port” with your actual proxy information)

https_proxy=”https://proxyhost:port” curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -

Otherwise:

curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -

Expected Response:

OK

Add the docker package repository:

sudo apt-add-repository “deb https://apt.dockerproject.org/repo ubuntu-xenial main”

Install packages:

sudo apt update
sudo apt-cache policy docker-engine
    sudo apt install docker-engine
    sudo apt install docker-compose

If you are behind a corporate firewall, you will need to configure proxy settings for docker so that images may be obtained from internet repositories. In the commands shown here, replace “proxyhost:port”, “yourdomain1.com”, and “yourdomain2.com” with appropriate values.

Make the docker configuration directory:

    sudo mkdir -p /etc/systemd/system/docker.service.d

Edit (create) this file:
            sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf

Add these lines:

    [Service]

            Environment="HTTP_PROXY=https://*proxyhost:port*"

            Environment="HTTPS_PROXY=https://*proxyhost:port*"

            Environment="NO_PROXY=localhost,127.0.0.1,.yourdomain1.com,.yourdomain2.com"

Restart docker:
sudo systemctl daemon-reload
sudo systemctl restart docker

Add yourself to the docker user group (replace “userid” with your user ID):

sudo usermod -a -G docker *userid*

Log out and log back in so that the user group change will takeeffect.

Verify that you can connect to docker as yourself (i.e. not as root):

docker ps

Verify that you can download and run the hello-world container

docker run hello-world
_images/Docker_install_1.png

Configure git and gerrit

Basics

The recommended version of git is 2.7.4 or later. Check the installed version in the Ubuntu VM:

git --version

Create an SSH key to user with gerrit. Use no passphrase.

ssh-keygen -t rsa

Enter your SSH public key (id_rsa) into gerrit:

_images/Configure_git_1.png
  • Select “Settings”

  • In the “Settings” sidebar, click “SSH Public Keys”`

  • Click “Add Key…”

  • Paste the entire contents of $HOME/.ssh/id_rsa.pub into the text area and click “Add”.

_images/Configure_git_2.png

Install the git-review package.

sudo apt update
sudo apt install git-review
Create $HOME/.gitconfig (replace highlighted values with your own information):

[user]

name = FirstName LastName

email = you@yourcompany.com

[core]

autocrlf = false

[merge]

tool = vimdiff

[gitreview]

username = YourLinuxFoundationId

If you’re behind a corporate firewall and your proxy server has SOCKS support…

You may be able to use the SSH protocol with git, which is preferred versus HTTP. This method is known to work in the AT&T corporate network. Install the socat package, which allows you to tunnel SSH connections through a proxy that supports SOCKS:

sudo apt update
sudo apt install socat

Create (or append to) $HOME/.ssh/config (replace highlighted values with your information)

Host gerrit.onap.org

User userid

Hostname gerrit.onap.org

ProxyCommand socat - PROXY:host:%h:%p,proxyport=port

IdentityFile /home/userid/.ssh/id_rsa

ServerAliveInterval 10

Verify that you have connectivity to gerrit through the proxy. Answer “yes” to continue connecting, if prompted.

ssh -p 29418 gerrit.onap.org
_images/Configure_git_3.png

Workspace and Development Tools

We recognize that there are different ways to set up a workspace and different tools that may be chosen. This is just one way to set things up.

Suggested Directory Structure

NOTE: You may have different versions of eclipse and java.

onap

.m2

apache-maven-3.3.9

camunda-modeler

eclipse-jee-neon-3-linux-gtk-x86_64

jdk1.8.0_131

workspace

SO

chef-repo

docker-config

libs

so

so-config

Java

Download the latest Java_8_SE_Development_Kit from Oracle. Select a Linux x64 package.

Unpack it.

Maven

Download the Apache_Maven_3.3.9 binary. NOTE: 3.3.9 is the recommended version, even though much higher versions are available.

Unpack it.

Create an .m2 directory for maven and put settings.xml in it. Edit the local repository path in settings.xml to make it correct for your environment. Everything else should be OK.

Camunda Modeler

Download the Camunda_Modeler. Select the Linux x64 package. Unpack it.

Eclipse

Download Eclipse_for_Linux. Select the 64-bit Eclipse IDE for Java EE Developers. Oxygen seems to be the latest version. These instructions were written for Neon. Unpack it.

In the eclipse directory, edit eclipse.ini

Add (or change) the -vm setting so that it points to your JDK.

Adjust the maximum heap space (2GB is recommended).

Example:

_images/Workspace_and_Development_Tools.png
Eclipse Settings
Configure eclipse to use your external maven 3.3.9 installation:

Go to Window→Preferences→Maven→Installations

Click “Add” and browse to your apache-maven-3.3.9 directory. Click “OK” to select it.

Click “Finish”

_images/Workspace_and_Development_Tools_2.png

Make sure the external installation is selected:

_images/Workspace_and_Development_Tools_3.png
Configure eclipse to use your settings.xml

Go to Window→Preferences→Maven→User Settings

Type the full path to your settings.xml file into the “User Settings” box and click “OK”.

_images/Workspace_and_Development_Tools_4.png

SO - Architecture

SO Functional View

_images/SO_Architecture_2.png

SO Deployment View

_images/SO_Architecture_Internal.png _images/so-architecture.png

SO Sub-Components

API Handler

RESTful interface to northbound clients

  • Handle service-level and infrastructure (VNF & network) requests

    Service-agnostic APIs
    • “Service Instantiation API”

    Model-driven recipe selection
    • Use SO Catalog to map input requests to BPMN flows

    • Dynamic lookup based on service-model + action

    • Input data forwarded to BPMN flow

    Track open and completed requests via SO Request DB

    Multiple API-H modules may support different APIs

BPMN Execution Engine

Open-source Camunda platform
  • Support BPMN 2.0 service recipes

Expose RESTful interface to API-H (unique path per recipe)

Make use of common “building block” sub-flows

Sequence orchestration steps for each Resource in the recipe
  • Request and configure network resources via SDN-C

  • Manage cloud resources via PO (OpenStack)

  • Update inventory via A&AI

Perform error handling/rollback

Resource Adapters

Interfaces to lower level controllers and other ONAP components
  • Platform Orchestrator, SDN-Controller, APP-Controller, VFC-Controllers, Multi-Cloud

  • Hides the details of complex interfaces (e.g. OpenStack APIs)

  • Expose interfaces to BPMN flows as SOAP or REST APIs

  • Support synchronous and asynchronous operations

Provided as part of SO platform for use by all BPMN flows

Use SO Catalog to map resource requests to a recipe/template

Data-driven design
  • Catalog templates may be updated via self-service (outside of release cycles)

  • Merge input parameters with templates at run-time

Data Stores

Request DB
  • Tracks open and completed requests

SO Catalog
  • SO view of the SDC Catalog
    • service and resource models, recipes, and templates

  • Populated via SDC distribution service from TOSCA models

Camunda DB
  • Maintain state for BPMN flows

  • Supports multiple active engines

SDC Distribution Client

Receive updated service models from SDC
  • Event-bus notifications when new models available

  • HTTP retrieval of models (TOSCA) and artifacts (Heat)

Receive distributions as TOSCA models

Populate SO Catalog

Support self-service updates to models and artifacts

SO Monitoring

Monitor BPMN Workflow execution by providing
  • Service list search based on search criteria

  • Service statistic

  • Service Process Instance Rendering and Detail

SO VNFM Adapter

Support external SVNFMs through SOL003 APIs
  • Create, Instantiate, Terminate and Delete VNF, including Granting, Subscription and Lifecycle Notifications

  • Tracking capability which VNFM instance has handled with which VNF instance

  • BPMN Building Block workflows and Java-based recipes for VNF LCM

  • Conformance of SOL001 VNFD and SOL004 VNF package specifications

  • Interfacing with the ETSI Catalog Manager (a.k.a. etsicatalog) for retrieving ETSI VNF descriptors and artifacts

  • VNFM Simulator for validating SO VNFM Adapter NBI and SBI for integration testing

_images/SO-SOL003-Adapter-Architecture-1.png

SO ETSI NFVO

Support ETSI NFVO functions which manages Network Service LCM
  • Create, Instantiate, Terminate and Delete NS

  • Decomposing an NS request into associated VNF request(s) and managing VNF LCM (Create, Instantiate, Terminate, Delete VNF) through SO VNFMN Adapter

  • Leveraging SOL005 for its NBI and SOl003 for its SBI

  • Conformance of SOL001 NSD and SOL007 NS package specifications

  • Interfacing with the ETSI Catalog Manager (a.k.a. etsicatalog) for retrieving ETSI NS descriptors and artifacts

_images/SO-NFVO-Architecture-1.png

Third Party and Open Source

BPMN Engine

Camunda (open source)

Other Open Source Components of Note:

Tomcat MySQL/MariaDB Openstack Java SDK (“woorea”)

SO Offered and Consumed APIs

The list of APIs that SO offers can be found in following table:

swagger-icon

html-icon

yml-icon

swagger json file

html doc

yaml doc

link

link

link

The list of APIs that SO offerers for monitoring the BPMN flows could be found in the following table:

swagger-icon

yml-icon

swagger json file

yaml doc

link

link

Further Reading

Detailed documentation can be found here:

serviceInstances API

This API allows to generate some requests to manage:

  • serviceInstances (create, delete)

  • volumeGroups attached to a vnf instance (create, delete)

  • vfModules attached to a vnf instance (create, delete)

  • vnfs attached to a service instance (create, delete)

  • orchestrationRequests (get)

  • CNF healthCheck

links:

Create service instance

Interface Definition

Description

URI

/onap/so/infra/serviceInstantiation/v7/serviceInstances

Operation Type

POST

Content-Type

application/json

Request Headers:

Header Name

Required

Description

Authorization

Y

Base64 encoded username:password

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

requestDetails

M

1

requestDetails Object

Content of requestDetails object.

RequestDetails Object

Attribute

Content

Description

modelInfo

modelInfo Object

Content of modelInfo object.

subscriberInfo

subscriberInfo Object

Content of subscriberInfo object.

requestInfo

requestInfo Object

Content of requestInfo object.

requestParameters

requestParameters Object

Content of requestParameters object.

relatedInstanceList

relatedInstanceList Object

Content of relatedInstanceList object.

cloudConfiguration

cloudConfiguration Object

Content of cloudConfiguration object.

project

project Object

Content of project object.

owningEntity

owningEntity Object

Content of owningEntity object.

platform

platform Object

Content of platform object.

lineOfBusiness

lineOfBusiness Object

Content of lineOfBusiness object.

ModelInfo Object

Attribute

Content

Description

ModelType

String

Type of model

ModelInvariantId

String

The Model Invariant Id.

ModelNameVersionId

String

The modelname Version Id

ModelName

String

Name of the Model

ModelVersion

String

Version of the model

ModelCustomization Name

String

The Model Customization name

modelCustomizationUuid

String

The Model Customization UUid

modelVersionId

String

The Model version id

modelUuid

String

The Model UUid

modelInvariantUuid

String

The Model Invariant UUid

modelInstanceName

String

The Model Instance name

SubscriberInfo Object

Attribute

Content

Description

GlobalSubscriberId

String

Global customer Id (in A&AI)

SubscriberName

String

Name of the Subscriber

RequestInfo Object

Attribute

Content

Description

Source

String

source of the request

billingAccountNumber

String

billingAccountNumber of the request

callbackUrl

String

callbackUrl of the request

correlator

String

correlator of the request

orderNumber

String

orderNumber of the request

productFamilyId

String

productFamilyId of the request

orderVersion

String

orderVersion of the request

instanceName

String

instanceName of the request

suppressRollback

String

suppressRollback of the request

requestorId

String

requestorId of the request

RequestParameters Object

Attribute

Content

Description

SubscriptionServiceType

String

The service type of the Subscription

UserParams

Array

The product family Id.

aLaCarte

Boolean

aLaCarte

autoBuildVfModules

Boolean

autoBuildVfModules

cascadeDelete

Boolean

cascadeDelete

usePreload

Boolean

usePreload

rebuildVolumeGroups

Boolean

rebuildVolumeGroups

payload

String

payload

controllerType

String

controllerType

UserParams Object

Attribute

Content

Description

name

String

Tag name of attribute

value

String

Value of the tag

CloudConfiguration Object

Attribute

Content

Description

lcpCloudRegionId

String

CloudRegion Id (in A&AI)

tenantId

String

Name of the Subscriber

aicNodeClli

String

aicNodeClli property

Project Object

Attribute

Content

Description

projectName

String

Name of the project

OwningEntity Object

Attribute

Content

Description

owningEntityId

String

owningEntityId of the owingEntity

owningEntityName

String

owningEntityName of the owingEntity

Platform Object

Attribute

Content

Description

platformName

String

Platform Name

LineOfBusiness Object

Attribute

Content

Description

lineOfBusinessName

String

Line Of Business Name

Delete service instance

Interface Definition

Description

URI

/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}

Operation Type

DELETE

Content-Type

application/json

Request Headers:

Header Name

Required

Description

Authorization

Y

Base64 encoded username:password

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

requestDetails

M

1

requestDetails Object

Content of requestDetails object.

RequestDetails Object

Attribute

Content

Description

modelInfo

modelInfo Object

Content of modelInfo object.

requestInfo

requestInfo Object

Content of requestInfo object.

ModelInfo Object

Attribute

Content

Description

ModelType

String

Type of model

ModelInvariantId

String

The Model Invariant Id.

ModelName

String

Name of the Model

ModelVersion

String

Version of the model

RequestInfo Object

Attribute

Content

Description

Source

String

source of the request

Create Volume Group

Interface Definition

Description

URI

/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups

Operation Type

POST

Content-Type

application/json

Request Headers:

Header Name

Required

Description

Authorization

Y

Base64 encoded username:password

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

requestDetails

M

1

requestDetails Object

Content of requestDetails object.

RequestDetails Object

Attribute

Content

Description

modelInfo

modelInfo Object

Content of modelInfo object.

subscriberInfo

subscriberInfo Object

Content of subscriberInfo object.

requestInfo

requestInfo Object

Content of requestInfo object.

requestParameters

requestParameters Object

Content of requestParameters object.

relatedInstanceList

relatedInstanceList Object

Content of relatedInstanceList object.

cloudConfiguration

cloudConfiguration Object

Content of cloudConfiguration object.

project

project Object

Content of project object.

owningEntity

owningEntity Object

Content of owningEntity object.

platform

platform Object

Content of platform object.

lineOfBusiness

lineOfBusiness Object

Content of lineOfBusiness object.

ModelInfo Object

Attribute

Content

Description

ModelType

String

Type of model

ModelInvariantId

String

The Model Invariant Id.

ModelNameVersionId

String

The modelname Version Id

ModelName

String

Name of the Model

ModelVersion

String

Version of the model

ModelCustomization Name

String

The Model Customization name

modelCustomizationUuid

String

The Model Customization UUid

modelVersionId

String

The Model version id

modelUuid

String

The Model UUid

modelInvariantUuid

String

The Model Invariant UUid

modelInstanceName

String

The Model Instance name

CloudConfiguration Object

Attribute

Content

Description

lcpCloudRegionId

String

CloudRegion Id (in A&AI)

tenantId

String

Name of the Subscriber

aicNodeClli

String

aicNodeClli property

RequestInfo Object

Attribute

Content

Description

Source

String

source of the request

billingAccountNumber

String

billingAccountNumber of the request

callbackUrl

String

callbackUrl of the request

correlator

String

correlator of the request

orderNumber

String

orderNumber of the request

productFamilyId

String

productFamilyId of the request

orderVersion

String

orderVersion of the request

instanceName

String

instanceName of the request

suppressRollback

String

suppressRollback of the request

requestorId

String

requestorId of the request

relatedInstance List

Attribute

Content

Description

relatedInstance

Object

relatedInstance Object

relatedInstance List

Attribute

Content

Description

instanceId

String

instanceId

modelInfo

Object

Content of modelInfo object.

Delete Volume Group

Interface Definition

Description

URI

/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volume-groupinstance-id}

Operation Type

DELETE

Content-Type

application/json

Request Headers:

Header Name

Required

Description

Authorization

Y

Base64 encoded username:password

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

requestDetails

M

1

requestDetails Object

Content of requestDetails object.

RequestDetails Object

Attribute

Content

Description

modelInfo

modelInfo Object

Content of modelInfo object.

cloudConfiguration

cloudConfiguration Object

Content of cloudConfiguration object.

requestInfo

requestInfo Object

Content of requestInfo object.

ModelInfo Object

Attribute

Content

Description

ModelType

String

Type of model

ModelName

String

Name of the Model

CloudConfiguration Object

Attribute

Content

Description

lcpCloudRegionId

String

CloudRegion Id (in A&AI)

tenantId

String

Name of the Subscriber

RequestInfo Object

Attribute

Content

Description

Source

String

source of the request

Create VF Module

Interface Definition

Description

URI

/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules

Operation Type

POST

Content-Type

application/json

Request Headers:

Header Name

Required

Description

Authorization

Y

Base64 encoded username:password

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

requestDetails

M

1

requestDetails Object

Content of requestDetails object.

RequestDetails Object

Attribute

Content

Description

modelInfo

modelInfo Object

Content of modelInfo object.

cloudConfiguration

cloudConfiguration Object

Content of cloudConfiguration object.

requestInfo

requestInfo Object

Content of requestInfo object.

relatedInstanceList

List

Content of relatedInstanceList.

ModelInfo Object

Attribute

Content

Description

ModelType

String

Type of model

ModelInvariantId

String

The Model Invariant Id.

ModelNameVersionId

String

The modelname Version Id

ModelName

String

Name of the Model

ModelVersion

String

Version of the model

ModelCustomization Name

String

The Model Customization name

CloudConfiguration Object

Attribute

Content

Description

lcpCloudRegionId

String

CloudRegion Id (in A&AI)

tenantId

String

Name of the Subscriber

RequestInfo Object

Attribute

Content

Description

InstanceName

String

The instance Name

Source

String

source of the request

SuppressRollback

Boolean

SuppressRollback

relatedInstance List

Attribute

Content

Description

relatedInstance

Object

relatedInstance Object

relatedInstance List

Attribute

Content

Description

instanceId

String

instanceId

modelInfo

Object

Content of modelInfo object.

instanceName

String

Name of the instance

Delete VF Module

Interface Definition

Description

URI

/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleinstance-id}

Operation Type

DELETE

Content-Type

application/json

Request Headers:

Header Name

Required

Description

Authorization

Y

Base64 encoded username:password

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

requestDetails

M

1

requestDetails Object

Content of requestDetails object.

RequestDetails Object

Attribute

Content

Description

modelInfo

modelInfo Object

Content of modelInfo object.

cloudConfiguration

cloudConfiguration Object

Content of cloudConfiguration object.

requestInfo

requestInfo Object

Content of requestInfo object.

ModelInfo Object

Attribute

Content

Description

ModelType

String

Type of model

ModelInvariantId

String

The Model Invariant Id.

ModelNameVersionId

String

The modelname Version Id

ModelName

String

Name of the Model

ModelVersion

String

Version of the model

ModelCustomization Name

String

The Model Customization name

CloudConfiguration Object

Attribute

Content

Description

lcpCloudRegionId

String

CloudRegion Id (in A&AI)

tenantId

String

Name of the Subscriber

RequestInfo Object

Attribute

Content

Description

Source

String

source of the request

Create VNF

Interface Definition

Description

URI

/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs

Operation Type

POST

Content-Type

application/json

Request Headers:

Header Name

Required

Description

Authorization

Y

Base64 encoded username:password

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

requestDetails

M

1

requestDetails Object

Content of requestDetails object.

RequestDetails Object

Attribute

Content

Description

modelInfo

modelInfo Object

Content of modelInfo object.

subscriberInfo

subscriberInfo Object

Content of subscriberInfo object.

requestInfo

requestInfo Object

Content of requestInfo object.

requestParameters

requestParameters Object

Content of requestParameters object.

relatedInstanceList

relatedInstanceList Object

Content of relatedInstanceList object.

cloudConfiguration

cloudConfiguration Object

Content of cloudConfiguration object.

project

project Object

Content of project object.

owningEntity

owningEntity Object

Content of owningEntity object.

platform

platform Object

Content of platform object.

lineOfBusiness

lineOfBusiness Object

Content of lineOfBusiness object.

ModelInfo Object

Attribute

Content

Description

ModelType

String

Type of model

ModelInvariantId

String

The Model Invariant Id.

ModelNameVersionId

String

The modelname Version Id

ModelName

String

Name of the Model

ModelVersion

String

Version of the model

ModelCustomization Name

String

The Model Customization name

modelCustomizationUuid

String

The Model Customization UUid

modelVersionId

String

The Model version id

modelUuid

String

The Model UUid

modelInvariantUuid

String

The Model Invariant UUid

modelInstanceName

String

The Model Instance name

CloudConfiguration Object

Attribute

Content

Description

lcpCloudRegionId

String

CloudRegion Id (in A&AI)

tenantId

String

Name of the Subscriber

RequestInfo Object

Attribute

Content

Description

Source

String

source of the request

billingAccountNumber

String

billingAccountNumber of the request

callbackUrl

String

callbackUrl of the request

correlator

String

correlator of the request

orderNumber

String

orderNumber of the request

productFamilyId

String

productFamilyId of the request

orderVersion

String

orderVersion of the request

instanceName

String

instanceName of the request

suppressRollback

String

suppressRollback of the request

requestorId

String

requestorId of the request

relatedInstance List

Attribute

Content

Description

relatedInstance

Object

relatedInstance Object

relatedInstance List

Attribute

Content

Description

instanceId

String

instanceId

modelInfo

Object

Content of modelInfo object.

RequestParameters Object

Attribute

Content

Description

UserParams

Array

The product family Id.

UserParams Object

Attribute

Content

Description

name

String

Tag name of attribute

value

String

Value of the tag

Delete VNF

Interface Definition

Description

URI

/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}

Operation Type

DELETE

Content-Type

application/json

Request Headers:

Header Name

Required

Description

Authorization

Y

Base64 encoded username:password

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

requestDetails

M

1

requestDetails Object

Content of requestDetails object.

RequestDetails Object

Attribute

Content

Description

modelInfo

modelInfo Object

Content of modelInfo object.

cloudConfiguration

cloudConfiguration Object

Content of cloudConfiguration object.

requestInfo

requestInfo Object

Content of requestInfo object.

requestParameters

requestParameters Object

Content of requestParameters object.

ModelInfo Object

Attribute

Content

Description

ModelType

String

Type of model

ModelName

String

Name of the Model

CloudConfiguration Object

Attribute

Content

Description

lcpCloudRegionId

String

CloudRegion Id (in A&AI)

tenantId

String

Name of the Subscriber

RequestInfo Object

Attribute

Content

Description

Source

String

source of the request

RequestParameters Object

Attribute

Content

Description

UserParams

Array

The product family Id.

UserParams Object

Attribute

Content

Description

name

String

Tag name of attribute

value

String

Value of the tag

Create CNF

Interface Definition

Description

URI

/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/cnfs

Operation Type

POST

Content-Type

application/json

Request Headers:

Header Name

Required

Description

Authorization

Y

Base64 encoded username:password

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

requestDetails

M

1

requestDetails Object

Content of requestDetails object.

RequestDetails Object

Attribute

Content

Description

modelInfo

modelInfo Object

Content of modelInfo object.

requestInfo

requestInfo Object

Content of requestInfo object.

requestParameters

requestParameters Object

Content of requestParameters object.

relatedInstanceList

relatedInstanceList Object

Content of relatedInstanceList object.

cloudConfiguration

cloudConfiguration Object

Content of cloudConfiguration object.

platform

platform Object

Content of platform object.

lineOfBusiness

lineOfBusiness Object

Content of lineOfBusiness object.

ModelInfo Object

Attribute

Content

Description

modelType

String

Type of model

modelInvariantId

String

The Model Invariant Id.

modelName

String

Name of the Model

modelVersion

String

Version of the model

modelCustomizationName

String

The Model Customization name

modelVersionId

String

The Model version id

CloudConfiguration Object

Attribute

Content

Description

lcpCloudRegionId

String

CloudRegion Id (in A&AI)

tenantId

String

Name of the Subscriber

cloudOwner

String

Name of the cloud owner

RequestInfo Object

Attribute

Content

Description

source

String

source of the request

productFamilyId

String

productFamilyId of the request

instanceName

String

instanceName of the request

suppressRollback

String

suppressRollback of the request

requestorId

String

requestorId of the request

relatedInstance List

Attribute

Content

Description

relatedInstance

Object

relatedInstance Object

relatedInstance List

Attribute

Content

Description

instanceId

String

instanceId

modelInfo

Object

Content of modelInfo object.

RequestParameters Object

Attribute

Content

Description

userParams

Array

The product family Id.

UserParams Object

Attribute

Content

Description

name

String

Tag name of attribute

value

String

Value of the tag

Delete CNF

Interface Definition

Description

URI

/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/cnfs/{cnfInstanceId}

Operation Type

DELETE

Content-Type

application/json

Request Headers:

Header Name

Required

Description

Authorization

Y

Base64 encoded username:password

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

requestDetails

M

1

requestDetails Object

Content of requestDetails object.

RequestDetails Object

Attribute

Content

Description

modelInfo

modelInfo Object

Content of modelInfo object.

cloudConfiguration

cloudConfiguration Object

Content of cloudConfiguration object.

requestInfo

requestInfo Object

Content of requestInfo object.

requestParameters

requestParameters Object

Content of requestParameters object.

ModelInfo Object

Attribute

Content

Description

modelType

String

Type of model

modelName

String

Name of the Model

modelVersionId

String

The Model version id

modelInvariantId

String

The Model Invariant Id.

modelVersion

String

Version of the model

modelCustomizationName

String

The Model Customization name

modelCustomizationId

String

The Model Customization Id.

CloudConfiguration Object

Attribute

Content

Description

lcpCloudRegionId

String

CloudRegion Id (in A&AI)

tenantId

String

Name of the Subscriber

cloudOwner

String

Name of the cloud owner

RequestInfo Object

Attribute

Content

Description

source

String

source of the request

requestId

String

request Id

RequestParameters Object

Attribute

Content

Description

UserParams

Array

The product family Id.

UserParams Object

Attribute

Content

Description

name

String

Tag name of attribute

value

String

Value of the tag

GET Orchestration Request

Interface Definition

Description

URI

/onap/so/infra/orchestrationRequests/v7/{request-id}

Operation Type

GET

Content-Type

application/json

Request Headers:

Header Name

Required

Description

Authorization

Y

Base64 encoded username:password

Response Body:

Attribute

Qualifier

Cardinality

Content

Description

request

M

1

request Object

Content of request object.

Request Object

Attribute

Qualifier

Cardinality

Content

Description

requestId

M

1

String

Request Id

startTime

M

1

request Object

Start time.

requestScope

M

1

request Object

Scope of the request.

requestType

M

1

request Object

Type of the request.

requestDetails

M

1

requestDetails Object

Type of the request.

requestStatus

M

1

requestStatus Object

Type of the request.

RequestDetails Object

Attribute

Content

Description

modelInfo

modelInfo Object

Content of modelInfo object.

subscriberInfo

subscriberInfo Object

Content of subscriberInfo object.

requestInfo

requestInfo Object

Content of requestInfo object.

requestParameters

requestParameters Object

Content of requestParameters object.

relatedInstanceList

relatedInstanceList Object

Content of relatedInstanceList object.

cloudConfiguration

cloudConfiguration Object

Content of cloudConfiguration object.

project

project Object

Content of project object.

owningEntity

owningEntity Object

Content of owningEntity object.

platform

platform Object

Content of platform object.

lineOfBusiness

lineOfBusiness Object

Content of lineOfBusiness object.

ModelInfo Object

Attribute

Content

Description

ModelType

String

Type of model

ModelInvariantId

String

The Model Invariant Id.

ModelNameVersionId

String

The modelname Version Id

ModelName

String

Name of the Model

ModelVersion

String

Version of the model

ModelCustomization Name

String

The Model Customization name

modelCustomizationUuid

String

The Model Customization UUid

modelVersionId

String

The Model version id

modelUuid

String

The Model UUid

modelInvariantUuid

String

The Model Invariant UUid

modelInstanceName

String

The Model Instance name

SubscriberInfo Object

Attribute

Content

Description

GlobalSubscriberId

String

Global customer Id (in A&AI)

SubscriberName

String

Name of the Subscriber

RequestInfo Object

Attribute

Content

Description

Source

String

source of the request

billingAccountNumber

String

billingAccountNumber of the request

callbackUrl

String

callbackUrl of the request

correlator

String

correlator of the request

orderNumber

String

orderNumber of the request

productFamilyId

String

productFamilyId of the request

orderVersion

String

orderVersion of the request

instanceName

String

instanceName of the request

suppressRollback

String

suppressRollback of the request

requestorId

String

requestorId of the request

RequestParameters Object

Attribute

Content

Description

SubscriptionServiceType

String

The service type of the Subscription

RequestStatus Object

Attribute

Content

Description

finishTime

String

Time

requestState

String

state of the request

statusMessage

String

statusMessage

percentProgress

String

percentage of progress

GET Orchestration Requests

Interface Definition

Description

URI

/onap/so/infra/orchestrationRequests/v7

Operation Type

GET

Content-Type

application/json

Request Headers:

Header Name

Required

Description

Authorization

Y

Base64 encoded username:password

Query Parameters:

Attribute

Required

Cardinality

Content

Description

filter

Y

1

String

Orchestration filter (scheme KeyTypes:Option:Value)

KeyTypes:

serviceInstanceId, serviceInstanceName, vnfInstanceId, pnfName, vnfInstanceName, vfModuleInstanceId, vfModuleInstanceName, volumeGroupInstanceId, volumeGroupInstanceName, networkInstanceId, networkInstanceName, configurationInstanceId, configurationInstanceName, lcpCloudRegionId, tenantId, modelType, requestorId, requestExecutionDate, startTime, requestScope

Option:

EQUALS (or any not null string), DOES_NOT_EQUAL [e.g. modelType:EQUALS:VNF, modelType:qwe:VNF] for KeyTypes equals startTime or requestExecutionDate: DOES_NOT_EQUAL, BETWEEN_DATES [e.g. startTime:BETWEEN_DATES:30-5-2000:30-5-2030]

includeCloudRequest

N

1

Boolean

Enable or disable cloud data request

format

N

1

String

Orchestration request format [DETAIL, STATUSDETAIL, SIMPLE, SIMPLENOTASKINFO]

Response Body:

Attribute

Qualifier

Cardinality

Content

Description

requestList

M

1

Array

Content of request List.

RequestList :

Attribute

Qualifier

Cardinality

Content

Description

request

M

1

request Object

Content of request object.

Request Object

Attribute

Qualifier

Cardinality

Content

Description

requestId

M

1

String

Request Id.

startTime

M

1

request Object

Start time.

requestScope

M

1

request Object

Scope of the request.

requestType

M

1

request Object

Type of the request.

requestDetails

M

1

requestDetails Object

Type of the request.

requestStatus

M

1

requestStatus Object

Type of the request.

RequestDetails Object

Attribute

Content

Description

modelInfo

modelInfo Object

Content of modelInfo object.

subscriberInfo

subscriberInfo Object

Content of subscriberInfo object.

requestInfo

requestInfo Object

Content of requestInfo object.

requestParameters

requestParameters Object

Content of requestParameters object.

relatedInstanceList

relatedInstanceList Object

Content of relatedInstanceList object.

cloudConfiguration

cloudConfiguration Object

Content of cloudConfiguration object.

project

project Object

Content of project object.

owningEntity

owningEntity Object

Content of owningEntity object.

platform

platform Object

Content of platform object.

lineOfBusiness

lineOfBusiness Object

Content of lineOfBusiness object.

ModelInfo Object

Attribute

Content

Description

ModelType

String

Type of model

ModelInvariantId

String

The Model Invariant Id.

ModelNameVersionId

String

The modelname Version Id

ModelName

String

Name of the Model

ModelVersion

String

Version of the model

ModelCustomization Name

String

The Model Customization name

modelCustomizationUuid

String

The Model Customization UUid

modelVersionId

String

The Model version id

modelUuid

String

The Model UUid

modelInvariantUuid

String

The Model Invariant UUid

modelInstanceName

String

The Model Instance name

SubscriberInfo Object

Attribute

Content

Description

GlobalSubscriberId

String

Global customer Id (in A&AI)

SubscriberName

String

Name of the Subscriber

RequestInfo Object

Attribute

Content

Description

Source

String

source of the request

billingAccountNumber

String

billingAccountNumber of the request

callbackUrl

String

callbackUrl of the request

correlator

String

correlator of the request

orderNumber

String

orderNumber of the request

productFamilyId

String

productFamilyId of the request

orderVersion

String

orderVersion of the request

instanceName

String

instanceName of the request

suppressRollback

String

suppressRollback of the request

requestorId

String

requestorId of the request

RequestParameters Object

Attribute

Content

Description

SubscriptionServiceType

String

The service type of the Subscription

RequestStatus Object

Attribute

Content

Description

finishTime

String

Time

requestState

String

state of the request

statusMessage

String

statusMessage

percentProgress

String

percentage of progress

CNF healthCheck

Interface Definition

Description

URI

/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/healthcheck

Operation Type

POST

Content-Type

application/json

Request Headers:

Header Name

Required

Description

Authorization

Y

Base64 encoded username:password

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

requestDetails

M

1

requestDetails Object

Content of requestDetails object.

RequestDetails Object

Attribute

Content

Description

modelInfo

modelInfo Object

Content of modelInfo object.

cloudConfiguration

cloudConfiguration Object

Content of cloudConfiguration object.

requestInfo

requestInfo Object

Content of requestInfo object.

relatedInstanceList

List

Content of relatedInstanceList.

ModelInfo Object

Attribute

Content

Description

ModelType

String

Type of model

ModelInvariantId

String

The Model Invariant Id.

ModelNameVersionId

String

The modelname Version Id

ModelName

String

Name of the Model

ModelVersion

String

Version of the model

ModelCustomization Name

String

The Model Customization name

CloudConfiguration Object

Attribute

Content

Description

lcpCloudRegionId

String

CloudRegion Id (in A&AI)

tenantId

String

Name of the Subscriber

RequestInfo Object

Attribute

Content

Description

InstanceName

String

The instance Name

Source

String

source of the request

SuppressRollback

Boolean

SuppressRollback

relatedInstance List

Attribute

Content

Description

relatedInstance

Object

relatedInstance Object

relatedInstance List

Attribute

Content

Description

instanceId

String

instanceId

modelInfo

Object

Content of modelInfo object.

instanceName

String

Name of the instance

e2eServiceInstances API

This API allows to manage:

  • e2eServiceInstances (create and delete)

  • operations on e2eServiceInstances (get)

Create E2E service instance

Interface Definition

Description

URI

/onap/so/infra/e2eServiceInstances/v3

Operation Type

POST

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

service

M

1

Service Object

Content of service object.

Service Object

Attribute

Content

Description

name

String

Service instance name.

description

String

Service instance description

serviceUuid

String

Model UUID

serviceInvariantUuid

String

Model Invariant UUID

gloabalSubscriberId

String

Customer Id

serviceType

String

service Type

parameters

Object

Parameter Object

Parameter Object

Attribute

Content

Description

locationConstraints

List of object

location infor for each vnf

resource

List of Resource

resource of service/resource

requestInputs

key-value map

input of service/resource

LocationConstraint Object

Attribute

Content

Description

vnfProfileId

String

Customization id for VNF

locationConstraints

Object

DC location info of VNF

VnfLocationConstraint Object

Attribute

Content

Description

vimId

String

VIM id from ESR definition

Resource Object

Attribute

Content

Description

resourceName

String

The resource name

resourceInvariantUuid

String

The resource invariant UUID.

resourceUuid

String

The resource UUID.

resourceCustomizationUuid

String

The resource customization UUID.

parameters

Object

Parameter of resource

Response:

Attribute

Qualifier

Cardinality

Content

Description

serviceId

M

1

String

Service instance ID.

operationId

M

1

String

Service Operation ID.

Delete E2E service instance

Interface Definition

Description

URI

/onap/so/infra/e2eServiceInstances/v3/{serviceId}

Operation Type

DELETE

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

globalSubscriberId

M

1

String

The subscriber id. It is defined in AAI

serviceType

M

1

String

The service type. It is defined in AAI

Response:

Attribute

Qualifier

Cardinality

Content

Description

operationId

M

1

String

The operation id.

Query E2E service operation result

Interface Definition

Description

URI

/onap/so/infra/e2eServiceInstances/v3/{serviceId}/operations/{operationId}

Operation Type

GET

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

serviceId

M

1

Service instance ID.

operationId

M

1

Service Operation ID.

Response:

Attribute

Qualifier

Cardinality

Content

Description

operation

M

1

String

Operation object identify.

operationId

M

1

String

Operation ID.

operation

M

1

String

Operation type, create|delete.

result

M

1

String

Operation result: finished, error, processing.

reason

M

1

String

If failing, need to write fail reason.

userId

M

1

String

Operation user ID.

operationContent

M

1

String

The status detail of current operation which is being executing.

progress

M

1

String

Current operation progress.

operateAt

M

1

String

Time that it starts to execute operation.

finishedAt

M

1

String

Time that it finished executing operation.

onap3gppServiceInstances API

Create a 3GPP service instance

Interface Definition

Description

URI

/onap/so/infra/3gppservices/v1/allocate

Operation Type

POST

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

allocate3gppService

M

1

allocate3gppService Object

Content of allocate3gppService object

Allocate3gppService Object

Attribute

Content

Description

name

String

Name of the service to allocate

modelInvariantUuid

String

Model Invariant UUID

modelUuid

String

Model UUID

gloabalSubscriberId

String

Customer Id

subscriptionServiceType

String

service Type for subscription

networkType

String

Network Type

additionalProperties

Object

Map of additional properties required for service allocation

Response:

Attribute

Qualifier

Cardinality

Content

Description

jobId

M

1

String

Job ID to be used to identify the status of the job

status

M

1

String

Status of the job

statusDescription

M

1

Object

Description on status in case of erroneous response

Terminate/Deallocate a 3GPP service instance

Interface Definition

Description

URI

/onap/so/infra/3gppservices/v1/deAllocate

Operation Type

DELETE

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

deAllocate3gppService

M

1

deAllocate3gppService Object

Content of deAllocate3gppService object

DeAllocate3gppService Object

Attribute

Content

Description

serviceInstanceID

String

ID of the service to terminate

gloabalSubscriberId

String

Customer Id

subscriptionServiceType

String

service Type for subscription

networkType

String

Network Type

additionalProperties

Object

Map of additional properties required for service deallocation

Response:

Attribute

Qualifier

Cardinality

Content

Description

jobId

M

1

String

Job ID to be used to identify the status of the job

status

M

1

String

Status of the job

statusDescription

M

1

Object

Description on status in case of erroneous response

Modify a 3GPP service instance

Interface Definition

Description

URI

/onap/so/infra/3gppservices/v1/modify

Operation Type

PUT

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

modify3gppService

M

1

modify3gppService Object

Content of modify3gppService object

Modify3gppService Object

Attribute

Content

Description

name

String

Name of the service to modify

serviceInstanceID

String

ID of the service to modify

gloabalSubscriberId

String

Customer Id

subscriptionServiceType

String

service Type for subscription

networkType

String

Network Type

additionalProperties

Object

Map of additional properties required for service modification

Response:

Attribute

Qualifier

Cardinality

Content

Description

jobId

M

1

String

Job ID to be used to identify the status of the job

status

M

1

String

Status of the job

statusDescription

M

1

Object

Description on status in case of erroneous response

Activate a 3GPP service instance

Interface Definition

Description

URI

/onap/so/infra/3gppservices/v1/activate

Operation Type

POST

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

activate3gppService

M

1

activate3gppService Object

Content of activate3gppService object

Activate3gppService Object

Attribute

Content

Description

serviceInstanceID

String

ID of the service to be activated

gloabalSubscriberId

String

Customer Id

subscriptionServiceType

String

service Type for subscription

networkType

String

Network Type

additionalProperties

Object

Map of additional properties required for service activation

Response:

Attribute

Qualifier

Cardinality

Content

Description

jobId

M

1

String

Job ID to be used to identify the status of the job

status

M

1

String

Status of the job

statusDescription

M

1

Object

Description on status in case of erroneous response

Deactivate a 3GPP service instance

Interface Definition

Description

URI

/onap/so/infra/3gppservices/v1/deActivate

Operation Type

POST

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

deActivate3gppService

M

1

deActivate3gppService Object

Content of deActivate3gppService object

DeActivate3gppService Object

Attribute

Content

Description

serviceInstanceID

String

ID of the service to be deactivated

gloabalSubscriberId

String

Customer Id

subscriptionServiceType

String

service Type for subscription

networkType

String

Network Type

additionalProperties

Object

Map of additional properties required for service deactivation

Response:

Attribute

Qualifier

Cardinality

Content

Description

jobId

M

1

String

Job ID to be used to identify the status of the job

status

M

1

String

Status of the job

statusDescription

M

1

Object

Description on status in case of erroneous response

Query subnet capability based on subnet types

Interface Definition

Description

URI

/onap/so/infra/3gppservices/v1/subnetCapabilityQuery

Operation Type

GET

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

querySubnetCapability

M

1

QuerySubnetCapability Object

Content of querySubnetCapability object

QuerySubnetCapability Object

Attribute

Content

Description

SubnetTypes

List of object

This describes the subnet types info

SubnetTypes Object

Attribute

Content

Description

SubnetTypes

enum

This describes the subnet types i.e., AN,AN_NF,CN,TN_FH,TN_MH,TN_BH

Response:

Attribute

Qualifier

Cardinality

Content

Description

ResponseDetails

M

1

Object

Successful operation with capabilities for the queried subnetTypes

API consumed by SO

_images/SO_1.png
SDC Client API
Get List of Existing Catalog Assets

Interface Definition

Description

URI

sdc/v1/catalog/{assetType}

Operation Type

GET

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

assetType

M

1

String

The requested asset type.valid values are resources/services.

service-type

M

1

String

Service Type

service-instance-id

M

1

String

Service Instance ID

Request Headers:

Header Name

Qualifier

Description

X-ECOMP-RequestID

N

request ID.If it is not sent it will be automatically generated by SDC on request receipt

X-ECOMP-InstanceID

Y

Instance ID

Accept

N

Determines the format of the body of the response. Valid values are : “application/json”

Authorization

Y

Base64 encoded username:password

Response:

Attribute

Qualifier

Cardinality

Content

Description

uuid

M

1

String

Global Asset Version Identifier: UUID generated by SDC per each version of the asset.

invariantUUID

M

1

String

UUID generated by SDC per each asset.

name

M

1

String

The name of the asset

version

M

1

String

The asset version in SDC catalog.

toscaModelURL

M

1

String

Relative asset’s URL. Should be used in REST GET API to download the asset’s CSAR.

category

M

1

String

Category of the asset.

subcategory

M

1

String

Sub-category of the asset

resourceType

M

1

String

The type of resource.resource types are VF, VL, CP, VFC, VFCMT, PNF.

lifecycleState

M

1

String

The lifecycle state of the asset

lastUpdaterUserId

M

1

String

UserID of the SDC designer who was the last to update the asset for this major version

Get Specific Asset Detailed Metadata

Interface Definition

Description

URI

/sdc/v1/catalog/{assetType}/{uuid}/metadata

Operation Type

GET

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

assetType

M

1

String

The requested asset type.valid values are resources/services.

uuid

M

1

String

Global Asset Version Identifier: UUID generated by SDC per each version of the asset.

Request Headers:

Header Name

Qualifier

Description

X-ECOMP-RequestID

N

request ID.If it is not sent it will be automatically generated by SDC on request receipt

X-ECOMP-InstanceID

Y

Instance ID

Accept

N

Determines the format of the body of the response. Valid values are : “application/json”

Authorization

Y

Base64 encoded username:password

Response:

Attribute

Qualifier

Content

Description

uuid

M

String

Global Asset Version Identifier: UUID generated by SDC per each version of the asset.

invariantUUID

M

String

UUID generated by SDC per each asset.

name

M

String

The name of the asset

version

M

String

The asset version in SDC catalog.

toscaModelURL

M

String

Relative asset’s URL. Should be used in REST GET API to download the asset’s CSAR.

description

M

String

Short description of the resource

lastUpdaterUserId

M

String

UserID of the SDC designer who was the last to update the asset for this major version

lastUpdaterFullName

M

String

UserID of the SDC designer who was the last to update the asset for this major version

category

M

String

Category of the asset

subCategory

M

String

Sub-category of the asset.

toscaResourceName

M

String

The full name of the asset

resourceType

M

String

The type of resource.

lifecycleState

M

String

The lifecycle state of the asset

resources

N

Object

Category of the asset

artifacts

M

Object

Category of the asset

Resource Object:

Attribute

Qualifier

Content

Description

resourceInstanceName

M

String

Logical Resource Instance Name.Unique Identifier of the instance of the specific resource in the service context.

resourceName

M

String

Resource Name

resourceInvariantUUID

M

String

The invariant UUID of the resource

resourceVersion

M

String

Resource Version

resoucreType

M

String

Resource Type

resourceUUID

M

String

Global UUID of the resource that specific artifact belongs to

artifacts

M

Object

Array of resource instance deployment artifacts.

Artifact Metadata Object:

Attribute

Qualifier

Content

Description

artifactName

M

String

Artifact File name

artifactLabel

M

String

Identifier of the artifact within the VF / Service.

artifactType

M

String

Artifact Type

artifactGroupType

M

String

Whether the artifact is informational or deployment.

artifactURL

M

String

Relative artifact’s URL.

artifactDescription

M

String

Artifact Description

artifactTimeout

N

Integer

Artifact Description

artifactChecksum

M

String

Base-64 encoded MD5 checksum of the artifact’s payload.

artifactUUID

M

String

Global UUID generated by SDC each time when artifact payload is updated.

artifactVersion

M

String

Service Version

generatedFromUUID

N

String

This attribute will be sent only in the case of an artifact generated on basis of other artifact

Download (CSAR of) Specific Asset

Interface Definition

Description

URI

/sdc/v1/catalog/{assetType}/{uuid}/artifacts/{artifactUUID}

Operation Type

GET

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

assetType

M

1

String

The requested asset type.valid values are resources/services.

Uuid

M

1

String

The uuid of the asset as published in the metadata

artifactUUID

M

1

String

The artifactUUID of the asset as published in the metadata

Response:

Header name

Qualifier

Description

Content-Type

M

Specifies the downloaded payload format as “ arbitrary data in binary format” .Valid value is : application/octet-stream

Content-Length

M

Streamed artifact payload size

Content-Disposition

M

Specifies the name of file to store the downloaded artifact’s payload ( RFC 2183) .

Inventory APIs
create or update an existing service-instance

Interface Definition

Description

URI

/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}

Operation Type

PUT

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

global-customer-id

M

1

String

Global Customer ID

service-type

M

1

String

Service Type

service-instance-id

M

1

String

Service Instance ID

Response:

Attribute

Qualifier

Cardinality

Content

Description

HTTP code

M

1

Integer

HTTP response code

delete an existing service-instance

Interface Definition

Description

URI

/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}

Operation Type

DELETE

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

global-customer-id

M

1

String

Global Customer ID

service-type

M

1

String

Service Type

service-instance-id

M

1

String

Service Instance ID

Response:

Attribute

Qualifier

Cardinality

Content

Description

HTTP code

M

1

Integer

HTTP response code

get service-instances

Interface Definition

Description

URI

/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances

Operation Type

GET

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

global-customer-id

M

1

String

Global Customer ID

service-type

M

1

String

Service Type

subscriber-name

O

1

String

Subscriber name

subscriber-type

O

1

String

Subscriber type

Response:

Attribute

Qualifier

Cardinality

Content

Description

service-instances

M

1

ServiceInstances

Service Instances

get service-instance

Interface Definition

Description

URI

/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}

Operation Type

GET

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

global-customer-id

M

1

String

Global Customer ID

service-type

M

1

String

Service Type

service-instance-id

M

1

String

Service instance ID

Response:

Attribute

Qualifier

Cardinality

Content

Description

service-instance

M

1

ServiceInstance

Service Instance

see node definition for valid relationships

Interface Definition

Description

URI

/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}/relationship-list/relationship

Operation Type

PUT

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

global-customer-id

M

1

String

Global Customer ID

service-type

M

1

String

Service Type

service-instance-id

M

1

String

Service instance ID

Response:

Attribute

Qualifier

Cardinality

Content

Description

HTTP code

M

1

Integer

HTTP response code

delete an existing relationship

Interface Definition

Description

URI

/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}/relationship-list/relationship

Operation Type

DELETE

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

global-customer-id

M

1

String

Global Customer ID

service-type

M

1

String

Service Type

service-instance-id

M

1

String

Service instance ID

Response:

Attribute

Qualifier

Cardinality

Content

Description

HTTP code

M

1

Integer

HTTP response code

VFC APIs
Create NS

Interface Definition

Description

URI

/ns

Operation Type

POST

Content-Type

application/json

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

context

M

1

Object

Context

csarId

M

1

String

csarId

nsName

M

1

String

Name of the NS

description

M

1

String

description

Response:

Attribute

Qualifier

Cardinality

Content

Description

nsInstanceId

M

1

String

nsInstanceId

Get NS

Interface Definition

Description

URI

/ns

Operation Type

GET

Content-Type

application/json

Response:

Attribute

Qualifier

Cardinality

Content

Description

nsInstanceId

M

1

String

nsInstanceId

nsName

M

1

String

The name of ns

description

M

1

String

description

nsdId

M

1

String

ID of ns

vnfInfo

M

1

Array

Vnf information

vlInfo

M

1

Array

vl information

vnffgInfo

M

1

Array

vnffg information

nsState

M

1

String

state of ns

vnfInfo Object:

Attribute

Qualifier

Cardinality

Content

Description

vnfInstanceId

M

1

String

vnfInstanceId

vnfInstanceName

M

1

String

vnfInstanceName

vnfdId

M

1

String

vnfdId

vlInfo Object:

Attribute

Qualifier

Cardinality

Content

Description

vlInstanceId

M

1

String

vlInstanceId

vlInstanceName

M

1

String

vlInstanceName

vldId

M

1

String

vldId

relatedCpInstanceId

M

1

Array

relatedCpInstanceId

relatedCpInstanceId Array:

Attribute

Qualifier

Cardinality

Content

Description

cpInstanceId

M

1

String

cpInstanceId

cpInstanceName

M

1

String

cpInstanceName

cpdId

M

1

String

cpdId

vnffgInfo Array:

Attribute

Qualifier

Cardinality

Content

Description

vnffgInstanceId

M

1

String

vnffgInstanceId

vnfId

M

1

String

vnfId

pnfId

M

1

String

pnfId

virtualLinkId

M

1

Array

virtualLinkId

cpId

M

1

Array

cpId

nfp

M

1

Array

nfp

Instantiate NS

Interface Definition

Description

URI

/ns/{nsInstanceId}/Instantiate

Operation Type

POST

Content-Type

application/json

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

LocationConstraints

M

1

Array

LocationConstraints

additionalParamForNs

M

1

String

additionalParamForNs

nsInstanceId

M

1

String

nsInstanceId

LocationConstraints Array:

Attribute

Qualifier

Cardinality

Content

Description

vnfProfileId

M

1

String

vnfProfileId

vimid

M

1

String

vimid

Response:

Attribute

Qualifier

Cardinality

Content

Description

jobId

M

1

String

jobId

Terminate NS

Interface Definition

Description

URI

/ns/{ns_instance_id}/terminate

Operation Type

POST

Content-Type

application/json

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

terminationType

M

1

String

terminationType

gracefulTerminationTimeout

M

1

String

gracefulTerminationTimeout

nsInstanceId

M

1

String

nsInstanceId

Response:

Attribute

Qualifier

Cardinality

Content

Description

jobId

M

1

String

jobId

Delete NS

Interface Definition

Description

URI

/ns/{ns_instance_id}

Operation Type

DELETE

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

nsInstanceId

M

1

String

nsInstanceId

MultiVIM API
Get token

https://developer.openstack.org/api-ref/identity/v3/#password-authentication-with-unscoped-authorization

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/identity/v3/auth/tokens

Operation Type

POST

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

nocatalog

O

1

string

The authentication response excludes the service catalog. By default, the response includes the service catalog.

name

O

1

string

The user name. Required if you do not specify the ID of the user. If you specify the user name, you must also specify the domain, by ID or name.

auth

M

1

object

An auth object.

user

M

1

object

A user object.

scope

O

1

string

The authorization scope, including either a project or a domain

password

M

1

object

The password object, contains the authentication information.

id

O

1

string

The ID of the user. Required if you do not specify the user name.

identity

M

1

object

An identity object.

methods

M

1

array

The authentication method. For password authentication, specify password.

Response:

Attribute

Content

Description

X-Subject-Token

String

The authentication token.

domain

object

A domain object, containing:

region_id

String

The ID of the region that contains the service endpoint.

methods

array

The authentication method. For password authentication, specify password.

roles

array

A list of role objects, each containing:

url

String

The endpoint URL.

region

String

The geographic location of the service endpoint.

token

object

A token object.

expires_at

String

The date and time when the token expires.

project

object

A project object, containing:

issued_at

String

The date and time when the token was issued.

catalog

array

A catalog object.

extras

object

A set of metadata key and value pairs, if any.

user

object

A user object.

audit_ids

array

A list of one or two audit IDs.

interface

String

The interface type, which describes the visibility of the endpoint.

endpoints

array

A list of endpoint objects.

type

String

The endpoint type.

id

String

The ID of the user. Required if you do not specify the user name.

name

String

The user name.

Create stack

https://developer.openstack.org/api-ref/orchestration/v1/#create-stack

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/heat/v1/{tenant-id}/stacks

Operation Type

POST

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

tenant_id

M

1

string

The UUID of the tenant. A tenant is also known as a project.

disable_rollback

O

1

boolean

Enables or disables deletion of all stack resources when stack creation fails.

environment

O

1

object

A JSON environment for the stack.

files

O

1

object

Supplies the contents of files referenced in the template or the environment.

parameters

O

1

object

Supplies arguments for parameters defined in the stack template.

stack_name

M

1

string

A name for the stack.

tags

O

1

string

One or more simple string tags to associate with the stack.

template

O

1

object

The stack template on which to perform the operation.

template_url

O

1

string

A URI to the location containing the stack template on which to perform the operation.

timeout_mins

O

1

integer

The timeout for stack creation in minutes.

Response:

Attribute

Content

Description

location

String

For asynchronous resource operations.

X-Openstack-Reqeuest-Id

object

A domain object, containing:

stack

String

The ID of the region that contains the service endpoint.

id

String

The authentication method. For password authentication, specify password.

links

String

The authentication method. For password authentication, specify password.

Get stack

https://developer.openstack.org/api-ref/orchestration/v1/#show-stack-details

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/heat/v1/{tenant-id}/stacks/{stack-name}/{stack-id}

Operation Type

GET

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

tenant_id

M

1

string

The UUID of the tenant. A tenant is also known as a project.

stack_name

M

1

string

The name of a stack.

stack_id

M

1

string

The UUID of the stack.

resolve_outputs

O

1

boolean

A boolean indicating whether the outputs section of a stack should be resolved.

Response:

Attribute

Content

Description

X-Openstack-Reqeuest-Id

String

A unique ID for tracking service request.

stack

Object

The stack object.

capabilities

array

List of stack capabilities for stack.

creation_time

String

The date and time when the resource was created.

deletion_time

String

The date and time when the resource was (soft-) deleted.

description

String

The description of the stack resource.

disable_rollback

boolean

Whether deletion of all stack resources when stack creation fails is enabled.

id

String

The UUID of the stack.

links

array

A list of URLs for the stack.

notification_topics

array

List of notification topics for stack.

outputs

array

A list of stack outputs.

parameters

object

A group of key-value pairs

parent

String

The stack ID of the parent stack, if this is a nested stack.

stack_name

String

A name for the stack.

stack_owner

String

The owner of the stack.

stack_status

String

The status of the stack.

stack_status_reason

String

The reason for the current status of the stack.

stack_user_project_id

String

The project UUID of the stack user.

tags

array

The stack tags.

template_description

String

The description of the stack template.

timeout_mins

integer

The timeout for stack creation in minutes.

updated_time

String

The date and time when the object was updated.

Delete stack

https://developer.openstack.org/api-ref/orchestration/v1/#show-stack-details

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/heat/v1/{tenant-id}/stacks/{stack-name}/{stack-id}

Operation Type

DELETE

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

tenant_id

M

1

string

The UUID of the tenant. A tenant is also known as a project.

stack_name

M

1

string

The name of a stack.

stack_id

M

1

string

The UUID of the stack.

Create server

https://developer.openstack.org/api-ref/compute/#create-server

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/nova/v2.37/{tenant_id}/servers

Operation Type

POST

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

server

M

1

object

A server object.

name

M

1

string

The server name.

flavorRef

M

1

string

The flavor reference, as an ID (including a UUID) or full URL

imageRef

M

1

string

The UUID of the image to use for your server instance

security_groups

O

1

array

One or more security groups.

metadata

O

1

object

Metadata key and value pairs.

accessIPv4

O

1

string

IPv4 address that should be used to access this server.

accessIPv6

O

1

string

IPv6 address that should be used to access this server.

adminPass

O

1

string

The administrative password of the server.

user_data

O

1

string

Configuration information or scripts to use upon launch.

availability_zone

O

1

string

The availability zone from which to launch the server.

networks

M

1

object

A networks object.

networks.uuid

O

1

string

To provision the server instance with a NIC for a network

networks.port

O

1

string

To provision the server instance with a NIC for an already existing port

networks.fixed_ip

O

1

string

A fixed IPv4 address for the NIC

networks.tag

O

1

string

A device role tag that can be applied to a network interface.

personality

O

1

array

The file path and contents, text only, to inject into the server at launch.

block_device_mapping_v2

O

1

array

Enables fine grained control of the block device mapping for an instance.

block_device_mapping_v2.device_name

M

1

string

A path to the device for the volume that you want to use to boot the server.

block_device_mapping_v2.source_type

M

1

string

The source type of the volume.

block_device_mapping_v2.destination_type

O

1

string

Defines where the volume comes from.

block_device_mapping_v2.delete_on_termination

O

1

string

To delete the boot volume when the server is destroyed, specify true.

block_device_mapping_v2.guest_format

M

1

string

Specifies the guest server disk file system format, such as ephemeral or swap.

block_device_mapping_v2.boot_index

M

1

string

Defines the order in which a hypervisor tries devices

block_device_mapping_v2.uuid

O

1

string

This is the uuid of source resource.

block_device_mapping_v2.tag

O

1

string

A device role tag that can be applied to a block device.

block_device_mapping_v2.disk_bus

O

1

string

Disk bus type, some hypervisors (currently only libvirt) support specify this parameter

config_drive

O

1

boolean

Indicates whether a configuration drive enables metadata injection.

key_name

O

1

string

Key pair name.

os:scheduler_hints

O

1

object

The dictionary of data to send to the scheduler.

OS-DCF:diskConfig

O

1

string

Controls how the API partitions the disk when you create, rebuild, or resize servers.

description

O

1

string

A free form description of the server.

tags

O

1

array

A list of tags.

Response:

Attribute

Content

Description

Location

String

The location URL of the server.

server

object

A server object.

id

String

The UUID of the server.

links

array

Links to the resources in question.

OS-DCF:diskConfig

String

Disk configuration.

security_groups

array

One or more security groups objects.

security_groups.name

String

The security group name.

adminPass

String

The administrative password for the server.

Delete server

https://developer.openstack.org/api-ref/compute/#delete-server

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/nova/v2.1/{tenant_id}/servers/{server_id}

Operation Type

DELETE

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

server_id

M

1

string

The UUID of the server.

Create Keypair

https://developer.openstack.org/api-ref/compute/#create-or-import-keypair

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/nova/v2.1/{tenant_id}/os-keypairs

Operation Type

POST

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

keypair

M

1

Object

Keypair object

name

M

1

string

A name for the keypair which will be used to reference it later.

public_key

O

1

string

The public ssh key to import. If you omit this value, a keypair is generated for you.

type

O

1

string

The type of the keypair.

user_id

O

1

string

The user_id for a keypair.

Response:

Attribute

Content

Description

keypair

object

Keypair object

name

String

A name for the keypair which will be used to reference it later.

public_key

String

The keypair public key.

fingerprint

String

The fingerprint for the keypair.

user_id

String

The user_id for a keypair.

private_key

String

If you do not provide a public key on create

type

String

The type of the keypair.

Delete Keypair

https://developer.openstack.org/api-ref/compute/#delete-keypair

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/nova/v2.1/{tenant_id}/os-keypairs/{keypair-id}

Operation Type

DELETE

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

keypair_name

M

1

String

The keypair name.

user_id

O

1

String

This allows administrative users to operate key-pairs of specified user ID.

Create Network

https://developer.openstack.org/api-ref/network/v2/?expanded=create-network-detail#create-network

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/networks

Operation Type

POST

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

network

M

1

Object

A network object.

admin_state_up

O

1

boolean

The administrative state of the network, which is up (true) or down (false).

dns_domain

O

1

string

A valid DNS domain.

mtu

O

1

integer

The maximum transmission unit (MTU) value to address fragmentation.

name

O

1

string

Human-readable name of the network.

port_security_enabled

O

1

boolean

The port security status of the network.

project_id

O

1

string

The ID of the project that owns the resource.

provider:network_type

O

1

string

The type of physical network that this network should be mapped to.

provider:physical_network

O

1

string

The physical network where this network should be implemented.

provider:segmentation_id

O

1

integer

The ID of the isolated segment on the physical network.

qos_policy_id

O

1

string

The ID of the QoS policy.

router:external

O

1

boolean

Indicates whether this network can provide floating IPs via a router.

segments

O

1

array

A list of provider segment objects.

shared

O

1

boolean

Indicates whether this network is shared across all tenants.

tenant_id

O

1

string

The ID of the project that owns the resource.

vlan_transparent

O

1

boolean

Indicates the VLAN transparency mode of the network,

description

O

1

string

A human-readable description for the resource.

is_default

O

1

boolean

The network is default or not.

availability_zone_hints

O

1

array

The availability zone candidate for the network.

Response:

Attribute

Content

Description

network

object

A network object.

admin_state_up

boolean

The administrative state of the network, which is up (true) or down (false).

availability_zone_hints

array

The availability zone candidate for the network.

availability_zones

array

The availability zone for the network.

created_at

String

Time at which the resource has been created (in UTC ISO8601 format).

dns_domain

String

A valid DNS domain.

id

String

The ID of the network.

ipv4_address_scope

String

The ID of the IPv4 address scope that the network is associated with.

ipv6_address_scope

String

The ID of the IPv6 address scope that the network is associated with.

mtu

integer

The maximum transmission unit (MTU) value to address fragmentation.

name

String

Human-readable name of the network.

port_security_enabled

boolean

The port security status of the network.

project_id

String

The ID of the project.

provider:network_type

String

The type of physical network that this network is mapped to.

provider:physical_network

String

The physical network where this network is implemented.

provider:segmentation_id

integer

The ID of the isolated segment on the physical network.

qos_policy_id

String

The ID of the QoS policy.

revision_number

integer

The revision number of the resource.

router:external

boolean

Indicates whether this network can provide floating IPs via a router.

segments

array

A list of provider segment objects.

shared

boolean

Indicates whether this network is shared across all tenants.

status

String

The network status. Values are ACTIVE, DOWN, BUILD or ERROR.

subnets

array

The associated subnets.

tenant_id

String

The ID of the project.

updated_at

String

Time at which the resource has been updated (in UTC ISO8601 format).

vlan_transparent

boolean

Indicates the VLAN transparency mode of the network.

description

String

A human-readable description for the resource.

is_default

boolean

The network is default pool or not.

Delete Network

https://developer.openstack.org/api-ref/network/v2/?expanded=create-network-detail#delete-network

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/networks/{network-id}

Operation Type

DELETE

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

network_id

M

1

String

The ID of the network.

Create Subnet

https://developer.openstack.org/api-ref/network/v2/?expanded=create-network-detail,create-subnet-detail#create-subnet

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/subnets

Operation Type

POST

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

subnet

M

1

string

A subnet object.

tenant_id

O

1

string

The ID of the project that owns the resource.

project_id

O

1

string

The ID of the project that owns the resource.

name

O

1

string

Human-readable name of the resource.

enable_dhcp

O

1

boolean

Indicates whether dhcp is enabled or disabled for the subnet.

network_id

M

1

string

The ID of the network to which the subnet belongs.

dns_nameservers

O

1

array

List of dns name servers associated with the subnet.

allocation_pools

O

1

array

Allocation pools with start and end IP addresses for this subnet.

host_routes

O

1

array

Additional routes for the subnet.

ip_version

M

1

integer

The IP protocol version. Value is 4 or 6.

gateway_ip

O

1

string

Gateway IP of this subnet.

cidr

M

1

string

The CIDR of the subnet.

description

O

1

string

A human-readable description for the resource.

ipv6_address_mode

O

1

string

The IPv6 address modes specifies mechanisms for assigning IP addresses.

ipv6_ra_mode

O

1

string

The IPv6 router advertisement specifies whether the networking service

segment_id

O

1

string

The ID of a network segment the subnet is associated with.

subnetpool_id

O

1

string

The ID of the subnet pool associated with the subnet.

use_default_subnetpool

O

1

boolean

Whether to allocate this subnet from the default subnet pool.

service_types

O

1

array

The service types associated with the subnet.

Response:

Attribute

Content

Description

subnet

string

A subnet object.

id

string

The ID of the subnet.

tenant_id

string

The ID of the project.

project_id

string

The ID of the project.

name

String

Human-readable name of the resource.

enable_dhcp

boolean

Indicates whether dhcp is enabled or disabled for the subnet.

network_id

String

The ID of the network to which the subnet belongs.

dns_nameservers

array

List of dns name servers associated with the subnet.

allocation_pools

array

Allocation pools with start and end IP addresses for this subnet.

host_routes

array

Additional routes for the subnet.

ip_version

integer

The IP protocol version. Value is 4 or 6.

gateway_ip

string

Gateway IP of this subnet.

cidr

string

The CIDR of the subnet.

created_at

string

Time at which the subnet has been created.

description

string

A human-readable description for the resource.

ipv6_address_mode

string

The IPv6 address modes specifies mechanisms for assigning IP addresses.

ipv6_ra_mode

string

The IPv6 router advertisement specifies whether the networking service

revision_number

integer

The revision number of the resource.

service_types

string

The service types associated with the subnet.

subnetpool_id

string

The ID of the subnet pool associated with the subnet.

segment_id

string

The ID of a network segment the subnet is associated with.

updated_at

string

Time at which the subnet has been updated.

Delete Subnet

https://developer.openstack.org/api-ref/networking/v2/?expanded=create-network-detail,delete-subnet-detail#delete-subnet

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/subnets/{subnet-id}

Operation Type

DELETE

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

subnet_id

M

1

String

The ID of the subnet.

Create Port

https://developer.openstack.org/api-ref/networking/v2/#create-port

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/ports

Operation Type

POST

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

port

M

1

object

A port object.

admin_state_up

O

1

boolean

The administrative state of the resource.

allowed_address_pairs

O

1

array

A set of zero or more allowed address pairs.

binding:host_id

O

1

string

The ID of the host where the port resides.

binding:profile

O

1

string

A dictionary that enables the application running on the specific host

binding:vnic_type

O

1

string

The type of vNIC which this port should be attached to.

description

O

1

string

A human-readable description for the resource.

device_id

O

1

string

The ID of the device that uses this port.

device_owner

O

1

string

The entity type that uses this port.

dns_domain

O

1

string

A valid DNS domain.

dns_name

O

1

string

A valid DNS name.

extra_dhcp_opts

O

1

array

A set of zero or more extra DHCP option pairs.

fixed_ips

O

1

array

The IP addresses for the port.

mac_address

O

1

string

The MAC address of the port.

name

O

1

string

Human-readable name of the resource.

network_id

M

1

string

The ID of the attached network.

port_security_enabled

O

1

boolean

The port security status.

project_id

O

1

string

The ID of the project that owns the resource.

qos_policy_id

O

1

string

QoS policy associated with the port.

security_groups

O

1

array

The IDs of security groups applied to the port.

tenant_id

O

1

string

The ID of the project that owns the resource.

Response:

Attribute

Content

Description

port

object

A port object.

admin_state_up

boolean

The administrative state of the resource.

allowed_address_pairs

array

A set of zero or more allowed address pairs.

binding:host_id

string

The ID of the host where the port resides.

binding:profile

String

A dictionary that enables the application running on the specific host

binding:vif_details

object

A dictionary which contains additional information on the port.

binding:vif_type

String

The type of which mechanism is used for the port.

binding:vnic_type

string

The type of vNIC which this port should be attached to.

created_at

string

Time at which port has been created.

data_plane_status

string

Status of the underlying data plane of a port.

description

string

A human-readable description for the resource.

device_id

string

The ID of the device that uses this port.

device_owner

string

The entity type that uses this port.

dns_assignment

object

Data assigned to a port by the Networking internal DNS

dns_domain

string

A valid DNS domain.

dns_name

string

A valid DNS name.

extra_dhcp_opts

array

A set of zero or more extra DHCP option pairs.

fixed_ips

array

The IP addresses for the port.

id

string

The ID of the resource.

ip_allocation

string

Indicates when ports use either deferred, immediate or no IP allocation (none)

mac_address

string

The MAC address of the port.

name

string

Human-readable name of the resource.

network_id

string

The ID of the attached network.

port_security_enabled

boolean

The port security status.

project_id

string

The ID of the project.

revision_number

integer

The revision number of the resource.

qos_policy_id

string

The ID of the QoS policy associated with the port.

security_groups

array

The IDs of security groups applied to the port.

status

string

The port status. Values are ACTIVE, DOWN, BUILD and ERROR.

tenant_id

string

The ID of the project.

updated_at

string

Time at which port has been updated.

Delete Port

https://developer.openstack.org/api-ref/network/v2/#delete-port

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/ports/{port-id}

Operation Type

DELETE

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

port_id

M

1

String

The ID of the port.

Create Security Group

https://developer.openstack.org/api-ref/network/v2/#create-security-group

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/security-groups

Operation Type

POST

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

security_group

M

1

object

A security_group object.

tenant_id

M

1

string

The ID of the project.

project_id

M

1

string

The ID of the project.

description

O

1

string

A human-readable description for the resource.

name

M

1

string

Human-readable name of the resource.

Response:

Attribute

Content

Description

security_group

object

A security_group object.

id

string

The ID of the security group.

tenant_id

string

The ID of the project.

project_id

string

The ID of the project.

created_at

string

Time at which the resource has been created (in UTC ISO8601 format).

updated_at

string

Time at which the resource has been updated (in UTC ISO8601 format).

revision_number

integer

The revision number of the resource.

name

string

Human-readable name of the resource.

description

string

A human-readable description for the resource.

security_group_rules

array

A list of security_group_rule objects.

Delete security group

https://developer.openstack.org/api-ref/network/v2/#delete-security-group

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/security-groups/{security-group-id}

Operation Type

DELETE

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

security_group_id

M

1

String

The ID of the security group.

Create Security Group Rule

https://developer.openstack.org/api-ref/network/v2/#create-security-group-rule

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/security-group-rules

Operation Type

POST

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

security_group_rule

M

1

object

A security_group_rule object.

remote_group_id

O

1

string

The remote group UUID to associate with this security group rule.

direction

M

1

string

Ingress or egress, which is the direction in which the metering rule is applied.

protocol

M

1

string

The IP protocol can be represented by a string, an integer, or null.

ethertype

O

1

string

Must be IPv4 or IPv6, and addresses represented in CIDR must match the ingress or egress rules.

port_range_max

O

1

integer

The maximum port number in the range that is matched by the security group rule.

security_group_id

M

1

string

The security group ID to associate with this security group rule.

port_range_min

O

1

integer

The minimum port number in the range that is matched by the security group rule.

remote_ip_prefix

M

1

string

The remote IP prefix to associate with this metering rule packet.

description

O

1

string

A human-readable description for the resource. Default is an empty string.

Response:

Attribute

Content

Description

security_group_rule

object

A security_group_rule object.

remote_group_id

string

The remote group UUID to associate with this security group rule.

direction

string

Ingress or egress, which is the direction in which the metering rule is applied.

protocol

string

The IP protocol can be represented by a string, an integer, or null.

ethertype

string

Must be IPv4 or IPv6, and addresses represented in CIDR must match the ingress or egress rules.

port_range_max

integer

The maximum port number in the range that is matched by the security group rule.

security_group_id

string

The security group ID to associate with this security group rule.

tenant_id

string

The ID of the project.

project_id

string

The ID of the project.

port_range_min

integer

The minimum port number in the range that is matched by the security group rule.

remote_ip_prefix

string

The remote IP prefix to associate with this metering rule packet.

revision_number

integer

The revision number of the resource.

id

string

The ID of the security group rule.

description

string

A human-readable description for the resource.

Delete security group

https://developer.openstack.org/api-ref/networking/v2/#delete-security-group-rule

Interface Definition

Description

URI

http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/security-group-rules/{security-group-rule-id}

Operation Type

DELETE

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

security_group_rule_id

M

1

String

The ID of the security group rule.

Policy API
Create a dictionary item

Interface Definition

Description

URI

/createDictionaryItem

Operation Type

PUT

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

dictionory

M

1

String

dictionaryJson

M

1

String

dictionaryType

M

1

String

requestId

M

1

String

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Create Policy

Interface Definition

Description

URI

/createPolicy

Operation Type

PUT

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

attributes

M

1

Object

set of attributes in key value pair

configBody

M

1

String

configBodyType

M

1

String

configName

M

1

String

ecompName

M

1

String

policyClass

M

1

String

policyConfigType

M

1

String

policyDescription

M

1

String

policyName

M

1

String

requestID

M

1

String

request ID

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Delete Policy

Interface Definition

Description

URI

/deletePolicy

Operation Type

DELETE

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

deleteCondition

M

1

String

pdpGroup

M

1

String

policyComponent

M

1

String

policyName

M

1

String

policyType

M

1

String

requestID

M

1

String

request ID

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Get Configuration

Interface Definition

Description

URI

/getConfig

Operation Type

POST

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

configAttributes

M

1

String

configName

M

1

String

ecompName

M

1

String

policyName

M

1

String

unique

M

1

Boolean

requestID

M

1

String

request ID

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Get Decision

Interface Definition

Description

URI

/getDecision

Operation Type

POST

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

decisionAttributes

M

1

Object

ecompComponentName

M

1

String

requestID

M

1

String

request ID

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Response Parameters:

Attribute

Qualifier

Cardinality

Content

Description

decision

N

1

String

details

N

1

String

Get Dictionary Items

Interface Definition

Description

URI

/getDictionaryItems

Operation Type

POST

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

dictionary

N

1

String

dictionaryJson

N

1

String

dictionaryType

N

1

String

requestID

M

1

String

request ID

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Response Parameters:

Attribute

Qualifier

Cardinality

Content

Description

dictionaryData

N

1

Object

dictionaryJson

N

1

Object

responseCode

N

1

Integer

responseMessage

N

1

Object

Get Metrics

Interface Definition

Description

URI

/getMetrics

Operation Type

GET

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Response Parameters:

Attribute

Qualifier

Cardinality

Content

Description

metricsTotal

N

1

Integer

papMetrics

N

1

Integer

pdpMetrics

N

1

Integer

responseCode

N

1

Object

responseMessage

N

1

String

Get Notification

Interface Definition

Description

URI

/getNotification

Operation Type

POST

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Response Parameters:

Attribute

Qualifier

Cardinality

Content

Description

metricsTotal

N

1

Integer

papMetrics

N

1

Integer

pdpMetrics

N

1

Integer

responseCode

N

1

Object

responseMessage

N

1

String

List Configuration

Interface Definition

Description

URI

/listConfiguration

Operation Type

POST

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

configAttributes

N

1

Object

configName

N

1

String

ecompName

N

1

String

policyName

N

1

String

requestID

N

1

String

unique

N

1

Boolean

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Import policy

Interface Definition

Description

URI

/policyEngineImport

Operation Type

POST

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

importParameterJson

Y

1

String

file

Y

1

File

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Push Policy

Interface Definition

Description

URI

/pushPolicy

Operation Type

PUT

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

pdpGroup

N

1

String

policyName

N

1

String

policyType

N

1

String

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Send Event

Interface Definition

Description

URI

/sendEvent

Operation Type

POST

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

eventAttributes

N

1

Object

requestID

N

1

String

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Send Heartbeat

Interface Definition

Description

URI

/sendEvent

Operation Type

POST

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

notificationTopic

Y

1

String

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Stop Notification

Interface Definition

Description

URI

/stopNotification

Operation Type

POST

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

notificationTopic

Y

1

String

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Update Dictionary

Interface Definition

Description

URI

/updateDictionaryItem

Operation Type

PUT

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

dictionary

N

1

String

dictionaryJson

N

1

String

dictionaryType

N

1

String

requestID

N

1

String

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

Update Policy

Interface Definition

Description

URI

/updatePolicy

Operation Type

PUT

Request Headers:

Header Name

Qualifier

Description

ClientAuth

Y

encoded client authentication details

X-ECOMP-RequestID

N

Request ID to track the requests

Environment

Y

execution environments

Authorization

Y

Base64 encoded username:password

Request Parameters:

Attribute

Qualifier

Cardinality

Content

Description

attributes

N

1

Object

configBody

N

1

String

configBodyType

N

1

String

configName

N

1

String

ecompName

N

1

String

policyClass

N

1

String

policyConfigType

N

1

String

policyDescription

N

1

String

policyName

N

1

String

requestID

N

1

String

HTTP Response Code:

HTTP CODE

Description

200

successful

400

Invalid Request

401

Unauthorized

500

Error

OOF/HAS create update API

Interface Definition

Description

URI

/api/oof/v1/placement

Operation Type

POST

Request Parameters:

Attribute

Required

Cardinality

Content

Description

requestInfo

Y

1

Object

The content of the RequestInfo object.

placementInfo

Y

1

Object

The Content of the PlacementInfo object.

licenseInfo

N

1

Object

The Content of the LicenseInfo object.

serviceInfo

Y

1

Object

The Content of the ServiceInfo object.

Attribute

Required

Cardinality

Content

Description

transactionId

Y

1

String

A unique ID to track an ONAP transaction.

requestId

Y

1

String

A unique ID to track multiple requests.

callbackUrl

Y

1

String

The end point of a callback service where recommendations are posted.

callbackHeader

N

1

String

The header information a client expecting in a async callback.

sourceId

Y

1

String

The unique ID of a client making an optimization call.

requestType

Y

1

String

The type of a request

numSolutions

N

1

Integer

Expected number of solutions.

optimizers

Y

1..N

List of Strings

A list of optimization services.

timeout

N

1

Integer

A tolerance window (in secs) for expecting solutions. Default is 600 secs.

PlacementInfo Object

Attribute

Required

Cardinality

Content

Description

requestParameters

C

1

String

A JSON object conaining service and customer-specific data. A client or service designer is required to specify the parameters of interest for a given service and their location in the JSON blob through optimization query policies. This attribute is only required if a request contains service or customer-specific information.

placementDemands

Y

1..N

List of PlacementDemand Object

The resource information for a placement service.

subscriberInfo

N

1

Object

The information of a service subscriber.

PlacementDemand Object

Attribute

Required

Cardinality

Content

Description

resourceModuleName

Y

1

String

A resource name as defined in a service model.

serviceResourceId

Y

1

String

A unique resource Id with a local scope between client and OOF.

tenantId

N

1

String

A tenant Id as defined in the ordering system.

resourceModelInfo

Y

1

Object

Resource model information as defined in SDC.

existingCandidates

N

1..N

List of Candidates Objects

The existing placement information of a resource.

excludedCandidates

N

1..N

List of Candidates Objects

Candidates that need to be excluded from solutions.

requiredCandidates

N

1..N

List of Candidates Objects

Candidates that must be included in solutions.

SubscriberInfo Object

Attribute

Required

Cardinality

Content

Description

globalSubscriberId

Y

1

String

An ID of a subscriber.

subscriberName

Y

1.N

String

The name of a subscriber. If the name is not known, the value must be ‘unknown’.

subscriberCommonSiteId

N

1

String

Id representing a subscriber location.

ModelMetaData Object

Attribute

Required

Cardinality

Content

Description

modelInvariantId

Y

1

String

A model invariant Id as defined in a service model.

modelVersionId

Y

1

String

A unique model Id as defined in a service model.

modelName

N

1

String

A model name as defined in a service model.

modelType

N

1

String

A model type as defined in a service model.

modelVersion

N

1

String

A model version as defined in a service model.

modelCustomizationName

N

1

String

A model customization name as defined in a service model.

Candidates Object

Attribute

Required

Cardinality

Content

Description

identifierType

Y

1

String

The type of a candidate.

identifiers

Y

1..N

List

A list of identifiers.

cloudOwner

C

1

String

The name of a cloud owner. Only required if identifierType is cloud_region_id.

ServiceInfo Object

Attribute

Required

Cardinality

Content

Description

serviceInstanceId

Y

1

String

A service instance id associated with a request.

modelInfo

Y

1

ModelMetaData Object

A list of identifiers.

serviceName

Y

1

String

The name of a service

LicenseInfo Object

Attribute

Required

Cardinality

Content

Description

licenseDemands

Y

1..N

List of LicenseDemands Object

A list of resources for license selection.

LicenseDemand Object

Attribute

Required

Cardinality

Content

Description

resourceModuleName

Y

1

String

A resource name as defined in a service model.

serviceResourceId

Y

1

String

A unique resource Id with a local scope between client and OOF.

resourceModelInfo

Y

1

ModelMetaData Object

Resource model information as defined in a service model.

existingLicenses

N

1

LicenseModel Object

Existing license information assigned to a resource.

LicenseModel Object

Attribute

Required

Cardinality

Content

Description

entitlementPoolUUID

Y

1..N

List

Entitlement pool UUIDs associated with a resource.

licenseKeyGroupUUID

Y

1..N

List

License key groups associated with a resource.

Response Body

Attribute

Required

Cardinality

Content

Description

requestId

Y

1

String

A unique Id for an ONAP transaction.

transactionId

Y

1

String

A unique ID to track multiple requests associated with a transaction.

statusMessage

N

1

String

Reasoning if a requestStatus is failed.

requestStatus

Y

1

String

The status of a request.

ManagedObject3gppServiceInstances API

Create a ManagedObject3gppServiceInstances

Interface Definition

Description

URI

onap/so/infra/moi/api/rest/v1/NetworkSliceSubnet/$NSSID

Operation Type

PUT

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

ManagedObject3gppServiceInstances

M

1

allocateMOI

Content of allocate3gppMOI object

ManagedObject3gppServiceInstances Object

Attribute

Content

Description

attributes

List

List of Slice Profile Attribute

SliceProfileList Object

Attribute

Content

Description

plmnInfoList

List

Contains plmnInfoList

RANSliceSubnetProfile

Object

Contains RAN Attributes Object

plmnInfoList Object

Attribute

Content

Description

plmnId

Object

Contains plmnData

snssai

Object

Contains snssai data

plmnId Object

Attribute

Content

Description

mcc

integer

Contains mcc value

mnc

integer

Contains mcc value

snssai Object

Attribute

Content

Description

sst

string

Contains sst

sd

string

Contains sd

RAN Attribute Object

Attribute

Content

Description

coverageAreaTAList

integer

Contains coverageAreaTAList

latency

integer

desired latency of slice

areaTrafficCapDL

integer

Contains areaTrafficCapDL

resourceSharingLevel

string

describes slice sharing level

serviceType

string

describes serviceType

maxNumberofUEs

integer

describes maxNumberofUEs

Response:

Attribute

Qualifier

Cardinality

Content

Description

requestReferences

M

1

Response Object

Content of Response object.

Response Object

Attribute

Qualifier

Cardinality

Content

Description

requestId

M

1

String

Request Id.

requestDetails

M

1

requestDetails Object

Type of the request.

instanceId

M

1

requestStatus Object

Type of the request.

Terminate/Deallocate a MOI

Interface Definition

Description

URI

onap/so/infra/moi/api/rest/v1/NetworkSliceSubnet/$NSSID

Operation Type

DELETE

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

ManagedObject3gppServiceInstances

M

1

deleteMOI

Content of deleteMOI object

ManagedObject3gppServiceInstances Object

Attribute

Content

Description

attributes

List

List of Slice Profile Attribute

SliceProfileList Object

Attribute

Content

Description

sliceProfileId

string

slice profile id to be deleted

Response

Attribute

Qualifier

Cardinality

Content

Description

requestReferences

M

1

Response Object

Content of Response object.

Response Object

Attribute

Qualifier

Cardinality

Content

Description

requestId

M

1

String

Request Id.

requestDetails

M

1

requestDetails Object

Type of the request.

instanceId

M

1

requestStatus Object

Type of the request.

Modify a 3GPP service instance

Interface Definition

Description

URI

onap/so/infra/moi/api/rest/v1/NetworkSliceSubnet/$NSSID

Operation Type

PATCH

Content-Type

application/json

Request Body:

Attribute

Qualifier

Cardinality

Content

Description

ManagedObject3gppServiceInstances

M

1

modifyMOI

Content of modifyMOI object

ManagedObject3gppServiceInstances Object

Attribute

Content

Description

attributes

List

List of Slice Profile Attribute

SliceProfileList Object

Attribute

Content

Description

sliceProfileId

string

slice profile id to be modify

RANSliceSubnetProfile

Object

Contains RAN Attributes Object

RAN Attribute Object

Attribute

Content

Description

coverageAreaTAList

integer

Contains coverageAreaTAList

latency

integer

desired latency of slice

areaTrafficCapDL

integer

Contains areaTrafficCapDL

resourceSharingLevel

string

describes slice sharing level

serviceType

string

describes serviceType

maxNumberofUEs

integer

describes maxNumberofUEs

Response:

Attribute

Qualifier

Cardinality

Content

Description

requestReferences

M

1

Response Object

Content of Response object.

Response Object

Attribute

Qualifier

Cardinality

Content

Description

requestId

M

1

String

Request Id.

requestDetails

M

1

requestDetails Object

Type of the request.

instanceId

M

1

requestStatus Object

Type of the request.

SO Developer Information

Building SO

Build software with unit tests

cd $HOME/onap/workspace/SO/libs

$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install

cd $HOME/onap/workspace/SO/so

$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install

Build software without unit tests

cd $HOME/onap/workspace/SO/libs

$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml -DskipTests -Dmaven.test.skip=true clean install

cd $HOME/onap/workspace/SO/so

$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml -DskipTests -Dmaven.test.skip=true clean install

Build docker images

SO docker images are built using the “docker” maven profile.

During the build, the chef-repo and so-docker repositories are cloned from gerrit into the “so” directory structure. Extra definitions are required in the build environment to make this happen. You may need to adjust the definition of mso.chef.git.url.prefix to match the way you authenticate yourself when performing git clone –depth 1.

If you are behind a corporate firewall, you can specify proxy definitions for the constructed docker images.

Remove existing docker containers and images

docker stop $(docker ps -qa)

docker rm $(docker ps -aq)

docker rmi -f $(docker images -q)

Build docker images (without proxy definition):

cd $HOME/onap/workspace/SO/so/packages

$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install -P docker
-Dmso.chef.git.url.prefix=ssh://$USER@gerrit.onap.org:29418 -Dmso.chef.git.branchname=master
-Dmso.chef.git.url.suffix.chef.repo=so/chef-repo -Dmso.chef.git.url.suffix.chef.config=so/so-config
-Ddocker.buildArg.http_proxy=http://one.proxy.att.com:8080
-Ddocker.buildArg.https_proxy=http://one.proxy.att.com:8080

Build docker images (with proxy definition):

cd $HOME/onap/workspace/SO/so/packages

$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install -P docker
-Dmso.chef.git.url.prefix=ssh://$USER@gerrit.onap.org:29418 -Dmso.chef.git.branchname=master
-Dmso.chef.git.url.suffix.chef.repo=so/chef-repo -Dmso.chef.git.url.suffix.chef.config=so/so-config
-Ddocker.buildArg.http_proxy=http://proxyhost:port -Ddocker.buildArg.https_proxy=http://proxyhost:port

Build with Integration Tests

This is done exactly as described for building docker images, except that the maven profile to use is “with-integration-tests” instead of “docker”. Integration tests are executed inside docker containers constructed by the build.

Working with SO Docker

Verify that docker images are built

docker images

*Example Output:*

REPOSITORY                      TAG                            IMAGE ID            CREATED              SIZE
onap/so/so-monitoring           1.3.0-SNAPSHOT                 bb8f368a3ddb        7 seconds ago        206MB
onap/so/so-monitoring           1.3.0-SNAPSHOT-20190213T0846   bb8f368a3ddb        7 seconds ago        206MB
onap/so/so-monitoring           1.3.0-SNAPSHOT-latest          bb8f368a3ddb        7 seconds ago        206MB
onap/so/so-monitoring           latest                         bb8f368a3ddb        7 seconds ago        206MB
onap/so/api-handler-infra       1.3.0-SNAPSHOT                 2573165483e9        21 seconds ago       246MB
onap/so/api-handler-infra       1.3.0-SNAPSHOT-20190213T0846   2573165483e9        21 seconds ago       246MB
onap/so/api-handler-infra       1.3.0-SNAPSHOT-latest          2573165483e9        21 seconds ago       246MB
onap/so/api-handler-infra       latest                         2573165483e9        21 seconds ago       246MB
onap/so/bpmn-infra              1.3.0-SNAPSHOT                 8b1487665f2e        38 seconds ago       324MB
onap/so/bpmn-infra              1.3.0-SNAPSHOT-20190213T0846   8b1487665f2e        38 seconds ago       324MB
onap/so/bpmn-infra              1.3.0-SNAPSHOT-latest          8b1487665f2e        38 seconds ago       324MB
onap/so/bpmn-infra              latest                         8b1487665f2e        38 seconds ago       324MB
onap/so/sdc-controller          1.3.0-SNAPSHOT                 c663bb7d7c0d        About a minute ago   241MB
onap/so/sdc-controller          1.3.0-SNAPSHOT-20190213T0846   c663bb7d7c0d        About a minute ago   241MB
onap/so/sdc-controller          1.3.0-SNAPSHOT-latest          c663bb7d7c0d        About a minute ago   241MB
onap/so/sdc-controller          latest                         c663bb7d7c0d        About a minute ago   241MB
onap/so/vfc-adapter             1.3.0-SNAPSHOT                 dee0005ef18b        About a minute ago   212MB
onap/so/vfc-adapter             1.3.0-SNAPSHOT-20190213T0846   dee0005ef18b        About a minute ago   212MB
onap/so/vfc-adapter             1.3.0-SNAPSHOT-latest          dee0005ef18b        About a minute ago   212MB
onap/so/vfc-adapter             latest                         dee0005ef18b        About a minute ago   212MB
onap/so/openstack-adapter       1.3.0-SNAPSHOT                 fe9103aa9f36        About a minute ago   235MB
onap/so/openstack-adapter       1.3.0-SNAPSHOT-20190213T0846   fe9103aa9f36        About a minute ago   235MB
onap/so/openstack-adapter       1.3.0-SNAPSHOT-latest          fe9103aa9f36        About a minute ago   235MB
onap/so/openstack-adapter       latest                         fe9103aa9f36        About a minute ago   235MB
onap/so/sdnc-adapter            1.3.0-SNAPSHOT                 d02d42d92b06        2 minutes ago        231MB
onap/so/sdnc-adapter            1.3.0-SNAPSHOT-20190213T0846   d02d42d92b06        2 minutes ago        231MB
onap/so/sdnc-adapter            1.3.0-SNAPSHOT-latest          d02d42d92b06        2 minutes ago        231MB
onap/so/sdnc-adapter            latest                         d02d42d92b06        2 minutes ago        231MB
onap/so/request-db-adapter      1.3.0-SNAPSHOT                 5e0136f2201b        2 minutes ago        215MB
onap/so/request-db-adapter      1.3.0-SNAPSHOT-20190213T0846   5e0136f2201b        2 minutes ago        215MB
onap/so/request-db-adapter      1.3.0-SNAPSHOT-latest          5e0136f2201b        2 minutes ago        215MB
onap/so/request-db-adapter      latest                         5e0136f2201b        2 minutes ago        215MB
onap/so/catalog-db-adapter      1.3.0-SNAPSHOT                 bf1c2fe49acb        2 minutes ago        218MB
onap/so/catalog-db-adapter      1.3.0-SNAPSHOT-20190213T0846   bf1c2fe49acb        2 minutes ago        218MB
onap/so/catalog-db-adapter      1.3.0-SNAPSHOT-latest          bf1c2fe49acb        2 minutes ago        218MB
onap/so/catalog-db-adapter      latest                         bf1c2fe49acb        2 minutes ago        218MB
onap/so/base-image              1.0                            1685bba9831d        3 minutes ago        108MB
openjdk                         8-jdk-alpine                   792ff45a2a17        7 days ago           105MB
nexus3.onap.org:10001/openjdk   8-jdk-alpine                   792ff45a2a17        7 days ago           105MB

Start the containers

cd $HOME/onap/workspace/SO/docker-config

./deploy.sh

This should also download & start the mariaDB docker.

Example Output:

Deploying with local images, not pulling them from Nexus.
docker command: local docker using unix socket
Removing network dockerconfig_default
Creating network "dockerconfig_default" with driver "bridge"
Pulling mariadb (mariadb:10.1.11)...
10.1.11: Pulling from library/mariadb
7268d8f794c4: Pull complete
a3ed95caeb02: Pull complete
e5a99361f38c: Pull complete
20b20853e29d: Pull complete
9dbc63cf121f: Pull complete
fdebb5c64c6c: Pull complete
3154860d3699: Pull complete
3cfa7ffec11c: Pull complete
943211713cac: Pull complete
d65a44f4573e: Pull complete
Digest: sha256:3821f92155bf4311a59b7ec6219b79cbf9a42c75805000a7c8fe5d9f3ad28276
Status: Downloaded newer image for mariadb:10.1.11
Creating dockerconfig_mariadb_1
Waiting for 'dockerconfig_mariadb_1' deployment to finish ...
Waiting for 'dockerconfig_mariadb_1' deployment to finish ...
Waiting for 'dockerconfig_mariadb_1' deployment to finish ...
Waiting for 'dockerconfig_mariadb_1' deployment to finish ...
Waiting for 'dockerconfig_mariadb_1' deployment to finish ...
Waiting for 'dockerconfig_mariadb_1' deployment to finish ...
dockerconfig_mariadb_1 is up-to-date
Creating dockerconfig_catalog-db-adapter_1
Creating dockerconfig_request-db-adapter_1
Creating dockerconfig_sdc-controller_1
Creating dockerconfig_vfc-adapter_1
Creating dockerconfig_openstack-adapter_1
Creating dockerconfig_sdnc-adapter_1
Creating dockerconfig_api-handler-infra_1
Creating dockerconfig_so-monitoring_1
Creating dockerconfig_bpmn-infra_1

Check containers are now up

docker ps

*Example Output:*

CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                     NAMES
324ce4636285        onap/so/bpmn-infra           "/app/wait-for.sh ..."   5 minutes ago       Up 5 minutes        0.0.0.0:8081->8081/tcp    dockerconfig_bpmn-infra_1
60986a742f6f        onap/so/so-monitoring        "/app/wait-for.sh ..."   5 minutes ago       Up 5 minutes        0.0.0.0:8088->8088/tcp    dockerconfig_so-monitoring_1
ea6e3e396166        onap/so/api-handler-infra    "/app/wait-for.sh ..."   5 minutes ago       Up 5 minutes        0.0.0.0:8080->8080/tcp    dockerconfig_api-handler-infra_1
473ca2dc852c        onap/so/sdnc-adapter         "/app/wait-for.sh ..."   5 minutes ago       Up 5 minutes        0.0.0.0:8086->8086/tcp    dockerconfig_sdnc-adapter_1
7ae53b222a39        onap/so/vfc-adapter          "/app/wait-for.sh ..."   5 minutes ago       Up 5 minutes        0.0.0.0:8084->8084/tcp    dockerconfig_vfc-adapter_1
8844999c9fc8        onap/so/openstack-adapter    "/app/wait-for.sh ..."   5 minutes ago       Up 5 minutes        0.0.0.0:8087->8087/tcp    dockerconfig_openstack-adapter_1
d500c33665b6        onap/so/sdc-controller       "/app/wait-for.sh ..."   5 minutes ago       Up 5 minutes        0.0.0.0:8085->8085/tcp    dockerconfig_sdc-controller_1
852483370df3        onap/so/request-db-adapter   "/app/wait-for.sh ..."   5 minutes ago       Up 5 minutes        0.0.0.0:8083->8083/tcp    dockerconfig_request-db-adapter_1
cdfa29ee96cc        onap/so/catalog-db-adapter   "/app/wait-for.sh ..."   5 minutes ago       Up 5 minutes        0.0.0.0:8082->8082/tcp    dockerconfig_catalog-db-adapter_1
7c7116026c07        mariadb:10.1.11              "/docker-entrypoin..."   5 minutes ago       Up 5 minutes        0.0.0.0:32770->3306/tcp   dockerconfig_mariadb_1

Check SO health

curl http://localhost:8080/manage/health

*Example Output:*

{"status":"UP"}

Log into the mso container

docker exec -it dockerconfig_api-handler-infra_1 sh

Inspect a docker image

This command shows interesting information about the structure of the mso image. Note that an image is NOT a running container. It is the template that a container is created from.

docker inspect onap/so/api-handler-infra
Example Output:

[
  {
      "Id": "sha256:2573165483e9ac87826da9c08984a9d0e1d93a90c681b22d9b4f90ed579350dc",
      "RepoTags": [
          "onap/so/api-handler-infra:1.3.0-SNAPSHOT",
          "onap/so/api-handler-infra:1.3.0-SNAPSHOT-20190213T0846",
          "onap/so/api-handler-infra:1.3.0-SNAPSHOT-latest",
          "onap/so/api-handler-infra:latest"
      ],
      "RepoDigests": [],
      "Parent": "sha256:66b508441811ab4ed9968f8702a0d0a697f517bbc10d8d9076e5b98ae4437344",
      "Comment": "",
      "Created": "2019-02-13T09:37:33.770342225Z",
      "Container": "8be46c735d21935631130f9017c3747779aab26eab54a9149b1edde122f7576d",
      "ContainerConfig": {
          "Hostname": "ac4a12e21390",
          "Domainname": "",
          "User": "",
          "AttachStdin": false,
          "AttachStdout": false,
          "AttachStderr": false,
          "Tty": false,
          "OpenStdin": false,
          "StdinOnce": false,
          "Env": [
              "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin",
              "LANG=C.UTF-8",
              "JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk",
              "JAVA_VERSION=8u191",
              "JAVA_ALPINE_VERSION=8.191.12-r0",
              "HTTP_PROXY=",
              "HTTPS_PROXY=",
              "http_proxy=",
              "https_proxy="
          ],
          "Cmd": [
              "/bin/sh",
              "-c",
              "#(nop) ",
              "CMD [\"/app/start-app.sh\"]"
          ],
          "ArgsEscaped": true,
          "Image": "sha256:66b508441811ab4ed9968f8702a0d0a697f517bbc10d8d9076e5b98ae4437344",
          "Volumes": {
              "/app/ca-certificates": {},
              "/app/config": {}
          },
          "WorkingDir": "/app",
          "Entrypoint": null,
          "OnBuild": [],
          "Labels": {}
      },
      "DockerVersion": "17.05.0-ce",
      "Author": "",
      "Config": {
          "Hostname": "ac4a12e21390",
          "Domainname": "",
          "User": "",
          "AttachStdin": false,
          "AttachStdout": false,
          "AttachStderr": false,
          "Tty": false,
          "OpenStdin": false,
          "StdinOnce": false,
          "Env": [
              "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin",
              "LANG=C.UTF-8",
              "JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk",
              "JAVA_VERSION=8u191",
              "JAVA_ALPINE_VERSION=8.191.12-r0",
              "HTTP_PROXY=",
              "HTTPS_PROXY=",
              "http_proxy=",
              "https_proxy="
          ],
          "Cmd": [
              "/app/start-app.sh"
          ],
          "ArgsEscaped": true,
          "Image": "sha256:66b508441811ab4ed9968f8702a0d0a697f517bbc10d8d9076e5b98ae4437344",
          "Volumes": {
              "/app/ca-certificates": {},
              "/app/config": {}
          },
          "WorkingDir": "/app",
          "Entrypoint": null,
          "OnBuild": [],
          "Labels": {}
      },
      "Architecture": "amd64",
      "Os": "linux",
      "Size": 245926705,
      "VirtualSize": 245926705,
      "GraphDriver": {
          "Data": null,
          "Name": "aufs"
      },
      "RootFS": {
          "Type": "layers",
          "Layers": [
              "sha256:503e53e365f34399c4d58d8f4e23c161106cfbce4400e3d0a0357967bad69390",
              "sha256:744b4cd8cf79c70508aace3697b6c3b46bee2c14f1c14b6ff09fd0ba5735c6d4",
              "sha256:4c6899b75fdbea2f44efe5a2f8d9f5319c1cf7e87151de0de1014aba6ce71244",
              "sha256:2e076d24f6d1277456e33e58fc8adcfd69dfd9c025f61aa7b98d500e7195beb2",
              "sha256:bb67f2d5f8196c22137a9e98dd4190339a65c839822d16954070eeb0b2a17aa2",
              "sha256:afbbd0cc43999d5c5b0ff54dfd82365a3feb826e5c857d9b4a7cf378001cd4b3",
              "sha256:1920a7ca0f8ae38a79a1339ce742aaf3d7a095922d96e37074df67cf031d5035",
              "sha256:1261fbaef67c5be677dae1c0f50394587832ea9d8c7dc105df2f3db6dfb92a3a",
              "sha256:a33d8ee5c18908807458ffe643184228c21d3c5d5c5df1251f0f7dfce512f7e8",
              "sha256:80704fca12eddb4cc638cee105637266e04ab5706b4e285d4fc6cac990e96d63",
              "sha256:55abe39073a47f29aedba790a92c351501f21b3628414fa49a073c010ee747d1",
              "sha256:cc4136c2c52ad522bd492545d4dd18265676ca690aa755994adf64943b119b28",
              "sha256:2163a1f989859fdb3af6e253b74094e92a0fc1ee59f5eb959971f94eb1f98094"
          ]
      }
  }
]

Working with SO Monitoring

Starting from Guilin release SO Monitoring uses https and NodePort service during communication with operator. Certificates used for communication are generated automatically using AAF and certInitializer, when SO Monitoring is deployed using OOM. For that reason, no additional tasks are needed in order to access the SO Monitoring ui, when the SO is fully deployed.

SO Monitoring contains also pre-installed certs which can be used in local development environment. They are for development purpose only!

1. Credentials to login and initial setup

Defalut credentials and certs of SO Monitoring, if you want to develop SO Monitoring out of ONAP cluster, are stored in the app. Credentials are as follows:

spring:
  main:
    allow-bean-definition-overriding: true
  security:
    usercredentials:
    -
      username: demo
      password: '$2a$10$ndkDhATUid4a3g0JJVRv2esX4rtB.vzCn7iBhKyR1qZ/wDdvNzjTS'
      role: GUI-Client

Username - demo. Password (demo123456!) is bcrypted.

This setup is overridden by the override.yaml file which is stored in the OOM project. Override.yaml file can be edited directly in case of local ONAP setup. This file is loaded into container through configmap.

Note

If you want to change config stored in override.yaml on working deployment, you have to edit k8s configmap. Due to insufficient permissions it is not possible directly in the container. After that pod have to be restarted.

kubectl -n onap edit configmap dev-so-monitoring-app-configmap
_images/configmap.png

Special care needs to be given to the indentation. Spring needs to be inline with the mso already present and others added accordingly.

Warning

Attention! The default setup of the OOM makes SO Monitoring password is being automatically generated during ONAP deployment and injected through k8s secret

2. Setup, retrieve and edit default SO Monitoring password

Automatic generation of password for SO Monitoring during ONAP deployment can be overriden. In result, password can be set up manually. Such case requires to edit ONAP config file, template of which is stored in oom/kubernetes/onap/values.yaml file.

_images/so-monitoring-config.png

Following lines presented in fig. has to be uncommented.

If customized file is used, following code has to be paste under the SO config (be aware of indentation):

so:
  ...
  so-monitoring:
    server:
      monitoring:
        password: demo123456!
  ...

Alternative way (not recommended) is to add password entry in the oom/kubernetes/so/components/so-monitoring/values.yaml

...
server:
  monitoring:
    password: demo123456!
...

To retrieve actual password for SO Monitoring on existing ONAP install, run the following command:

kubectl get secret -n onap dev-so-monitoring-app-user-creds -o json | jq -r .data.password | base64 --decode
_images/so-monitoring-password.png

To change actual password on existing ONAP install, dev-so-monitoring-app-user-creds secret has to be modified.

kubectl edit secret -n onap dev-so-monitoring-app-user-creds
_images/so-monitoring-secret.png

Edit password entry, which has to be given in base64 form. Base64 form of password can be obtained by running:

echo 'YOUR_PASSWORD' | base64
_images/so-monitorring-base64-password.png

Once, password was edited, pod has to be restarted.

3. Login to SO Monitoring

Identify the external port which is mapped to SO Monitoring using the following command. The default port is 30224 :

sudo kubectl -n onap get svc | grep so-monitoring
_images/nodemap.png

Then access the UI of SO Monitoring, by default https://<k8s-worker-ip>:30224/

_images/ui.png

4. Hiding the SO Monitoring service (ClusterIP)

The SO Monitoring service is set to the NodePort type. It is used to expose the service at a static port. Hence there is possibility to contact the NodePort Service, from outside cluster, by requesting <NodeIP>:<NodePort>.

In order to make the service only reachable from within the cluster, ClusterIP service has to be set.

Command used to edit the service configuration of SO Monitoring is:

sudo kubectl edit svc so-monitoring -n onap
_images/nodeport.png

SO Admin Cockpit User Guide

Introduction

The SO-Admin-Cockpit component allows a user to have a detailed monitoring view of the Camunda BPMN workflows that have run, or are running, in SO. It provides a frontend UI that allows users to easily go through a workflow’s different calls and drill up/down through the call activities within the workflow. It also provides a search page for filtering specific results. It allows you to filter by start/end time/date, instance id, request id, service name or by the status of a workflow. The component is extremely useful for debugging and testing workflows of any kind, as it delivers an understandable and simple UI which is much easier to follow than large, cumbersome debug log files. Additionally the UI provides a statistics page, based on your current search parameters, that provides the percentages of complete, failed, in progress, pending and unlocked workflows.

(Previous to the Honolulu release of ONAP SO-Admin-Cockpit was named SO-Monitoring, an additional change in the controller is required to change the Host name to SO-Admin-Cockpit, as it remains as SO-Monitoring currently)

Using SO-Admin-Cockpit

In order to make use of SO-Admin-Cockpit currently, you will need to onboard the application in the ONAP portal or access the SO-Admin-Cockpit UI directly. This can be done using the host name “so-admin-cockpit”, and the port number, which by default is “30224”. First you need to make sure you can access the ONAP portal, this is done by adding the following to your “hosts” file:

<onapVmIp> portal.api.simpledemo.onap.org

Replacing <onapVmIp> with the IP of your device hosting your Portal pod within ONAP. Add this to a blank line in your hosts file, usually found in “C:WindowsSystem32driversetc” on Windows. Ensure you open the host file as an administrator in order to edit it.

Alternatively you can access SO-Admin-Cockpit directly by simply adding the following line to your “hosts” file:

<soAdminCockpitVmIp> so-monitoring

Where <soAdminCockpitVmIp> is replaced with the IP of the device hosting your SO-Admin-Cockpit pod. Then accessing the following link through your browser:

https://so-monitoring:30224/

Steps to add SO-Admin-Cockpit to the Portal

In Pre-Casablanca releases you will need to expose the so-monitoring service using a Loadbalancer in order to access it, this is simple until there is a NodePort assigned to SO-Monitoring. Use this command to expose the service:

kubectl expose services so-monitoring --type=LoadBalancer --port 9091 --target-port=9091 --name=so-monitoring-external -n onap

Log into your ONAP Portal as the super user

  • Login: demo

  • Password: demo123456!

Click “Application Onboarding”, then “Add App” in the top right. Fill out the required Application Details (Name, URL, REST API URL, Username, Password) as shown here:

Please note, the <PASSWORD> can be retrieved by logging into the SO-Admin-Cockpit pod and retrieving the environment variables using the following command:

env | grep SO_COCKPIT

Now simply go to the “Application Catalog” tab on the left of the page, then tick your Monitoring app to enable it. (Whatever you set Application Name as should show up here.) Click the “Home” tab and you should be able to access the Admin Cockpit now.

Searching/Viewing BPMN Workflows

_images/soAdminCockpitUi.png

In order to find the workflow that you are attempting to monitor you will need at least one of the following values of the service instance: Service Instance ID, Request ID, Service Name or the time/date range in which the workflow started/ended. You can use the filter drop-down boxes to the left of the parameter boxes, i.e. “EQUAL”, “NOT EQUAL” and “LIKE”. Also, you can filter by the status of a workflow, with the status drop-down box, to further filter your results. Simply enter any of these pieces of information into the search page, ensure the start and end date range includes when the workflow would have run and press the search button. Once your results list has been returned you can click on a result to see the workflow in the graphical BPMN viewer.

_images/soAdminCockpitUi2.png

From here you can inspect the different calls and variables throughout the workflow, by using the “Activity Instances” and “Variable Instances” tabs. Clicking on one of the sub process call, within the diagram, to open them in the graphical BPMN viewer (The boxes with a + at the bottom of them are call activities to sub processes. This is how you drill down through a workflow, you can also safely traverse back “up” through the flows with your browser’s back button. The cyan highlighting shows the flow of the path taken by the workflow, and this will go down through each of the sub processes as well.

_images/soAdminCockpitUi3.png

In the BPMN viewer, manipulation of the returned illustrated flow is possible by using the following methods. On the left side of the viewer window there are three symbols for Zooming in/out and fitting the flow to the full window. Along with these controls, the user can left-click and drag to move the flow within the canvas to the user desired position.

SO-Monitoring Service Statistics

_images/soAdminCockpitStatistics.png

You can see a summary of the status of all of the workflows from one of your search results by clicking on the “Service Statistics” tab, found just above your list of results. Here you can find a percentile breakdown of each workflow’s, in the list of results you received, statuses.

Troubleshooting SO-Admin-Cockpit

The log files for SO-Admin-Cockpit can be found within the SO-Admin-Cockpit pod. They will be located in the “/app/logs/so-admin-cockpit” directory. You will find a debug, error, metric and audit log file here. They each contain differing information, except the debug log file which will contain all of the logging information. Alternatively you can get the logs from the SO-Admin-Cockpit pod itself when using Kubernetes. Using the following command:

kubectl -n <namespace> logs <soAdminCockpitPodName>

Replacing <namespace> with your environments namespace and <soAdminCockpitPodName> with the full name of your SO-Admin-Cockpit pod. This command will give you some detailed information from the execution of the pod.

CORS (Cross-Origin Resource Sharing) Error

Pre-Dublin SO-Monitoring Components may experience CORS issues.

To check for this error open up the console of the browser you are using. In Mozilla Firefox do this by pressing CTRL + SHIFT + C and then selecting the console. In Google Chrome this is done by CTRL + SHIFT + I and then selecting the console. If an exception relating to CORS is displayed, then this issue must be addressed.

This can be dealt with in two ways. Either using an extension or by disabling CORS in the browser.

Internal Service Error occurred for operation : GET please check backend service log. status code: 500

_images/soAdminCockpitGetError.png

This can be checked by following the below steps:

  • Open the developers mode in your browser

  • Click on Console

  • Check to see if an error occurs similar to the following:

Error : No serializer found for class org.onap.so.bpmn.core.RollbackData and no properties discovered to create BeanSerializer

This issue could be associated with any one of the objects being used in the BPMN flows, when it’s declared as a java object but attempted to be serialized without marking/declaring it as serializable. So the issue must be fixed at the Object level, by ensuring any objects used by the particular BPMN Flow are made serializable.

SO Admin Cockpit App creates a Blank Tab

If when selecting SO Admin Cockpit from the portal a blank tab labeled “SO Admin Cockpit” is returned, then the issue may relate the URL you are using in portal by default.

A fix for this issue is to change “https” to “http” and change the port from “30224” to “30215”, within the browser URL.

For example, using this URL:

http://portal.api.simpledemo.onap.org:30215/ONAPPORTAL/applicationsHome

Instead of the default URL:

https://portal.api.simpledemo.onap.org:30225/ONAPPORTAL/applicationsHome

Camunda Cockpit Community Edition

On a deployed instance of SO, you can use the Camunda_Cockpit to view BPMN 2.0 workflow definitions in the deployment.

Unfortunately, the Community Edition of Camunda included with SO is not fully featured. It cannot be used to inspect running and completed process instances. For that, the Enterprise Edition is required.

Logging In

Because port 8080 on the docker host machine is forwarded to port 8080 in the SO docker container you can log into the cockpit by browsing to this URL:

http://dockerhost:8080/camunda/app/admin/default/#/login

Where dockerhost is the docker host system.

If you can use a browser on the docker host system, then use a localhost address:

The user is “admin” and the password is the same as the jboss admin password, which is not displayed here.

_images/Camunda_Cockpit_1.png

Viewing Process Definitions

Use the drop-down menu next to the home icon and select the “Cockpit” option:

_images/Camunda_Cockpit_2.png

The number of deployed process definitions should be displayed. Click on it.

_images/Camunda_Cockpit_3.png

Now you should see an actual list of deployed process definitions. You can click on any of them to view them.

_images/Camunda_Cockpit_4.png

Camunda Cockpit Enterprise Edition

The Community Edition of Camunda is the version normally built into SO. With the Community Edition, you can see process definitions, but you cannot inspect running or completed process instances, which is an essential debugging capability. This capability is available only in the Enterprise Edition and requires a commercial license. If you have such a license, you can build SO with the Enterprise Edition. Your use must be consistent with the terms of your license, of course.

With the Enterprise Edition cockpit, you can:

  • See a trace of tasks executed by a running or completed process instance.

  • Look at execution variables in a running or completed process instance.

  • Look at called subprocesses in a running or completed process instance.

Maven Repository for Camunda EE Artifacts

To build with Camunda EE, you will need a maven repository containing the Camunda EE artifacts. This can be a nexus repository or a local repository in your filesystem.

To construct a local repository, start with this structure for the 7.7.3-ee version of Camunda:

NOTE: the zip archive does not contain the actual Enterprise Edition JAR and WAR files. It contains zero-length files as placeholders. You will need to replace the zero-length files with files you obtain from Camunda. The archive does contain all the poms, checksums, and metadata required to make it a functional maven repository.

Here’s the minimum set of artifacts you need to build the SO Amsterdam release software:

camunda-engine-7.7.3-ee.jar

camunda-webapp-7.7.3-ee-classes.jar

camunda-webapp-7.7.3-ee.war

camunda-webapp-ee-jboss-standalone-7.7.3-ee.war

camunda-engine-cdi-7.7.3-ee.jar

camunda-engine-rest-7.7.3-ee-classes.jar

camunda-engine-plugin-spin-7.7.3-ee.jar

camunda-engine-plugin-connect-7.7.3-ee.jar

camunda-engine-rest-core-7.7.3-ee.jar

camunda-engine-feel-api-7.7.3-ee.jar

camunda-engine-feel-juel-7.7.3-ee.jar

camunda-engine-dmn-7.7.3-ee.jar

camunda-engine-spring-7.7.3-ee.jar

camunda-bpmn-model-7.7.3-ee.jar

camunda-xml-model-7.7.3-ee.jar

camunda-dmn-model-7.7.3-ee.jar

camunda-cmmn-model-7.7.3-ee.jar

Maven settings.xml

Add a profile to your maven settings.xml to include the repository containing your Camunda EE artifacts.

For example:

<profile>
<!-- profile for artifacts not in public repositories -->
<id>my-local-artifacts</id>
<repositories>
  <repository>
    <!-- Local repository for Camunda Enterprise Edition -->
    <!-- YOU MUST HAVE A VALID LICENSE TO USE THIS -->
    <id>camunda-ee</id>
    <name>camunda-ee</name>
    <url>file:///home/john/onap/camunda-ee-repository</url>
  </repository>
</repositories>
</profile>

And add your profile to the list of active profiles:

<activeProfiles>

<activeProfile>my-local-artifacts</activeProfile>

<activeProfile>openecomp-staging</activeProfile>

<activeProfile>openecomp-public</activeProfile>

<activeProfile>openecomp-release</activeProfile>

<activeProfile>openecomp-snapshots</activeProfile>

<activeProfile>opendaylight-release</activeProfile>

<activeProfile>opendaylight-snapshots</activeProfile>

</activeProfiles>

Building

Add these options to the mvn command line when you build “so”

-Dcamunda.version=7.7.3-ee -Dcamunda.bpm.webapp.artifact=camunda-webapp-ee-jboss-standalone

Installation

The cockpit is part of the SO image. There are no special installation requirements. When you log in, you will need to enter your license information. Alternatively, you can insert your license directly into the camundabpmn database before you log in:

INSERT INTO camundabpmn.ACT_GE_PROPERTY VALUES ('camunda-license-key','YOUR-LICENCE-KEY-HERE',1);

Logging In

Because port 8080 on the docker host machine is forwarded to port 8080 in the SO docker container you can log into the Enterprise Edition cockpit by browsing to this URL:

http://dockerhost:8080/camunda

Where dockerhost is the docker host system.

If you can use a browser on the docker host system, then use a localhost address:

The user is “admin” and the password is the same as the jboss admin password, which is not displayed here.

_images/Camunda_Cockpit_Enterprise_1.png

Camunda Modeler

The Camunda_Modeler is the editor for BPMN 2.0 process flows. It is a standalone application. NOTE: the Camunda eclipse plugin is no longer supported and should not be used.

_images/camunda_modeler_1.png

Modeler Templates

Some work has already been done in MSO to develop templates for “building block” subprocess flows. When a template is provided for a BPMN element, the modeler displays a custom form for inputting parameters. This significantly simplifies flow construction and reduces the chance of making mistakes.

SO CSIT (Macroflow)

Ensure you have a healthy ONAP Deployment running. The following components will be required/used as part of this guide:

  • SO

  • SDC

  • AAI

  • DMAAP

  • SDNC

  • MultiCloud

What is Macroflow?

The SO building blocks are a set of database-driven, configurable and generic process steps to be leveraged through several actions defined as ‘Macro’ flows. For each of the macro flows, there are a set of actions to be performed which are implemented as building blocks - which then implement generic logic to handle the orchestration of services and various type of resources orchestrated by ONAP, as well as their corresponding actions.

Macroflow method allows the user to build and send only one request to instantiate all objects : Service, VNFs, VFModules and Networks.

How to run CSIT Macroflow?

The follow steps are to be installed and run on an Ubuntu 18.04 (desktop) installation. Later versions of Ubuntu and Java may work for the tests.

Prerequisite: Install Java 11, Maven, docker, docker-compose

Following steps need to be followed to run the CSIT Macroflow:

First pull the CSIT repo from Gerrit, either with or without the hooks

… code-block:

git clone "https://gerrit.onap.org/r/integration/csit"

or

git clone "https://gerrit.onap.org/r/integration/csit" && (cd "csit" && mkdir -p .git/hooks && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg https://gerrit.onap.org/r/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg)

Once this is downloaded a few more installations are required.

Install pip (if required)

sudo apt install python-pip

Install Robot Framework through pip

pip install robotframework

Run Script

Once all of this is done, then the tests should be run by calling the run-csit.sh script and giving it the location of our test folder (csit/plans/so/macroflow).

From the csit projects root folder run the following command:

./run-csit.sh plans/so/macroflow

This should successfully run the CSIT Macroflow

The run-csit.sh will automatically set up a Robot environment for you, and execute the test plan defined in the plans/so/macroflow directory.

If you look at the contents of the plans/so/macroflow you will see the following:

setup.sh: the shell script that starts all the necessary docker containers required by this test plan, as well as passing the necessary environment variables to Robot. testplan.txt: the text file listing, in order, the test suites that should be executed by Robot for this particular test plan. This allows you to refactor test suites to be reused by multiple test plans as necessary. teardown.sh: the shell script that kills all the docker containers that were started by this test plan. docker-compose.yml: This lists all the requrired docker.

How to run tests against specific SO versions

It is possible to run the CSIT Macroflow suite against local docker images although it is not the default. Through this method specific versions of SO can be tested.

There are two changes required to make this work.

  1. The env file, located at [containing folder]/csit/plans/so/macroflow/config/env, first needs to be changed. The DOCKER_ENVIROMENT needs to be changed from “remote” to “local”. Also the TAG value might need to be changed. This Tag relates to the version of images being used. Make sure the cnf-adapter image version also need to be changed here.

  2. Secondly all of the required docker images must be present on system.

This should be enough to run the CSIT Macroflow test suite locally.

CSIT Macroflow Tests High Level Scenarios

Step 1:

Perform Configuration / Setup Steps prior to running tests

Step 2:

Onoboard the Macroflow Csar Package to complete the distribution from sdc-controller. This will be done by RoboFramework itlself. ASDC saves both heat and helm info into mso catalogdb.

Step 3:

Once the distribution done, next Instantiation will be executed for Macrolfow. RoboFramework is used to trigger the Instantiation flow. In this case, API handler receives the call and fetches required information from mso catalogdb.

Step 4:

Bpmn-Infra is called and fetches required information from mso catalogdb and executes all the selected building blocks which will call cnf-adapter or openstack adapter on the basis of usecase whether it is Macroflow Heat or Macroflow Helm.

Step 5:

Bpmn-Infra also fetches and updates Action infromation to the AAI-Simulator and SDNC-Simulator

Step 6:

Cnf-Adapter will then call to Multicloud (Multicloud-Simulator) and complete the Execution of Macroflow.

Follow the diagram in the image below to understand the step

_images/Architecture_flow.png

What are the tests doing?

There are three tests currently being run “Distribute Service Template”, “Invoke Service Instantiation”.

Distribute Service Template

As the name would suggest the aim for the “Distribute Service Template” test is to distribute a service template within the SDC controller pod. Once a http session of the SDC controller is created a post request can be made to it. This post requests sends binary data from “serviceBasicVfCnfnotification.json” for Macroflow heat and “serviceBasicVfCnfWithHelm.json” for Macroflow helm. These json files contain the information of resources and artifacts required to distribute a service. These json file gather information from the Csar package which resides in the plans/so/macroflow/config/distribution-test-zip directory. Once this post request is sent, the response status code is checked to see if it is 200. If the code is not equal to 200 then the test is thought to be a failure.

Invoke Service Instantiation

The aim of the “Invoke Service Instantiation” test is to invoke the service distributed to the sdc controller in the previous test. A http session of the api handler pod is created. This session is sent a post request containing “macroflow.json” for Macroflow heat and “MacroflowWithHelm.json” for Macroflow helm. Once these request are made the response is checked if it a valid code is returned. A for loop is used to continually make calls to check the orchestration request for both the request, to check the status of service instantiation. Only once this orchestration returns either a fail or success, will we break out of the for loop. Once outside the for loop a final statement is used to check if service has been successfully instantiated.

Troubleshooting

There are a number of simple issues relating from Python and its libraries

A correct installation of the robot framework to run our tests requiring python and the following pip libraries.

  • robotframework

  • robotframework-extendedselenium2library

  • robotframework-httplibrary

  • robotframework-onap

  • robotframework-requests

  • robotframework-selenium2library

To make sure each of the previous libraries is installed run the following command

pip -list

BPMN Project Structure

BPMN main process flow

A BPMN main process flow is a top-level flow. All main process flows are under the src/main/resources/process folder.

CreateVfModuleVolumeInfraV1 is a main process flow.

_images/bpmn_project_structure_1.png

Open BPMN files with the camunda modeler (standalone application). To launch the modeler from eclipse, right-click→open-with→Other→Browse. Select Check the boxes on the dialog so that eclipse will open all .bpmn files with the camunda-modeler executable.

BPMN subprocess flow

A BPMN subprocess flow is meant to be invoked by other flows (either main process flows or other subprocess flows). All subprocess flows are under the src/main/resources/subprocess folder.

The CreateVfModuleVolumeInfraV1 process flow is delivered with two custom subflows: DoCreateVfModuleVolumeV2 and DoCreateVfModuleVolumeRollback.

_images/bpmn_project_structure_2.png

Groovy scripts

There is one groovy script for each BPMN file. Groovy scripts are invoked by script tasks within the BPMN flows.

_images/bpmn_project_structure_3.png

Unit Tests

Normally, we create a unit test class for every flow. This one is missing a unit test for its rollback flow.

_images/bpmn_project_structure_4.png

Unit Test Resource Files

Any files needed by the unit tests are kept under the src/test/resources/__files folder.

_images/bpmn_project_structure_5.png

BPMN Main Process Flows

Characteristics

Invoked by an API Handler

The BPMN application (war) exposes a REST endpoint to which the API Handler(s) send requests for flow execution. The message sent by the API Handler to this endpoint is a JSON wrapper containing:

  • The original request received by the API handler from the portal or other client.

  • Metadata such as the request-id generated by the API Handler for the request.

  • The name of the BPMN process to execute (obtained by the API Handler from the mso_catalog.service_recipe table.

Asynchronous Service Model

All main process flows implement an asynchronous service model. The connection to the API Handler is kept open until the main process flow sends back a response. In the flow shown below, this is done by the “Send Sync Ack Response” script task. A flow is expected to send a response after validating the request, but before performing any long running tasks or tasks that could cause the process to be suspended.

After the synchronous response is sent, the flow continues to execute. When the flow ends, it may optionally send an asynchronous notification to a callback URL provided in the original request (behavior depends on the API agreement)

Typically calls one or more subprocess flows

Main process flows usually implement the high-level service logic, delegating the “real” work to reusable subflows (Building Blocks) or custom subflows

Handles “Completion” and “Fallout” tasks

“Completion” tasks are those that occur when the process ends successfully, and “Fallout” tasks are those that occur when the process fails. Activities include:

  • Updating the mso_requests database.

  • Rolling back uncompleted work.

  • Sending an asynchronous callback notification.

Example: CreateVfModuleVolumeInfraV1.bpmn

_images/BPMN_Main_Process_Flows_1.png

BPMN Subprocess Process Flows

Characteristics

Invoked by other flows

A BPMN Call_Activity provides the mechanism to invoke subprocess flows. The Called Element attribute of the Call Activity specifies the name of the subprocess to execute.

Input and Output variable mapping

In the modeler, you can specify a list of “In Mappings”. With this, you can map execution variables from the calling flow to the subprocess. The subprocess always has its own copy of each variable. To transfer values back to the calling flow, you specify “Out Mappings”.

May throw MSOWorkflowException

The current best practice for reporting errors from subprocess is described here:

  • The subprocess should create a WorkflowException object and store it in an execution called WorkflowException.

  • The WorkflowException object contains an error code and an error message.

  • The subprocess should then throw an MSOWorkflowException BPMN event which may be handled by the calling flow.

Example: VnfAdapterRestV1.bpmn

_images/BPMN_Subprocess_process_flows_1.png

BPMN Project Deployment Strategy

Single Application with Embedded Process Engine

Deployment in SO is currently limited to a single process application: MSOInfrastructureBPMN. The WAR file for this application contains everything needed to execute the infrastructure process flows, including:

  • BPMN process flows, java classes, groovy scripts, and resource files from MSOInfrastructureBPMN itself.

  • BPMN process flows, java classes, groovy scripts, and resource files from other SO projects, like MSOCommonBPMN and MSOCoreBPMN.

  • An embedded Camunda Process Engine to execute the flows.

The process application exposes a REST endpoint to the API Handler(s) for receiving flow execution requests.

Development is required in SO to be able to support one a more versatile deployment strategy, probably one of the following:

Shared Process Engine

The Camunda Process Engine is created and manged as a Wildfly module. This single engine is shared by all process applications.

Multiple Applications, each with an Embedded Process Engine

More than one application could be deployed, each having its own embedded process engine.

CODE FLOWS OF BPMN-INFRA

API Handler is a SO Component. Every Rest API will first reach to the API Handler. Curl command which is mentioned below will directly hit to the E2EServiceInstances.java file of the API Handler component.

API HANDLER ( E2EServiceInstances.java )

curl -v -H “Content-Type: application/json” -X POST –data @request_body_file_name.json -u mso_admin:password1$ http://localhost:8080/onap/so/infra/e2eServiceInstances/v3

Request Body:

    {
   "service":{
      "name":"SliceService",
      "description":"SliceService",
      "serviceInvariantUuid":"dfcd7471-16c7-444e-8268-d4c50d90593a",
      "serviceUuid":"dfcd7471-16c7-444e-8268-d4c50d90593a",
      "globalSubscriberId":"test_custormer",
      "serviceType":"embb",
      "parameters":{
          "locationConstraints":[
          ],
          "resources":[
              {
                  "resourceIndex":"1",
                  "resourceName":"allottedResource",
                  "resourceInvariantUuid":"eeefcd86-7b5b-41ae-9516-08acc5d59d92",
                  "resourceUuid":"265da937-76c7-4152-98e3-5f0d0a844b7f",
                  "resourceCustomizationUuid":"a4eda1d9-1af4-424b-997f-12c57b74c67a",
                  "parameters":{
                      "locationConstraints":[
                      ],
                      "resources":[
                      ],
                      "requestInputs":{
                  }
                  }
              }
          ],
          "requestInputs":{
                          "sST": "embb",
              "sNSSAI": "1-10101",
              "uEMobilityLevel": "stationary",
              "areaTrafficCapDL": 123,
              "maxNumberofUEs": 1000,
              "expDataRateUL": 2000,
              "plmnIdList": "39-00|39-01",
              "areaTrafficCapUL": 456,
              "latency": 300,
              "expDataRateDL": 400,
              "coverageAreaTAList": 101001,
              "activityFactor": 99,
              "resourceSharingLevel": "shared",
             "nstar0_allottedresource0_providing_service_uuid": "4e8d930b-7483-4b9b-8c82-4708638ade4a",
             "nstar0_allottedresource0_providing_service_invariant_uuid": "1899e5c1-df4e-43a8-a889-48c157dad7bc"
          }
      }
   }
Response body:

   {
   "service": {
       "serviceId": "ebe2d37f-f65b-43d8-8906-f81811ed8f22",
       "operationId": "ed9b4c84-17db-4874-8896-25324a0401fe"
     }
   }

Code flows:

  1. It reaches to the E2EServiceInstances.java file of API-Handeler infra project and Input json is mapped to the createE2EServiceInstance method

  2. A unique request id is generated corresponding to every request and checked if request Id already exists in requestdb InfraActiveReqest table

  1. http://request-db-adapter:8083/infraActiveRequests/requestID (GET), which will return a 404 if not exists

  2. createInstance is set to the action variable

  1. Running local validations on input json.

  2. Gets the orchestration url from the recipe table

a. Checks whether the service already exists in catalogdb http://catalog-db-adapter:8082/service/{modelNameVersionId} (GET)

b. Checks the service recipe table with the modelNameVersionId and the action to be perfomed http://catalog-db- adapter:8082/serviceRecipe/search/findFirstByServiceModelUUIDAndAction?serviceModelUUID= {modelNameVersionId}&action=createInstance . Returns a 404 if no recipe exists with the corresponding id.

c. As recipe corresponding to this doesnt exist, we try to get with a default value. This flow comes under default flow so the defaultvalue is UUI_DEFAULT. First we get service with this value http://catalog-db-adapter:8082/service/search/findFirstByModelNameOrderByModelVersionDesc?modelName=UUI_DEFAULT (GET) . It returns a service with modelUUID as dfcd7471-16c7-444e-8268-d4c50d90593a, and further can be used to get the recipe .

d. http://so-catalog-db-adapter.onap:8082/serviceRecipe/search/findFirstByServiceModelUUIDAndAction? serviceModelUUID=dfcd7471-16c7-444e-8268-d4c50d90593a&action=createInstance gives a recipe which has a parameter “orchestrationUri” as “/mso/async/services/CreateCustomE2EServiceInstance”

BPMN-INFRA

Hits CreateCustomE2EServiceInstances

Address: http://bpmn-infra:8081/mso/async/services/CreateCustomE2EServiceInstance

Payload will be reaching to bpmn in the form of:

{
"variables": {
  "bpmnRequest": {
     "value": {
        "requestDetails": {
           "modelInfo": {
              "modelInvariantId": "699dd37d-c82f-4bd5-adec-856900fc2796",
              "modelType": "service",
              "modelNameVersionId": "0692e0c9-8913-41ca-893a-58626f4afff2",
              "modelName": "voLTE",
              "modelVersion": "1.0",
              "modelVersionId": "0692e0c9-8913-41ca-893a-58626f4afff2",
              "modelUuid": "0692e0c9-8913-41ca-893a-58626f4afff2",
              "modelInvariantUuid": "699dd37d-c82f-4bd5-adec-856900fc2796"
           },
           "requestInfo": {
              "source": "UUI",
              "instanceName": "SliceService",
              "suppressRollback": true
           },
           "subscriberInfo": {
              "globalSubscriberId": "test_custormer"
           },
           "requestParameters": {
              "subscriptionServiceType": "MOG",
              "userParams": [
                 {
                    "ServiceInstanceName": "SliceService",
                    "UUIRequest": {
                       "service": {
                          "name": "SliceService",
                          "description": "SliceService",
                          "serviceInvariantUuid": "699dd37d-c82f-4bd5-adec-856900fc2796",
                          "serviceUuid": "0692e0c9-8913-41ca-893a-58626f4afff2",
                          "globalSubscriberId": "test_custormer",
                          "serviceType": "embb",
                          "parameters": {
                             "locationConstraints": [],
                             "resources": [
                                {
                                   "resourceIndex": "1",
                                   "resourceName": "allottedResource",
                                   "resourceInvariantUuid": "eeefcd86-7b5b-41ae-9516-08acc5d59d92",
                                   "resourceUuid": "265da937-76c7-4152-98e3-5f0d0a844b7f",
                                   "resourceCustomizationUuid": "a4eda1d9-1af4-424b-997f-12c57b74c67a",
                                   "parameters": {
                                      "locationConstraints": [],
                                      "resources": [],
                                      "requestInputs": {}
                                   }
                                }
                             ],
                             "requestInputs": {
                                "sST": "embb",
                                "sNSSAI": "1-10101",
                                "uEMobilityLevel": "stationary",
                                "areaTrafficCapDL": 123,
                                "maxNumberofUEs": 1000,
                                "expDataRateUL": 2000,
                                "plmnIdList": "39-00|39-01",
                                "areaTrafficCapUL": 456,
                                "latency": 300,
                                "expDataRateDL": 400,
                                "coverageAreaTAList": 101001,
                                "activityFactor": 99,
                                "resourceSharingLevel": "shared",
                                "nstar0_allottedresource0_providing_service_uuid": "4e8d930b-7483-4b9b-8c82-4708638ade4a",
                                "nstar0_allottedresource0_providing_service_invariant_uuid": "1899e5c1-df4e-43a8-a889-48c157dad7bc"
                             }
                          }
                       }
                    }
                 }
              ],
              "aLaCarte": true,
              "usePreload": true
           }
        },
        "serviceInstanceId": null,
        "vnfInstanceId": null,
        "pnfName": null,
        "networkInstanceId": null,
        "volumeGroupInstanceId": null,
        "vfModuleInstanceId": null,
        "configurationId": null,
        "instanceGroupId": null
     },
     "type": "String"
  },
  "requestId": {
     "value": "6fa42cd2-4f49-4e2c-92fb-fae133277e9e",
     "type": "String"
  },
  "mso-request-id": {
     "value": "6fa42cd2-4f49-4e2c-92fb-fae133277e9e",
     "type": "String"
  },
  "isBaseVfModule": {
     "value": false,
     "type": "Boolean"
  },
  "recipeTimeout": {
     "value": 180,
     "type": "Integer"
  },
  "requestAction": {
     "value": "createInstance",
     "type": "String"
  },
  "serviceInstanceId": {
     "value": "",
     "type": "String"
  },
  "pnfCorrelationId": {
     "value": "",
     "type": "String"
  },
  "vnfId": {
     "value": "",
     "type": "String"
  },
  "vfModuleId": {
     "value": "",
     "type": "String"
  },
  "volumeGroupId": {
     "value": "",
     "type": "String"
  },
  "networkId": {
     "value": "",
     "type": "String"
  },
  "configurationId": {
     "value": "",
     "type": "String"
  },
  "serviceType": {
     "value": "embb",
     "type": "String"
  },
  "vnfType": {
     "value": "",
     "type": "String"
  },
  "vfModuleType": {
     "value": "",
     "type": "String"
  },
  "networkType": {
     "value": "",
     "type": "String"
  },
  "recipeParams": {
     "value": null,
     "type": "String"
  },
  "host": {
     "value": null,
     "type": "String"
  },
  "operationType": {
     "value": "",
     "type": "String"
  },
  "apiVersion": {
     "value": "v3",
     "type": "String"
  },
  "aLaCarte": {
     "value": false,
     "type": "Boolean"
  },
  "requestUri": {
     "value": "",
     "type": "String"
  },
  "instanceGroupId": {
     "value": "",
     "type": "String"
  },
  "generateIdsOnly": {
     "value": false,
     "type": "Boolean"
  }
 }
}

Based on the serviceUuid which is mentioned in the request body it will call the the CreateCommunicationService.bpmn file and This CreateCommunicationService.bpmn is taken as a example to this workflow Understanding which then call the subprocess of this flow and so on.

_images/CreateCommunicationService.png
  1. CreateCommunicationService -> preProcessRequest()

  1. Get Input Request will be logged as shown above

  2. Get Request ID

  3. Here ServiceInstanceId is null so serviceInstanceId is generated randomly.

  4. Input productFamilyId is null

  5. Now it will get the user input parameter from the request json.

  1. CreateCommunicationService–> prepareInitOperationStatus

  1. Generate a new operation based on serviceInstanceId and operationId

  2. call to prepareUpdateOperationStatus() method

  1. RequestDBUtil–> prepareUpdateOperationStatus()

  1. This method will be called to update the operation status in the requestDB

  2. Exit prepareUpdateOperationStatus()

  3. Exit prepareInitOperationStatus()

  1. Based on the bpmn structure DecomposeService class is called

  1. This class takes input as

  • msoRequestId

  • isDebugLogEnabled

  • serviceInstanceId

  • serviceModelInfo

  • requestParameters

  1. Sent GET request to catalogdb to fetch the data based on serviceModelInvariantId and modelVersion http://so-catalog-db-adapter.onap:8082/ecomp/mso/catalog/v2/{serviceModelUuid}

  2. Response from catalogdb will be looking like:

{
"serviceResources": {
  "modelInfo": {
     "modelName": "CST",
     "modelUuid": "bfc2775b-64ad-41e5-95fe-d3bc57df6c73",
     "modelInvariantUuid": "d4df55ca-c985-46c9-8088-f952181f553e",
     "modelVersion": "1.0"
  },
  "serviceType": "embb",
  "serviceRole": "",
  "environmentContext": "General_Revenue-Bearing",
  "resourceOrder": "ServiceProfile Service Proxy",
  "workloadContext": "Production",
  "serviceVnfs": [],
  "serviceNetworks": [],
  "serviceInfo": {
     "id": 11,
     "serviceInput": [
        {
           "default": true,
           "name": "skip_post_instantiation_configuration",
           "type": "boolean",
           "required": false
        },
        {
           "default": "",
           "name": "useInterval",
           "type": "string",
           "required": false
        },
        {
           "default": "SO-REF-DATA",
           "name": "controller_actor",
           "type": "string",
           "required": false
        },
        {
           "default": "",
           "name": "maxNumberofUEs",
           "type": "integer",
           "required": false
        },
        {
           "default": "",
           "name": "latency",
           "type": "integer",
           "required": false
        },
        {
           "default": "",
           "name": "cds_model_version",
           "type": "string",
           "required": false
        },
        {
           "default": "",
           "name": "uEMobilityLevel",
           "type": "string",
           "required": false
        },
        {
           "default": "",
           "name": "cds_model_name",
           "type": "string",
           "required": false
        },
        {
           "default": "",
           "name": "expDataRateUL",
           "type": "integer",
           "required": false
        },
        {
           "default": "",
           "name": "expDataRateDL",
           "type": "integer",
           "required": false
        },
        {
           "default": "",
           "name": "coverageAreaList",
           "type": "string",
           "required": false
        },
        {
           "default": "",
           "name": "resourceSharingLevel",
           "type": "string",
           "required": false
        }
     ],
     "serviceProperties": [
        {
           "default": true,
           "name": "skip_post_instantiation_configuration",
           "type": "boolean",
           "constraints": [
              {
                 "valid_values": [
                    true,
                    false
                 ]
              }
           ]
        },
        {
           "default": "SO-REF-DATA",
           "name": "controller_actor",
           "type": "string",
           "constraints": [
              {
                 "valid_values": [
                    "SO-REF-DATA",
                    "CDS",
                    "SDNC",
                    "APPC"
                 ]
              }
           ]
        },
        {
           "name": "maxNumberofUEs",
           "type": "integer",
           "required": false
        },
        {
           "name": "latency",
           "type": "integer",
           "required": false
        },
        {
           "name": "expDataRateUL",
           "type": "integer",
           "required": false
        },
        {
           "name": "sNSSAI",
           "type": "string",
           "required": false
        },
        {
           "name": "useInterval",
           "type": "string",
           "required": false
        },
        {
           "default": "39-00",
           "name": "plmnIdList",
           "type": "string",
           "required": false
        },
        {
           "name": "cds_model_version",
           "type": "string"
        },
        {
           "name": "uEMobilityLevel",
           "type": "string",
           "required": false
        },
        {
           "name": "cds_model_name",
           "type": "string"
        },
        {
           "name": "expDataRateDL",
           "type": "integer",
           "required": false
        },
        {
           "name": "coverageAreaList",
           "type": "string",
           "required": false
        },
        {
           "name": "resourceSharingLevel",
           "type": "string",
           "required": false
        }
     ],
     "serviceArtifact": []
  },
  "serviceProxy": [
     {
        "modelInfo": {
           "modelName": "ServiceProfile Service Proxy",
           "modelUuid": "ed00301c-51ec-46a4-b766-e3af50c210d2",
           "modelInvariantUuid": "071d426c-3f9b-44a9-9757-422043d80fc1",
           "modelVersion": "1.0",
           "modelCustomizationUuid": "81c5a468-37d3-4d8d-95f5-e72b0933d3d4",
           "modelInstanceName": "serviceprofile_proxy 0"
        },
        "toscaNodeType": "org.openecomp.nodes.serviceprofile_proxy",
        "description": "A Proxy for Service ServiceProfile",
        "sourceModelUuid": "94553b32-e075-4cb0-b309-dd318ebbf670"
     }
  ],
  "serviceAllottedResources": []
 }
}
  1. CreateCommunicationService–> prepareDoComposeE2E()

  1. To decompose the service based on serviceModelUuid

  1. CreateCommunicationService–> parseCSParamsFromReq()

  1. To parse the CreateCommunication parameter Request from the Request json

  1. Now sending PUT request to AAI based on globalSubscriberId and serviceType

  1. https://aai.onap:8443/aai/v19/business/customers/customer/{globalSubscriberId}/service-subscriptions/service- subscription/{seviceType}/service-instances/service-instance/{serviceInstanceId}

  2. Customer can be got by GET request with https://aai.onap:8443/aai/v19/business/customers/customer/{globalSubscriberId}

  3. Service-Subscription can be got by GET request with https://aai.onap:8443/aai/v19/business/customers/customer/{globalSubscriberId}/service-subscriptions/service- subscription/{seviceType}

  4. Request body for PUT request to the AAI from bpmn:

    {

    “service-instance-name”: “SliceService”, “service-role”: “communication-service”, “environment-context”: “01-70CAA6B”, “created-at”: “2020-06-23 05:02:56”, “model-invariant-id”: “d4df55ca-c985-46c9-8088-f952181f553e”, “model-version-id”: “bfc2775b-64ad-41e5-95fe-d3bc57df6c73”, “orchestration-status”: “processing”, “input-parameters”: “{ "service":{ "name":"SliceService", "description":"SliceService", "serviceInvariantUuid":"d4df55ca-c985-46c9-8088-f952181f553e", "serviceUuid":"bfc2775b-64ad-41e5-95fe-d3bc57df6c73", "globalSubscriberId":"5GCustomer", "serviceType":"5G", "parameters":{ "locationConstraints":[ ], "resources":[ { "resourceIndex":"1", "resourceName":"allottedResource", "resourceInvariantUuid":"eeefcd86-7b5b-41ae-9516-08acc5d59d92", "resourceUuid":"265da937-76c7-4152-98e3-5f0d0a844b7f", "resourceCustomizationUuid":"a4eda1d9-1af4-424b-997f-12c57b74c67a", "parameters":{ "locationConstraints":[ ], "resources":[ ], "requestInputs":{ } } } ], "requestInputs":{ttt "sST": "embb", "sNSSAI": "1-10101", "uEMobilityLevel": "stationary", "areaTrafficCapDL": 123, "maxNumberofUEs": 1000, "expDataRateUL": 2000, "plmnIdList": "39-00|39-01", "areaTrafficCapUL": 456, "latency": 300, "expDataRateDL": 400, "coverageAreaTAList": 101001, "activityFactor": 99, "resourceSharingLevel": "shared", "nstar0_allottedresource0_providing_service_uuid": "4e8d930b-7483-4b9b-8c82-4708638ade4a", "nstar0_allottedresource0_providing_service_invariant_uuid": "1899e5c1-df4e-43a8-a889-48c157dad7bc" } } }}”

    }

Response: Response is returned with an empty entity

  1. Sending PUT request to the AAI for communication service profile

https://aai.onap:8443/aai/v19/business/customers/customer/5GCustomer/service-subscriptions/service-subscription/5G/service-instances/service-instance/8a95e3ac-32cd-4ffb-b9e3-5366b393a7a2/communication-service-profiles/communication-service-profile/202a5e9a-d1d7-4afd-922f-3e7a709c780c

payload:

{“profile-id”:”202a5e9a-d1d7-4afd-922f-3e7a709c780c”,”max-number-of-UEs”:1000,”latency”:300,”exp-data-rate-UL”:2000,”exp-data-rate-DL”:400,”ue-mobility-level”:”stationary”,”resource-sharing-level”:”shared”}

Response: Response is returned with an empty entity

  1. CreateCommunicationService–> sendSyncResponse()

  1. Send a response to the API-Handler

  2. Response Body:

{
  "service": {
      "serviceId":"8a95e3ac-32cd-4ffb-b9e3-5366b393a7a2",
      "operationId":"a970a804-7ac5-4de9-b6db-17352afbc6fa"
  }
}
  1. CreateCommunicationService–> generateE2EServiceProfile()

  1. It gets the E2E service templete Id and change communication profile to E2E service profile

  2. Basically it generates the E2E service profile

  1. CreateCommunicationService–> preRequestSend2NSMF()

  1. It sets the payload to send to the other bpmn file

  1. Here based on the CreateCommunicationService bpmn structure required bpmn file will be called and corresponding to

    this bpmn, groovy file will be called. For example, Here CreateSliceService.groovy is being called.

  2. CreateCommunicationService–> processNSMFResponse()

  1. It processes the NSMF response code which was returned from other groovy file

  1. CreateCommunicationService–> createCSAndSSRelationship()

  1. It will create relationship between communication service and e2e service

  1. CreateCommunicationService–> createRelationShipInAAI()

  1. Sending a PUT request to make a relationship between two services https://aai.onap:8443/aai/v19/business/customers/customer/5GCustomer/service-subscriptions/service- subscription/5G/service-instances/service-instance/8a95e3ac-32cd-4ffb-b9e3-5366b393a7a2/relationship- list/relationship

  1. Request body:

    { “related-link”:”aai/v16/business/customers/customer/5GCustomer/service-subscriptions/service- subscription/5G/service-instances/service-instance/2e6c2d7f-85c0-4b1f-b7fd-5f2364c27ea7” }

  1. CreateCommunicationService–> prepareUpdateOperationStatus()

  1. prepare update operation status after create relationship in aai

  1. RequestDBUtil–> prepareUpdateOperationStatus()

  1. update operation status in requestDB

  2. DB Adapter Endpoint is: http://so-request-db-adapter.onap:8083/services/RequestsDbAdapter

PNF PnP support in Service Orchestration

Legacy PNF PNP BPMN workflows

By PNF PNP workflow we understand 2 BPMNs:

  • CreateAndActivatePnfResource

_images/CreateAndActivatePnfResource.png
  • ConfigurePnfResource

_images/ConfigurePnfResource.png

Both included in CreateVcpeResCustService_simplified BPMN

_images/goal3.png

Building Block based PNF PnP flows

_images/proposed_building_blocks.png
AssignPnfBB
  • Responsibility:

    • Creates PNF entry in AAI (with PNF name chosen by user)

    • Additionally stores PNF model-related parameters in AAI: * model-customization-id * model-invariant-id * model-version-id

    • Makes a link in AAI between Service entry and PNF entry

    • Sets PNF orchestration status in AAI to Assigned

  • Currently implemented in CreateAndActivatePnfResource.bpmn

WaitForPnfReadyBB
  • Responsibility:

    • Waits for “PNF ready” event sent from PRH to DMaaP * pnfCorrelationId from the event must match PNF instance name provided by the user during service instantiation

    • Sets PNF orchestration status in AAI to: * Register - when starting to wait for PNF ready event * Registered - when PNF ready event is successfully received

    • Currently implemented in CreateAndActivatePnfResource.bpmn

Support for config assign (ControllerExecutionBB, action: configAssign)
  • Responsibility: * Runs config assign via CDS

  • Currently implemented in ConfigurePnfResource.bpmn

  • We will reuse generic BPMN for calling CDS (ControllerExecutionBB)

  • Things to consider: * SkipPostInstantiationConfiguration should be taken into account

Support for config deploy (ControllerExecutionBB, action: configDeploy)
  • Responsibility: * Runs config deploy via CDS

  • Currently implemented in ConfigurePnfResource.bpmn

  • We will reuse generic BPMN for calling CDS (ControllerExecutionBB)

  • Things to consider: * SkipPostInstantiationConfiguration should be taken into account

ActivatePnfBB
  • Responsibility: * Sets PNF orchestration status in AAI as Active

Sequence in Service-Macro-Create flow
  1. AssignServiceInstanceBB

  2. CreateNetworkCollectionBB

  3. AssignNetworkBB

  4. AssignVnfBB

  5. AssignVolumeGroupBB

  6. AssignVfModuleBB

  7. AssignPnfBB

  8. WaitForPnfReadyBB

  9. ControllerExecutionBB (action: configAssign, scope: pnf)

  10. ControllerExecutionBB (action: configDeploy, scope: pnf)

  11. ActivatePnfBB

  12. ConfigAssignVnfBB

  13. CreateNetworkBB

  14. ActivateNetworkBB

  15. CreateVolumeGroupBB

  16. ActivateVolumeGroupBB

  17. CreateVfModuleBB

  18. ActivateVfModuleBB

  19. ConfigDeployVnfBB

  20. ActivateVnfBB

  21. ActivateNetworkCollectionBB

  22. ActivateServiceInstanceBB

Docker-config

In SO (Service Orchestration) every component running on docker engine and respective containers. here we can see how so is working with Dokcer.

CA(Certificate Authority)

Certificate Authorities/ CAs, issue Digital Certificates. Digital Certificates are verifiable small data files that contain identity credentials to help websites, people, and devices represent their authentic online identity (authentic because the CA has verified the identity). CAs play a critical role in how the Internet operates and how transparent, trusted transactions can take place online. CAs issue millions of Digital Certificates each year, and these certificates are used to protect information, encrypt billions of transactions, and enable secure communication.

CA(file)

/so/packages/docker/src/main/docker/docker-files/ca-certificates/onap-ca.crt

Example CA cirtifiacte:-

—–BEGIN CERTIFICATE—– MIIEczCCA1ugAwIBAgIBADANBgkqhkiG9w0BAQQFAD..AkGA1UEBhMCR0Ix EzARBgNVBAgTClNvbWUtU3RhdGUxFDASBgNVBAoTC0..0EgTHRkMTcwNQYD VQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5IENlcn..XRpb24gQXV0aG9y aXR5MRQwEgYDVQQDEwtCZXN0IENBIEx0ZDAeFw0wMD..TUwMTZaFw0wMTAy MDQxOTUwMTZaMIGHMQswCQYDVQQGEwJHQjETMBEGA1..29tZS1TdGF0ZTEU MBIGA1UEChMLQmVzdCBDQSBMdGQxNzA1BgNVBAsTLk..DEgUHVibGljIFBy aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFD..AMTC0Jlc3QgQ0Eg THRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCg..Tz2mr7SZiAMfQyu vBjM9OiJjRazXBZ1BjP5CE/Wm/Rr500PRK+Lh9x5eJ../ANBE0sTK0ZsDGM ak2m1g7oruI3dY3VHqIxFTz0Ta1d+NAjwnLe4nOb7/..k05ShhBrJGBKKxb 8n104o/5p8HAsZPdzbFMIyNjJzBM2o5y5A13wiLitE..fyYkQzaxCw0Awzl kVHiIyCuaF4wj571pSzkv6sv+4IDMbT/XpCo8L6wTa..sh+etLD6FtTjYbb rvZ8RQM1tlKdoMHg2qxraAV++HNBYmNWs0duEdjUbJ..XI9TtnS4o1Ckj7P OfljiQIDAQABo4HnMIHkMB0GA1UdDgQWBBQ8urMCRL..5AkIp9NJHJw5TCB tAYDVR0jBIGsMIGpgBQ8urMCRLYYMHUKU5AkIp9NJH..aSBijCBhzELMAkG A1UEBhMCR0IxEzARBgNVBAgTClNvbWUtU3RhdGUxFD..AoTC0Jlc3QgQ0Eg THRkMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcm..ENlcnRpZmljYXRp b24gQXV0aG9yaXR5MRQwEgYDVQQDEwtCZXN0IENBIE..DAMBgNVHRMEBTAD AQH/MA0GCSqGSIb3DQEBBAUAA4IBAQC1uYBcsSncwA..DCsQer772C2ucpX xQUE/C0pWWm6gDkwd5D0DSMDJRqV/weoZ4wC6B73f5..bLhGYHaXJeSD6Kr XcoOwLdSaGmJYslLKZB3ZIDEp0wYTGhgteb6JFiTtn..sf2xdrYfPCiIB7g BMAV7Gzdc4VspS6ljrAhbiiawdBiQlQmsBeFz9JkF4..b3l8BoGN+qMa56Y It8una2gY4l2O//on88r5IWJlm1L0oA8e4fR2yrBHX..adsGeFKkyNrwGi/ 7vQMfXdGsRrXNGRGnX+vWDZ3/zWI0joDtCkNnqEpVn..HoX —–END CERTIFICATE—–

Configurations:-

Every component has its own over-ride yaml file. We can over-ride the file according the Configurations and Dependencies required for Deploying.

Over-ride yaml for api-handler

Path:- /docker-config/volumes/so/config/api-handler-infra/onapheat/override.yaml

server:
   port: 8080
   tomcat:
       max-threads: 50
ssl-enable: false

mso:
 msoKey: 07a7159d3bf51a0e53be7a8f89699be7
 logPath: logs
 site-name: onapheat
 adapters:
   requestDb:
     endpoint: http://request-db-adapter:8083
     auth: Basic YnBlbDpwYXNzd29yZDEk
 catalog:
   db:
     spring:
       endpoint: http://catalog-db-adapter:8082
 db:
   auth: Basic YnBlbDpwYXNzd29yZDEk
 config:
   path: /src/main/resources/
 infra:
   default:
     alacarte:
       orchestrationUri: /mso/async/services/ALaCarteOrchestrator
       recipeTimeout: 180
       testApi: VNF_API
     service:
       macro:
         default:
           testApi: GR_API
 camundaURL: http://bpmn-infra:8081
 camundaAuth: AE2E9BE6EF9249085AF98689C4EE087736A5500629A72F35068FFB88813A023581DD6E765071F1C04075B36EA4213A
 async:
   core-pool-size: 50
   max-pool-size: 50
   queue-capacity: 500
 sdc:
   client:
     auth: F3473596C526938329DF877495B494DC374D1C4198ED3AD305EA3ADCBBDA1862
   activate:
     instanceid: test
     userid: cs0008
   endpoint: http://c1.vm1.mso.simpledemo.onap.org:28090
 tenant:
   isolation:
     retry:
   count: 3
 aai:
   endpoint: https://aai.api.simpledemo.onap.org:8443
   auth: 2630606608347B7124C244AB0FE34F6F
 extApi:
   endpoint: http://nbi.onap:8080/nbi/api/v3
 so:
   operational-environment:
     dmaap:
       username: testuser
       password: VjR5NDcxSzA=
       host: http://c1.vm1.mso.simpledemo.onap.org:28090
       auth: 51EA5414022D7BE536E7516C4D1A6361416921849B72C0D6FC1C7F262FD9F2BBC2AD124190A332D9845A188AD80955567A4F975C84C221EEA8243BFD92FFE6896CDD1EA16ADD34E1E3D47D4A
     publisher:
       topic: com.att.ecomp.mso.operationalEnvironmentEvent

spring:
 datasource:
   hikari:
     jdbcUrl: jdbc:mariadb://mariadb:3306/catalogdb
     username: cataloguser
     password: catalog123
     driver-class-name: org.mariadb.jdbc.Driver
     pool-name: catdb-pool
     registerMbeans: true
 jpa:
     show-sql: true
     hibernate:
       dialect: org.hibernate.dialect.MySQL5Dialect
       ddl-auto: validate
       naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
       enable-lazy-load-no-trans: true
 jersey:
   type: filter

 security:
   usercredentials:
   -
     username: sitecontrol
     password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
     role: SiteControl-Client
   -
     username: gui
     password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
     role: GUI-Client
   -
     username: infraportal
     password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
     role: InfraPortal-Client
   -
     username: InfraPortalClient
     password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
     role: InfraPortal-Client
   -
     username: bpel
     password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
     role: BPEL-Client
   -
     username: mso_admin
     password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
     role: ACTUATOR

request:
 datasource:
   hikari:
     jdbcUrl: jdbc:mariadb://mariadb:3306/requestdb
     username: requestuser
     password: request123
     driver-class-name: org.mariadb.jdbc.Driver
     pool-name: reqdb-pool
     registerMbeans: true
org:
 onap:
   so:
     cloud-owner: CloudOwner
     adapters:
       network:
         encryptionKey: 07a7159d3bf51a0e53be7a8f89699be7

Start the container

cd /home/root1/docker-config/

CMD:- ===

sudo docker-compose up -d

Example Output:

root1@slave-node:~/docker-config$ sudo docker-compose up -d docker-config_mariadb_1 is up-to-date Starting docker-config_catalog-db-adapter_1 … done Starting docker-config_request-db-adapter_1 … done Starting docker-config_bpmn-infra_1 … done Starting docker-config_vfc-adapter_1 … done Starting docker-config_sdc-controller_1 … done Starting docker-config_sdnc-adapter_1 … done Starting docker-config_openstack-adapter_1 … done Starting docker-config_api-handler-infra_1 … done Starting docker-config_so-monitoring_1 … done Starting docker-config_nssmf-adapter_1 … done

Example Output:

docker ps

Example Output:

root1@slave-node:~/docker-config$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d930caf28508 nexus3.onap.org:10001/onap/so/openstack-adapter “/app/wait-for.sh -q…” 5 weeks ago Up 30 seconds 0.0.0.0:8087->8087/tcp docker-config_openstack-adapter_1 599af283319e nexus3.onap.org:10001/onap/so/vfc-adapter “/app/wait-for.sh -q…” 5 weeks ago Up 30 seconds 0.0.0.0:8084->8084/tcp docker-config_vfc-adapter_1 5549305c8dd6 nexus3.onap.org:10001/onap/so/api-handler-infra “/app/wait-for.sh -q…” 5 weeks ago Up 27 seconds 0.0.0.0:8080->8080/tcp docker-config_api-handler-infra_1 59d3aa684ecb nexus3.onap.org:10001/onap/so/sdnc-adapter “/app/wait-for.sh -q…” 5 weeks ago Up 29 seconds 0.0.0.0:8086->8086/tcp docker-config_sdnc-adapter_1 ade4cef97bd3 nexus3.onap.org:10001/onap/so/bpmn-infra “/app/wait-for.sh -q…” 5 weeks ago Up 29 seconds 0.0.0.0:8081->8081/tcp docker-config_bpmn-infra_1 e9558560c4d7 nexus3.onap.org:10001/onap/so/sdc-controller “/app/wait-for.sh -q…” 5 weeks ago Up 25 seconds 0.0.0.0:8085->8085/tcp docker-config_sdc-controller_1 ae27ec2f8b04 nexus3.onap.org:10001/onap/so/so-monitoring “/app/wait-for.sh -q…” 5 weeks ago Up 26 seconds 0.0.0.0:8088->8088/tcp docker-config_so-monitoring_1 8d2c64d48f1a nexus3.onap.org:10001/onap/so/request-db-adapter “/app/wait-for.sh -q…” 5 weeks ago Up 32 seconds 0.0.0.0:8083->8083/tcp docker-config_request-db-adapter_1 a126dd29c540 nexus3.onap.org:10001/mariadb:10.1.11 “/docker-entrypoint.…” 5 weeks ago Up 17 minutes 0.0.0.0:32768->3306/tcp docker-config_mariadb_1

Inspect a docker image

This command shows interesting information about the structure of the mso image. Note that an image is NOT a running container. It is the template that a container is created from.

CMD:-

sudo docker inspect onap/so/api-handler-infra

Example Output:

[
{
  "Id": "sha256:2573165483e9ac87826da9c08984a9d0e1d93a90c681b22d9b4f90ed579350dc",
  "RepoTags": [
      "onap/so/api-handler-infra:1.3.0-SNAPSHOT",
      "onap/so/api-handler-infra:1.3.0-SNAPSHOT-20190213T0846",
      "onap/so/api-handler-infra:1.3.0-SNAPSHOT-latest",
      "onap/so/api-handler-infra:latest"
  ],
  "RepoDigests": [],
  "Parent": "sha256:66b508441811ab4ed9968f8702a0d0a697f517bbc10d8d9076e5b98ae4437344",
  "Comment": "",
  "Created": "2019-02-13T09:37:33.770342225Z",
  "Container": "8be46c735d21935631130f9017c3747779aab26eab54a9149b1edde122f7576d",
  "ContainerConfig": {
      "Hostname": "ac4a12e21390",
      "Domainname": "",
      "User": "",
      "AttachStdin": false,
      "AttachStdout": false,
      "AttachStderr": false,
      "Tty": false,
      "OpenStdin": false,
      "StdinOnce": false,
      "Env": [
          "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin",
          "LANG=C.UTF-8",
          "JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk",
          "JAVA_VERSION=8u191",
          "JAVA_ALPINE_VERSION=8.191.12-r0",
          "HTTP_PROXY=",
          "HTTPS_PROXY=",
          "http_proxy=",
          "https_proxy="
      ],
      "Cmd": [
          "/bin/sh",
          "-c",
          "#(nop) ",
          "CMD [\"/app/start-app.sh\"]"
      ],
      "ArgsEscaped": true,
      "Image": "sha256:66b508441811ab4ed9968f8702a0d0a697f517bbc10d8d9076e5b98ae4437344",
      "Volumes": {
          "/app/ca-certificates": {},
          "/app/config": {}
      },
      "WorkingDir": "/app",
      "Entrypoint": null,
      "OnBuild": [],
      "Labels": {}
  },
  "DockerVersion": "17.05.0-ce",
  "Author": "",
  "Config": {
      "Hostname": "ac4a12e21390",
      "Domainname": "",
      "User": "",
      "AttachStdin": false,
      "AttachStdout": false,
      "AttachStderr": false,
      "Tty": false,
      "OpenStdin": false,
      "StdinOnce": false,
      "Env": [
          "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin",
          "LANG=C.UTF-8",
          "JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk",
          "JAVA_VERSION=8u191",
          "JAVA_ALPINE_VERSION=8.191.12-r0",
          "HTTP_PROXY=",
          "HTTPS_PROXY=",
          "http_proxy=",
          "https_proxy="
      ],
      "Cmd": [
          "/app/start-app.sh"
      ],
      "ArgsEscaped": true,
      "Image": "sha256:66b508441811ab4ed9968f8702a0d0a697f517bbc10d8d9076e5b98ae4437344",
      "Volumes": {
          "/app/ca-certificates": {},
          "/app/config": {}
      },
      "WorkingDir": "/app",
      "Entrypoint": null,
      "OnBuild": [],
      "Labels": {}
  },
  "Architecture": "amd64",
  "Os": "linux",
  "Size": 245926705,
  "VirtualSize": 245926705,
  "GraphDriver": {
      "Data": null,
      "Name": "aufs"
  },
  "RootFS": {
      "Type": "layers",
      "Layers": [
          "sha256:503e53e365f34399c4d58d8f4e23c161106cfbce4400e3d0a0357967bad69390",
          "sha256:744b4cd8cf79c70508aace3697b6c3b46bee2c14f1c14b6ff09fd0ba5735c6d4",
          "sha256:4c6899b75fdbea2f44efe5a2f8d9f5319c1cf7e87151de0de1014aba6ce71244",
          "sha256:2e076d24f6d1277456e33e58fc8adcfd69dfd9c025f61aa7b98d500e7195beb2",
          "sha256:bb67f2d5f8196c22137a9e98dd4190339a65c839822d16954070eeb0b2a17aa2",
          "sha256:afbbd0cc43999d5c5b0ff54dfd82365a3feb826e5c857d9b4a7cf378001cd4b3",
          "sha256:1920a7ca0f8ae38a79a1339ce742aaf3d7a095922d96e37074df67cf031d5035",
          "sha256:1261fbaef67c5be677dae1c0f50394587832ea9d8c7dc105df2f3db6dfb92a3a",
          "sha256:a33d8ee5c18908807458ffe643184228c21d3c5d5c5df1251f0f7dfce512f7e8",
          "sha256:80704fca12eddb4cc638cee105637266e04ab5706b4e285d4fc6cac990e96d63",
          "sha256:55abe39073a47f29aedba790a92c351501f21b3628414fa49a073c010ee747d1",
          "sha256:cc4136c2c52ad522bd492545d4dd18265676ca690aa755994adf64943b119b28",
          "sha256:2163a1f989859fdb3af6e253b74094e92a0fc1ee59f5eb959971f94eb1f98094"
      ]
  }
 }
]

Mso-adapters-rest-interface

_images/module_structure.png

It mainly contains the payload that is provided to different rest calls in SO

Network

# 1. Network contain beans( classes with multiple attributes and thier setters and getters) and their corresponding mappers which will be used by the network adapter of SO. Contrail networking is used for cloud network automation

Beans

# a. ContrailPolicyRefthis class has following attribute

private ContrailPolicyRefSeq seq;

Usage: adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java- while creating network in openstack, network stack is created depending on stackParams. So if pFqdns(FQDN address object is used in order to use DNS names in firewall policies) are there in the inputrequest to createNetwork, then mergePolicyRefs method is called, where for each input pFqdns, a new ContrailPolicyRef is created and appended to a list. Then this is added as value to stackParams with policy_refsdata as key.

# b. ContrailPolicyRefSeqAttributes are

private String major;

private String minor ;

Usage: adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java- As this is an attribute to the ContrailPolicyRef explained above. So when a new ContrailPolicyRef() is created in mergePolicyRefs method, correspondingly a new ContrailPolicyRefSeq should be created.

# c. ContrailSubnet – Its a subnetwork having attributes

private ContrailSubnetIp subnet = new ContrailSubnetIp();

private String defaultGateway;

private String subnetName;

private Boolean enableDhcp(dynamic host config);

private Boolean addrFromStart = true;

private List<ContrailSubnetPool> allocationPools = new ArrayList<>();

private ContrailSubnetHostRoutes hostRoutes = new ContrailSubnetHostRoutes();

Usage : adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java- While creating network mergeSubnetsAIC3 is called if a list of subnets are present. The subnets are mapped to ContrailSubnet using ContrailSubnetMapper, and then are added to the heat template and stackparams which are used for network creation in openstack.

# d. ContrailSubnetHostRouteThis is an attribute defined in contrailsubnet and has following attributes

private String prefix;

private String nextHop;

Usage : This is an attribute of ContrailSubnetHostRoutes , which is used within the contrailSubnet and thus is used in network creation and updation.

# e. ContrailSubnetHostRoutes : This class is used to store an list of ContrailSubnetHostRoute

private List<ContrailSubnetHostRoute> hostRoutes = new ArrayList<>();

Usage : attribute of contrailSubnet

# f. ContrailSubnetIpattributes are

private String ipPrefix;

private String ipPrefixLen;

This class is used to store the cidr value , which is used as a interrouting table, taking as ipaddress/total no . Eg : 10.0.0.0/24 means starting ip is 10.0.0.0, and total no of ip address possible here is 256 (2^(32-24)), the last address being 10.0.0.255.

Usage : important attribute of contrailSubnet

# g. ContrailSubnetPoolattributes are starting and ending ip address of the subnet

private String start;

private String end;

Usage: a list of ContrailSubnetPool forms an important attribute of contrailSubnet

Mappers

# a. ContrailSubnetMapperIt is used to map the inputsubnet to a contrailSubnet
public ContrailSubnetMapper(Subnet inputSubnet) {

this.inputSubnet = inputSubnet;

}

The map method within is used for the mapping. Here first a contrailSubnet is created, and depending on whether the subnet has name or id, the contrailSubnet’s name is initialized, then if it has cidr , then a contrailSubnetIp is created, and is added into it, which is then added to contrailSubnet created before. Depending on whether input has allocationpool or hostroutes, these are casted into ContrailSubnetPool and ContrailSubnetHostRoute using ContrailSubnetPoolMapper and ContrailSubnetPoolMapper respectively.

Usage: adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java :The subnets are mapped to ContrailSubnet using ContrailSubnetMapper, and then are added to the heat template and stackparams which are used for network creation

# b. ContrailSubnetPoolMapper : It is used to map the pool within the subnets to contrailSubnetPool. Used within contrailSubnetMapper. Here, the particular pool is added only if it has both the start and end ip address.

# c. ContrailSubnetHostRoute : It is used to map the host routes within the subnets to contrailSubnetHostRoute. Used within contrailSubnetMapper. Here, the particular host route is added if either of the next hop or ip prefix is defined.

Network request

#2. Network request : It contains the payloads for different types of network requests

# a. ContrailNetwork :

private String shared = “false”;

private String external = “false”;

private List<RouteTarget> routeTargets;

private List<String> policyFqdns;

private List<String> routeTableFqdns;

Usage: contrailNetwork is an important attribute of CreateNetworkRequest, So is to be used where all the request to createNetwork is required.

# 1. adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/StackService.java : Here the input to createNetwork requires contrailNetwork parameter, so here it checks whether contrailNetwork is already present, if not a new is created.

# 2.bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapper.java : Here in createNetworkRequestMapper, createNetworkRequest is formed where in buildContrailNetwork, a new contrailNetwork is created and initialized. This request is used to create a network and set the corresponding execution variable

# b. CreateNetworkError: It extends NetworkExceptionResponse. And is used when an error occurs during network creation

# c. NetworkExceptionResponseit extends NetworkResponseCommon. Attributes are

private String message;

private MsoExceptionCategory category;

private Boolean rolledBack;

# d. NetworkResponseCommon: Attribute is

private String messageId;

# e. CreateNetworkRequest: extends NetworkRequestCommon

private String cloudSiteId;

private String tenantId;

private String networkId;

private String networkName;

private String networkType;

private String networkTypeVersion;

private String modelCustomizationUuid;

private String networkTechnology = “NEUTRON”;

private List<Subnet> subnets;

private ProviderVlanNetwork providerVlanNetwork;

private ContrailNetwork contrailNetwork;

private Boolean failIfExists = false;

private Boolean backout = true;

private Map<String, String> networkParams = new HashMap<>();

private MsoRequest msoRequest = new MsoRequest();

private boolean contrailRequest;

Usage : #1) bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIQueryTasks.java: Here in getNetworkVpnBinding, where VPN Binding data from AAI result is extracted. There in routeTargets is got, and is updated in the execution variable(“createNetworkRequest”).

#2)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterCreateTasks.java – Here in createnetwork returns a CreateNetworkRequest which is updated in execution variable(“networkAdapterRequest”)

#3)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/CreateNetwork.java - Here in createnetwork returns a CreateNetworkRequest which is updated in execution variable(“createNetworkRequest”)

#4) bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/NetworkAdapterClientImpl.java -Here createNetwork request is processed as a restclient post process with CreateNetworkRequest as input.

# f. CreateNetworkResponseextends NetworkResponseCommon

private String networkId;

private String neutronNetworkId;

private String networkStackId;

private String networkFqdn;

private Boolean networkCreated;

private Map<String, String> subnetMap;

private NetworkRollback rollback = new NetworkRollback();

Usage: #1)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java :here after the network is created, the l3 network is updated with those parameters which come from execution variable(“createNetworkResponse”)

#2)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterCreateTasks.java – depending on variable networkCreated of response, networkAdapterCreateRollback is set to true.

#3)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/NetworkAdapterClientImpl.java -Here createNetwork request is processed as a restclient post process with CreateNetworkRequest as input and CreateNetworkResponse as output

# g.DeleteNetworkError : extends NetworkExceptionResponse

# h. DeleteNetworkRequest:extends NetworkRequestCommon

private String cloudSiteId;

private String tenantId;

private String networkId;

private String networkStackId;

private String networkType;

private String modelCustomizationUuid;

private MsoRequest msoRequest = new MsoRequest();

Usage: #1)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterDeleteTasks.java – deleteNetworkRequestMapper returns a DeleteNetworkRequest, which is set to the execution variable(“networkAdapterRequest”)

#2)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/NetworkAdapterClientImpl.java - Here deleteNetwork request is processed as a restclient delete process with DeleteNetworkRequest as input.

#3)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapper.java – Here the deleteNetworkRequestMapper forms DeleteNetworkRequest object

Similarly others are also implemented and used

_images/nwrest.png

Sdnc request

#3. Sdnc request -These are required by the mso-sdnc-adapter

# a. RequestInformation – This is an important parameter of SDNCServiceRequest. Thud is used during the conversion of SDNCServiceRequest to XMLstring.

# b. ServiceInformation – This stores the important information like serviceId, servicetype and SubscriberName. Its parameter of SDNCServiceRequest.

# c. SDNCErrorCommon – it extends SDNCResponseCommon .

Usage : adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/sdncrest/SDNCServiceRequestConnector.java – catching exception if any happens during request creation and a new SDNCErrorCommon is created.

# d. SDNCRequestCommon – SDNCServiceRequest extends SDNCRequestCommon. It has some attributes like bpNotificationUrl(Endpoint on which BPMN can receive notifications from the SDNC adapter), bpTimeout ans sdncrequestId.

# e. SDNCServiceRequest

Usage: adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/sdncrest/SDNCServiceRequestTask.java – Here the runRequest is happening, where we are posting this request using a restclient call with SDNCServiceRequest as input.

# f. SDNCServiceResponse and SDNCServiceError

Usage:adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/sdncrest/SDNCServiceRequestTask.java – Here if the above runRequest returns a 2xx response code then a corresponding SDNCServiceResponse is created and returned or else SDNCServiceError is created and returned

Tenant request

#4. These provide classes to be used by the so-adapters.tenant.

The operator of a cloud can present unchangeable networks to the users, or give users the option to create, delete, connect and generally manipulate networks. The latter type of networks is called “tenant networks”.

Used in adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/TenantAdapterRest.java

The implementation and usage is similiar to the above classes

_images/tenantrest.png

VDU

#5. Vdu – these are used for the deployment and management of (cloud-agnostic) VDU . The abstract classes for instantiation of vdu, query vdu, delete vdu, update vdu are defined in here.

These are implemented in adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/utils/MsoCloudifyUtils.java and adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatUtils.java

Vnfrest

#6. Vnfrest – These are used to manage vnfs and vgs. These are used in the project similiar to networkrest Foreg : Usage of DeleteVfModuleRequest:

1)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterDeleteTasks.java – Here in deleteVfModuleRequestMapper creates a new DeleteVfModuleRequest, and is set to the execution variable(“VNFREST_REQUEST” ) and “deleteVfModuleRequest” execution variable is set true

2)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/VnfAdapterClientImpl.java - Here a delete rest request is send

_images/vnfrest.png

OPENSTACK

Openstack is classified into beans, exceptions, and mappers

MAPPERS

# 1) JAXBContext: It is used to convert a object to xml(marshalling) and to convert xml to object (unmarshalling) . These marshalling and unmarshalling are overriden in the map adapters in mappers.

# 2)NetworkInfoMapper – used to Capture the data from a Neutron Network object and cast it into a networkInfo( present in beans of openstack). Here in vlan information is located depending on network.getProviderNetworkType() , and if not then the segments within the network is iterated and is checked for the same.

Usage: It is used in adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoNeutronUtils.java , where on createNetwork, queryNetwork and updateNetwork , the network is mapped by NetworkInfoMapper into networkInfo and returned.

# 3) StackInfoMapper – used to Capture the data from a Stack object and cast it into a stackInfo( present in beans of openstack).

Usage: It is used in adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils , where all createStack, queryStack, updateStack, deleteStack is done, a new instance of stackInfo is returned

Exceptions

These are set of msoexceptions provided, and would be used depending on what exception needs to be handled

_images/msoexception.png

MSO-OPENSTACK-ADAPTER :

Cloud site operations

  • Here we have 3 api’s createCloudRegion, updateCloudRegion, deleteCloudRegion.

1.Create Cloud site/Cloud region:

Path: /v1/cloud-region

Method Type: POST

Request Body:
{

“id”: “MTN13”, “regionId”: “mtn13”, “cloudVersion”: “3.0”, “clli”: “MDT13”, “platform”: “testFlatform”, “orchestrator”: “testOrchestrator”, “cloudifyId”: “mtn13”, “cloudOwner”: “testCloudOwner”,

“identityService”: {

“identityUrl”: “testUrl”, “msoId”: “admin”, “msoPass”: “admin”, “projectDomainName”: “testDomain”, “userDomainName”: “testDomain”, “adminTenant”: “test”, “memberRole”: “test”, “tenantMetadata”: “test”, “identityServerType”: “test”, “identityAuthenticationType”: “test”, “lastUpdatedBy”: “test”, “created”: “date”, “updated”: “date”

},

“identityServiceId”: “123”, “lastUpdatedBy”: “test”, “created”: “test”, “updated”: “test”, “supportFabric”: “true”, “uri”: “test”

}

  • In this api we can create cloud region and cloud site and saving in catalog db and in AAI.

  • This api requires cloud-region-id and cloudSite as inputs.

  • In createCloudRegion two steps are there.

  • CreateRegionInCatalogDb(cloudSite) :- here we are creating cloud region in catalogdb if it is not exists in db(cloud_sites).

  • CreateCloudRegionInAAI(cloudSite) :- mapping cloudSite into cloudregion , this cloudregion we are creating in AAI and create CloudRegion NetworkTechnology Relationship.

2.Delete Cloud site:

  • Path:/v1/cloud-region/{cloud-region-id}/{cloud-owner}

  • Here we can delete Cloud site by cloud region id

3.Update Cloud site:

  • Path:/v1/cloud-region/{cloud-region-id}/{cloud-owner}

  • Here we can update Cloud site by cloud region id

Create Tenant in Cloud:

Path: http://host:port/vnfs/rest/v1/tenants

Method Type: POST

Request Body:

{ “cloudSiteId”: “DAN”, “tenantName”:”RAA_1”, “failIfExists”: true, “msoRequest”: { “requestId”: “ra1”, “serviceInstanceId”:”sa1” } }

RESPONSE:

{

“cloudSiteId”: “DAN”, “tenantId”: “128e10b9996d43a7874f19bbc4eb6749”, “tenantCreated”: true, “tenantRollback”: { “tenantId”: “128e10b9996d43a7874f19bbc4eb6749”, “cloudId”: “DAN”, // RAA? cloudId instead of cloudSiteId “tenantCreated”: true, “msoRequest”: { “requestId”: “ra1”, “serviceInstanceId”: “sa1”

}

}

Code Flow:

  • Call to MSO createTenant adapter then call to catalog db for cloud site info and from cloud site get IdentityServerType.

  • based on Cloud IdentityServerType it returns ORM or KEYSTONE Utils

  • Query for a tenant with the specified name in the given cloud. If the tenant exists, return an MsoTenant object. If not, return null.

  • Create a tenant with the specified name in the given cloud. If the tenant already exists, an Exception will be thrown. The MSO User will also be added to the “member” list of the new tenant to perform subsequent Nova/Heat commands in the tenant. If the MSO User association fails, the entire transaction will be rolled back.

TaskServices

1. CreateInventory

Flow Diagram:

_images/InventoryCreate.png

Code Flow:

  • Get cloud site using cloud region id from catalog db.

  • Instantiate heat bridge client by passing required values.

  • Authenticate heat bridge client.

  • If authentication is success we are getting all stack resources(openstack servers. servers contains openstack images and flavours.)

  • From stack resources we are getting osServers/ compute resources.

  • CreatePserversAndPinterfacesIfNotPresentInAai –Transform Openstack Server object to AAI Pserver object. create pserver in AAI if it is not exist. and get openstackresource id’s / ports – transform ports to pinterface Object in AAI.

  • After extract osimages and os flavours from osservers.

  • After that transform osimages to AAI images and osflavours to AAI flavors and add to AAI.

  • Create Vservers in AAI and make relationships to AAI image, AAI flavor, AAI pserver, vf-module.

  • Add Vservers and Linterfaces to AAI–Transform port to Linterface and for that port Get Ip addresses and updateLInterfaceIps and updateLInterfaceVlan.

  • Finally update AAI.

2. AuditCreateStack

Flow Diagram:

_images/InventoryAddAudit.png

Code Flow:

  • First we are capturing entry timestamp, MSO REQUESTID, Servicename/topic name,partnername as openstack adapter, invocation id is generating one random uuid.

  • After that getting auditInventory details from externalTask object

  • From auditInventory object we are getting cloud region,clowd owner,tenant id, heatstack name.these details we are passing to get AAIObjectAuditList.

  • Use cloudRegion, tenantId, heatStackName to get resources from Heat client.

  • To get resources we need heat client it means getting keystone url and token.

  • Get keystone url based on server type(keystone/keystonev3)

  • From resources object we are getting novaResources and resource groups and neutronPortDetails.

  • Create VserverSet by passing resources, novaResources, neutronPortDetails and setting up servers with ports to Set of Servers.

  • From resource groups we are getting Link(stackLink) from that link we are extracting resource path .if path is present we are Fetching nested Resource Stack Information.

  • audit all vservers,l-interfaces and sub l-interfaces. and checking in these vservers , l-interfaces and sub interfaces are existed or not in AAI.

  • If AAIObjectAuditList is present then we are setting audit type as create and Heat stack name to AAIObjectAuditList.

  • If Audit create success putting in variable to complete external task other wise sending exception.

  • If retrycount=1 sending error as retrycount exhausted.

3. AuditQueryStack

Flow Diagram:

_images/InventoryQueryAudit.png

Code Flow:

  • Get AuditInventory details from external task.

  • Get AAIObjectAuditList from auditHeatStack by passing these parametersauditInventory.getCloudRegion(),auditInventory.getCloudOwner(), auditInventory.getTenantId(), auditInventory.getHeatStackName().

  • Fetching Top Level Stack Information.i.e get all the heat model resources.

  • From heat model resources get all OS::Nova::Servers and OS::Heat::ResourceGroups and neutronPortDetails.

  • Once u got all the stack info u create vserverset and add that vserverset to AAIObjectAuditList.

  • After add AAIObjectAuditList to requestdb if it is not exist in requestdb.

  • If it is success complete the external task.

4. AuditDeleteStack

Flow Diagram:

_images/InventoryDeleteAudit.png

Code Flow:

  • Get AuditInventory details from external task

  • GetStackDataFromRequestDb usiing AuditInventory details.

  • Get RequestProcessingData from requestdb using auditInventory.getVfModuleId(),auditInventory.getHeatStackName(), “AuditStackData”.

  • From RequestProcessingData get AAIObjectAuditList.

  • If AAIObjectAuditList is empty check vservers is exist or not in AAI and set that result as setDoesObjectExist(true/false).

  • Else Auditing Vservers based on vf module relationships–i.e based on genericVnfId and vfModuleName get all the vservers and create AAIObject and set setDoesObjectExist(true) and set that object to list.

  • After that set audit type as delete and heatstackname and check that audit create success or not.

  • If it is success complete the external task.

5. DeleteInventory

Flow Diagram:

_images/DeleteInventory.png

Code Flow:

  • Get CloudInformation from external task.

  • First get CloudSite details from catalog db by using regionid.

  • From CloudSite get CloudIdentity details.

  • Create a heatbridgeclient. and authenticate the heatbridge.

  • After that delete the VFmodule data using vnfid and vf moduleid.

  • Once delete success complete the external task.

6. StackService

Flow Diagram:

_images/OpenstackAdapterInvoke.png

Code Flow:

  • From external task getting openstackAdapterTaskRequest and adding to string(xmlRequest).

  • From xmlrequest we are getting requestType.

  1. If requestType is createVolumeGroupRequest then we are creating volume group.

  • Marshalling xmlRequest to CreateVolumeGroupRequest.

  • From CreateVolumeGroupRequest getting completeVnfVfModuleType.

  • After that we are creating vf module by passing required paremeters.

  • If request type Start with X then we are orchestrating a VNF - NOT a module!

  • RequestType start with Volume then then we are sending true as volume request.

  • Creating a VnfRollback object by passing required parameters.

  • If nestedStackId is not null we are getting nested heat stack(stack information).

  • If nested heat stack is not null we are getting that output and storing into nestedVolumeOutputs object.

  • If nestedBaseStackId is not null we are getting nestedBaseHeatStack information and setting output to nestedBaseHeatStack.

  • If modelCustomizationUuid is available then with that mcu we are getting VFModuleCustomization(vfmc);

  • If we get VFModuleCustomization then we are extracting VfModule.

  • If vf version is not null then we will get vnfresource by passing vnftype and vnfversion.

  • By here - we would have either a vf or vnfResource.

  • If vf module is not null we are geting vnfresource from vf and from this vnfresource we are getting minversionvnf and maxversionvnf.

  • If minversionvnf and maxversionvnf are not null we are checking cloudConfig is null or not, if cloudConfig is not null then we are getting cloud site intormation by passing cloud site id. once we get the cloud site details we are getting min and max cloud site versions.

  • By the time we get here - heatTemplateId and heatEnvtId should be populated (or null)

  • If it is old way we will get heatTemplate directly. else if vf module is not null then

  • If it is a volume request then we will get volumeheattemplate and volumeheatenvironment.

  • If it is not a volume request then we will get ModuleHeatTemplate and HeatEnvironment.

  • Once we get heat templates we are getting nestedtemplates.

  • Also add the files: for any get_files associated with this vnf_resource_id

  • Add ability to turn on adding get_files with volume requests (by property).

  • If it is not a volume request get heat files from vf module.

  • CheckRequiredParameters in MsoVnfAdapterImpl.CHECK_REQD_PARAMS.

  • Parse envt entries to see if reqd parameter is there (before used a simple grep

  • Only submit to openstack the parameters in the envt that are in the heat template

  • Convert what we got as inputs (Map<String, String>) to a Map<String, Object> - where the object matches the param type identified in the template This will also not copy over params that aren’t identified in the template

  • Now simply add the outputs as we received them - no need to convert to string

  • Add in the volume stack outputs if applicable

  • Get all heat template parameters and add to list.

  • Check for missing parameters null or not.if no missing parameters we can proceed for next step.

  • Next create stack with all required values.

  • After creating add heat stackname to vfrollback and copy heatstack outputs to outputs value. so now vf module is created successfully.

  • After sending the response to create volume group.once it is created that response we are setting to VolumeGroup response object.

  1. If requestType is createVfModuleRequest then we are creating VfModule.

  • Marshalling xmlRequest to CreateVolumeGroupRequest.

  • From CreateVolumeGroupRequest getting completeVnfVfModuleType.

  • After that we are creating vf module by passing required paremeters.

  • If request type Start with X then we are orchestrating a VNF - NOT a module!

  • RequestType start with Volume then then we are sending true as volume request.

  • Creating a VnfRollback object by passing required parameters.

  • If nestedStackId is not null we are getting nested heat stack(stack information).

  • If nested heat stack is not null we are getting that output and storing into nestedVolumeOutputs object.

  • If nestedBaseStackId is not null we are getting nestedBaseHeatStack information and setting output to nestedBaseHeatStack.

  • If modelCustomizationUuid is available then with that mcu we are getting VFModuleCustomization(vfmc);

  • If we get VFModuleCustomization then we are extracting VfModule.

  • If vf version is not null then we will get vnfresource by passing vnftype and vnfversion.

  • By here - we would have either a vf or vnfResource.

  • If vf module is not null we are geting vnfresource from vf and from this vnfresource we are getting minversionvnf and maxversionvnf.

  • If minversionvnf and maxversionvnf are not null we are checking cloudConfig is null or not, if cloudConfig is not null then we are getting cloud site intormation by passing cloud site id. once we get the cloud site details we are getting min and max cloud site versions.

  • By the time we get here - heatTemplateId and heatEnvtId should be populated (or null)

  • If it is old way we will get heatTemplate directly. else if vf module is not null then

  • If it is a volume request then we will get volumeheattemplate and volumeheatenvironment.

  • If it is not a volume request then we will get ModuleHeatTemplate and HeatEnvironment.

  • Once we get heat templates we are getting nestedtemplates.

  • Also add the files: for any get_files associated with this vnf_resource_id

  • Add ability to turn on adding get_files with volume requests (by property).

  • If it is not a volume request get heat files from vf module.

  • CheckRequiredParameters in MsoVnfAdapterImpl.CHECK_REQD_PARAMS.

  • Parse envt entries to see if reqd parameter is there (before used a simple grep

  • Only submit to openstack the parameters in the envt that are in the heat template

  • Convert what we got as inputs (Map<String, String>) to a Map<String, Object> - where the object matches the param type identified in the template This will also not copy over params that aren’t identified in the template

  • Now simply add the outputs as we received them - no need to convert to string

  • Add in the volume stack outputs if applicable

  • Get all heat template parameters and add to list.

  • Check for missing parameters null or not.if no missing parameters we can proceed for next step.

  • Next create stack with all required values.

  • After creating add heat stackname to vfrollback and copy heatstack outputs to outputs value. so now vf module is created successfully.

  1. If requestType is deleteVfModuleRequest then we are deleting VfModule .

  • Get stackinfo using msoHeatUtils by passing cloudSiteId, cloudOwner, tenantId, vnfName parameters.

  • After that using modelCustomizationUuid we are getting VFModuleCustomizaiton–VFModule–heattemplate.

  • After that we are callling msoHeatUtils.deleteStack to delete StackInfo once it deletes we are updating status as deleted using msoHeatUtils.updateResourceStatus.

  1. If requestType is deleteVolumeGroupRequest then we are deleting volume group.

  • Making DeleteVolumeGroupRequest by Unmarshalling xml request.

  • Getting stack information by passing stackName, cloudSiteId, tenantId.

  • If current stack is null then we confirm that heat status not found.

  • If current stack is not null then we are deleting the stack.

  • Once volumegroup is deleted we are setting the response to perticular response class.

  1. If requestType is createNetworkRequest then we are creating network.

  • Making CreateNetworkRequest by Unmarshalling xmlrequest.

  • Check request is contrailRequest or not if it is contrailRequest we are setting shared,external,routeTargets,fqdns,routeTable values else we are setting physicalNetworkName and vlans.

  • Now all the above required values we are passing to create network.

  • Build a default NetworkRollback object (if no actions performed).

  • Getting the cloud site by passing cloudsite id.

  • After we are doing a network check and Retrieve the Network Resource definition.

  • If modelCustomizationUuid null and networkType is not null based on networkType we are getting Network Resource.

  • If modelCustomizationUuid not null then based on modelCustomizationUuid we are getting NetworkResourceCustomization and from that we are getting Network Resource.

  • If NetworkResourceCustomization is null then based on modelCustomizationUuid we are getting CollectionNetworkResourceCustomization and from that we are getting Network Resource.

  • Even though Network Resource is null we are sending error Unable to get network resource with NetworkType.

  • From the network resource we are extracting mode and network type.

  • All Networks are orchestrated via HEAT or Neutron if it is other than that we are sending error.

  • After that we are checking network resorce min and max versions with cloud site version if version is not supported throwing error.

  • After that validating the network parameters that if any parameter is missing.

  • Once we Retrieve the Network Resource we are getting heat template and NetworkType from that.

  • From the heat template we are getting template and checking that template contains os3nw if it is contains making flag is true.

  • First, look up to see if the Network already exists (by name).For HEAT orchestration of networks, the stack name will always match the network name

  • If stack is already exist with the network name throw an error.

  • After that from stackinfo get network id and network fqdn and get outputs from Stackinfo.

  • After that get subnetIdMap based on one subnet_id output or multiples subnet_%aaid% outputs from Stackinfo outputs.

  • After that update the updateResourceStatus as exits in requestdb.

  • Now we are Ready to deploy the new Network and Build the common set of HEAT template parameters

  • Validate (and update) the input parameters against the DB definition

  • Shouldn’t happen unless DB config is wrong, since all networks use same inputs and inputs were already validated.

  • If subnets are not null and template is os3template then mergesubnetsAIC3.

  • If subnets are not null and template is not os3template then merge subnets.

  • If policyFqdns are not null & os3template true then mergePolicyRefs.

  • After that deploy the network stack– create stack and once stack is created save into stackinfo.

  • For Heat-based orchestration, the MSO-tracked network ID is the heat stack, and the neutronNetworkId is the network UUID returned in stack outputs.

  • After update the resource status like network created successfully.

  • After set response to CreateNetworkResponse object.

  1. If requestType is deleteNetworkRequest then we are deleting network.

  • Form a DeleteNetworkRequest by unmarshlling Xml request.

  • check for mandatory fields networkId, cloudSiteId, tenantId.

  • If it is there Retrieve the Network Resource definition.

  • After that get networkResource.from networkResource get heat template.

  • After that delete stackinfo udpate resource status as deleted.

  1. If requestType is updateNetworkRequest then we are updating Network.

  • Make UpdateNetworkRequest by unmarshalling xmlRequest.

  • Check the params contains key shared and external if it is contains get that shared and external keys.

  • Check the request is ContrailRequest or not, if it is ContrailRequest then get routeTargets , fqdns, routeTable from the actual request.

  • If it is not ContrailRequest then get the ProviderVlanNetwork details like physicalNetworkName and vlans.

  • Params to update network-req.getCloudSiteId(), req.getTenantId(), req.getNetworkType(),req.getModelCustomizationUuid(), req.getNetworkStackId(), req.getNetworkName(), physicalNetworkName,vlans, routeTargets, shared, external, req.getSubnets(), fqdns, routeTable, req.getMsoRequest(), subnetIdMap, networkRollback.

  • Update Network adapter with Network using networkName, networkType,cloudSiteId, tenantId.

  • Capture execution time for metrics.

  • Build a default rollback object (no actions performed)

  • Get cloud site details from catalog db using cloud site id.

  • If cloud site is not present send the error message like CloudSite does not exist in MSO Configuration.

  • Getting the cloud site by passing cloudsite id.

  • After we are doing a network check and Retrieve the Network Resource definition.

  • If modelCustomizationUuid null and networkType is not null based on networkType we are getting Network Resource.

  • If modelCustomizationUuid not null then based on modelCustomizationUuid we are getting NetworkResourceCustomization and from that we are getting Network Resource.

  • If NetworkResourceCustomization is null then based on modelCustomizationUuid we are getting CollectionNetworkResourceCustomization and from that we are getting Network Resource.

  • Even though Network Resource is null we are sending error Unable to get network resource with NetworkType.

  • From the network resource we are extracting mode and network type.

  • All Networks are orchestrated via HEAT or Neutron if it is other than that we are sending error.

  • After that we are checking network resorce min and max versions with cloud site version if version is not supported throwing error.

  • After that validating the network parameters that if any parameter is missing.

  • Once we Retrieve the Network Resource we are getting heat template and NetworkType from that.

  • Use an MsoNeutronUtils for all Neutron commands

  • If Orchestaration mode is NEUTRON Verify that the Network exists and For Neutron-based orchestration, the networkId is the Neutron Network UUID.

  • Get NetworkInfo from cloud site using networkId, tenantId, cloudSiteId as params.

  • If NetworkInfo is null then throw the error message as Network is does not exist.

  • Update the network in cloud site which is in catalog db using cloudSiteId,tenantId,networkId, neutronNetworkType, physicalNetworkName, vlans as params.

  • Add the network ID and previously queried vlans to the rollback object.

  • Save previous parameters such as NetworkName,PhysicalNetwork,Vlans to the NetworkRollback.

  • If Orchestaration mode is HEAT then First, look up to see that the Network already exists. For Heat-based orchestration, the networkId is the network Stack ID.

  • Get StackInfo by querystack using cloudSiteId, CLOUD_OWNER, tenantId, networkName.

  • If StackInfo is null throw error as Network not found else continue the flow.

  • Get the previous parameters such as previousNetworkName and previousPhysicalNetwork for rollback from StackInfo.

  • Get the previous vlans from the heat params and Update Stack with Previous VLANS.

  • Now we are Ready to deploy the updated Network via Heat.

  • Get the HeatTemplate from NetworkResource and now we got HEAT Template from DB.

  • Now get the OS::ContrailV2::VirtualNetwork property from property file , if template contains os3nw set flag as true.

  • Build the common set of HEAT template parameters such as neutronNetworkType, networkName, physicalNetworkName, vlans, routeTargets, shared, external, os3template.

  • Validate and update the input parameters against the DB definition and Shouldn’t happen unless DB config is wrong, since all networks use same inputs.

  • If subnets are not null and template is os3template then mergesubnetsAIC3.

  • If subnets are not null and template is not os3template then merge subnets.

  • If policyFqdns are not null & os3template true then mergePolicyRefs.

  • If routeTableFqdns are not null os3template not null then mergeRouteTableRefs using routeTableFqdns, stackParams as params.

  • Get outputs from StackInfo and if key is contains subnet and os3template not null then one subnet output expected else multiples subnet outputs allowed.

  • Reach this point if createStack is successful.Populate remaining rollback info and response parameters and save previous parameters.

  • Now Network successfully updated via HEAT.

  1. If requestType is rollbackNetworkRequest then we are doing rollbackNetwork.

  • Make RollbackNetworkRequest by unmarshalling xmlRequest.

  • Get NetworkRollback from RollbackNetworkRequest.

  • If pollForCompletion is null then set flag as true.

  • Get the elements of the VnfRollback object for easier access.

  • ROLLBACK Network using networkId, cloudSiteId, tenantId.

  • If NetworkCreated then use tenantId, CLOUD_OWNER, cloudSiteId, networkId, pollForCompletion, timeoutMinutes params to delete stack.

  • Once deletion is success set the response to RollbackNetworkResponse.

  • Once task stack service is success set the status completed for the external task.

7. PollService

Flow Diagram:

_images/OpenstackAdapterPoller.png

Code Flow:

  • Get openstackAdapterTaskRequest as xmlRequest from the the external task.

  • Get requestType from the xmlRequest.

  1. If request type is createVolumeGroupRequest then Execute External Task Rollback Service for Create Volume Group.

  • Create CreateVolumeGroupRequest by unmarshalling xmlRequest.

  • Use CloudSiteId, CloudOwner, TenantId,VolumeGroupName, MsoRequest ,pollStackStatus as params to delete vnf.

  • Call to openstack to delete vnf if it is success nothing to return if it is failure return failure exception.

  • Once it is success set the boolean flags pollRollbackStatus and status as true.

  1. If request type is createVfModuleRequest then Execute External Task Rollback Service for Create Vf Module.

  • Create CreateVfModuleRequest by unmarshalling xmlRequest.

  • Use CloudSiteId, CloudOwner, TenantId,VfModuleName, VnfId, VfModuleId, ModelCustomizationUuid,MsoRequest ,Holder as params to delete vf module.

  • Call to openstack to get the stack outputs.

  • If modelCustomizationUuid is not null then use as a param to get the VfModuleCustomization and from VfModuleCustomization get the vf module details.

  • Use tenantId, cloudOwner, cloudSiteId, vnfName, pollForCompletion, timeoutMinutes as params to delete the stack .once it is success update the resources.

  • Once it is success set the boolean flags pollRollbackStatus and status as true.

  1. If requestType is deleteVfModuleRequest then Execute External Task Poll Service for Delete Vf Module.

  • Create DeleteVfModuleRequest by unmarshalling xmlRequest.

  • Get stackId from external task by using that get Stack.

  • Get pollingFrequency from properties file and calculate no.of polling attempts.

  • Using cloudSiteId, tenantId get Heatclient and once you got heatclient querystack to get the Stack object.

  • If Stack object is not null update the stack status in requestdb and it returns Stack object.

  • If Stack object is not null check the status is DELETE_COMPLETE then Stack Deletion completed successfully.

  1. If requestType is deleteVolumeGroupRequest then Execute Execute External Task Poll Service for Delete Volume Group.

  • Create DeleteVfModuleRequest by unmarshalling xmlRequest.

  • Get stackId from external task by using that get Stack.

  • Get pollingFrequency from properties file and calculate no.of polling attempts.

  • Using cloudSiteId, tenantId get Heatclient and once you got heatclient querystack to get the Stack object.

  • If Stack object is not null update the stack status in requestdb and it returns Stack object.

  • If Stack object is not null check the status is DELETE_COMPLETE then Stack Deletion completed successfully.

  1. If requestType is deleteNetworkRequest then Execute External Task Poll Service for Delete Network.

  • Create DeleteVfModuleRequest by unmarshalling xmlRequest.

  • Get stackId from external task by using that get Stack.

  • Get pollingFrequency from properties file and calculate no.of polling attempts.

  • Using cloudSiteId, tenantId get Heatclient and once you got heatclient querystack to get the Stack object.

  • If Stack object is not null update the stack status in requestdb and it returns Stack object.

  • If Stack object is not null check the status is DELETE_COMPLETE then Stack Deletion completed successfully.

  1. If requestType is createNetworkRequest then get the PollRollbackStatus from the external task.

  • If pollRollbackStatus is true then Execute External Task Poll Service for Rollback Create Network.

  • Get stackId from external task by using that get Stack.

  • Get pollingFrequency from properties file and calculate no.of polling attempts.

  • Using cloudSiteId, tenantId get Heatclient and once you got heatclient querystack to get the Stack object.

  • If Stack object is not null update the stack status in requestdb and it returns Stack object.

  • If Stack object is not null check the status is DELETE_COMPLETE then Stack Deletion completed successfully.

  • If pollRollbackStatus is false then Execute External Task Poll Service for Create Network.

  • Get stackId from external task by using that get Stack.

  • Get pollingFrequency from properties file and calculate no.of polling attempts.

  • Using cloudSiteId, tenantId get Heatclient and once you got heatclient querystack to get the Stack object.

  • If Stack object is not null update the stack status in requestdb and it returns Stack object.

  • If Stack object is not null check the status is CREATE_COMPLETE then Stack Creation completed successfully.

  1. If requestType is createNetworkRequest then Execute External Task Rollback Service for Create Network.

  • Get stackId from external task by using that get Stack.

  • Get pollingFrequency from properties file and calculate no.of polling attempts.

  • Using cloudSiteId, tenantId get Heatclient and once you got heatclient querystack to get the Stack object.

  • If Stack object is not null update the stack status in requestdb and it returns Stack object.

  • If Stack object is not null check the status is UPDATE_COMPLETE then Stack Updation completed successfully.

  • Once task stack service is success set the status completed for the external task.

8. RollbackService

Flow Diagram:

_images/OpenstackAdapterRollback.png

Code Flow:

  • Get openstackAdapterTaskRequest as xmlRequest from the the external task.

  • Get requestType from the xmlRequest.

  1. If request type is createVolumeGroupRequest then Execute External Task Rollback Service for Create Volume Group.

  • Making DeleteVolumeGroupRequest by Unmarshalling xml request.

  • Getting stack information by passing stackName, cloudSiteId, tenantId.

  • If current stack is null then we confirm that heat status not found.

  • If current stack is not null then we are deleting the stack.

  • Once volumegroup is deleted we are setting the response to perticular response class.

  1. If request type is createVfModuleRequest then Execute External Task Rollback Service for Create Vf Module.

  • Get stackinfo using msoHeatUtils by passing cloudSiteId, cloudOwner, tenantId, vnfName parameters.

  • After that using modelCustomizationUuid we are getting VFModuleCustomizaiton–VFModule–heattemplate.

  • After that we are callling msoHeatUtils.deleteStack to delete StackInfo once it deletes we are updating status as deleted using msoHeatUtils.updateResourceStatus.

  • Once it is success set the boolean flags pollRollbackStatus and status as true.

  1. If request type is createNetworkRequest then Execute External Task Rollback Service for Create Network.

  • Form a DeleteNetworkRequest by unmarshlling Xml request.

  • Check for mandatory fields networkId, cloudSiteId, tenantId.

  • If it is there Retrieve the Network Resource definition.

  • After that get networkResource.from networkResource get heat template.

  • After that delete stackinfo udpate resource status as deleted.

  • Once task stack service is success set the status completed for the external task.

CXF-logging:

It is a logging framework from SO. Here basically we are having 2 interceptors which extends AbstractSoapInterceptor.

SOAPLoggingInInterceptor:

  • This interceptor is responsible for Capturing requestId , client ip address , invocation id, service name, instance id, entry timestamp , log timestamp, Elapsed time for each request and update the MDC logger with staus In-progress.

SOAPLoggingOutInterceptor:

  • This interceptor is responsible for log timestamp , elapsed time for each request and checks for if there is any exception update the MDC loggers with 500 response code otherwise update the status as completed.

cxf-logging Used By below components of SO:

The cxf-logging framework is used by below components of so.

mso-openstack-adapter. mso-requests-db-adapter. mso-sdnc-adapter. mso-infrastructure-bpmn.

cxf-logging dependency for using in other components:

<dependency>

<groupId>org.onap.so</groupId> <artifactId>cxf-logging</artifactId> <version>${project.version}</version>

</dependency>

pom.xml:

<?xml version=”1.0”?> <project xmlns=”http://maven.apache.org/POM/4.0.0” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

<modelVersion>4.0.0</modelVersion> <parent>

<groupId>org.onap.so</groupId> <artifactId>so</artifactId> <version>1.6.0-SNAPSHOT</version>

</parent> <name>CXFLogging</name> <description>Common CXF Logging Classes</description> <dependencies>

<dependency>

<groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-client</artifactId> <version>${cxf.version}</version>

</dependency>

<dependency>

<groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-bindings-soap</artifactId> <version>${cxf.version}</version>

</dependency>

<dependency>

<groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf.version}</version>

</dependency>

<dependency>

<groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId>

</dependency>

<dependency>

<groupId>org.slf4j</groupId> <artifactId>slf4j-ext</artifactId>

</dependency>

<dependency>

<groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId>

</dependency>

</dependencies>

<build>
<resources>
<resource>

<directory>src/main/resources</directory> <filtering>true</filtering>

</resource>

<resource>

<directory>src/main/java</directory>

<includes>

<include>*.java</include>

</includes>

</resource>

</resources>

</build>

<artifactId>cxf-logging</artifactId>

</project>

Configuration file:

Here we can do configure the logger properties for the cxf-logging.

<configuration>

<property name=”p_tim” value=”%d{&quot;yyyy-MM-dd’T’HH:mm:ss.SSSXXX&quot;, UTC}”/>

<property name=”p_lvl” value=”%level”/>

<property name=”p_log” value=”%logger”/>

<property name=”p_mdc” value=”%replace(%replace(%mdc){’t’,’\\t’}){’n’, ‘\\n’}”/>

<property name=”p_msg” value=”%replace(%replace(%msg){’t’, ‘\\t’}){’n’,’\\n’}”/>

<property name=”p_exc” value=”%replace(%replace(%rootException){’t’, ‘\\t’}){’n’,’\\n’}”/>

<property name=”p_mak” value=”%replace(%replace(%marker){’t’, ‘\\t’}){’n’,’\\n’}”/>

<property name=”p_thr” value=”%thread”/>

<property name=”pattern” value=”%nopexception${p_tim}t${p_thr}t${p_lvl}t${p_log}t${p_mdc}t${p_msg}t${p_exc}t${p_mak}t%n”/>

<appender name=”STDOUT” class=”ch.qos.logback.core.ConsoleAppender”>

<encoder>

<pattern>${pattern}</pattern>

</encoder>

</appender>

<appender name=”test”

class=”org.onap.so.utils.TestAppender” />

<logger name=”com.att.ecomp.audit” level=”info” additivity=”false”>

<appender-ref ref=”STDOUT” />

</logger>

<logger name=”com.att.eelf.metrics” level=”info” additivity=”false”>

<appender-ref ref=”STDOUT” />

</logger>

<logger name=”com.att.eelf.error” level=”WARN” additivity=”false”>

<appender-ref ref=”STDOUT” />

</logger>

<logger name=”org.onap” level=”${so.log.level:-DEBUG}” additivity=”false”>

<appender-ref ref=”STDOUT” />

<appender-ref ref=”test” />

</logger>

<logger name=”org.flywaydb” level=”DEBUG” additivity=”false”> <appender-ref ref=”STDOUT” />

</logger>

<logger name=”ch.vorburger” level=”WARN” additivity=”false”>

<appender-ref ref=”STDOUT” />

</logger>

<root level=”WARN”>

<appender-ref ref=”STDOUT” /> <appender-ref ref=”test” />

</root>

</configuration>

Instantiate

The following guides are provided to describe tasks that a user of ONAP may need to perform when instantiating a service.

Instantiation includes the following topics:

Pre Service instantiation Operations

Several operations need to be performed after Service model distribution, but before instantiating a service.

Those operations are only available via REST API requests.

Various tools can be used to send REST API requests.

Here after are examples using “curl” command line tool that you can use in a Unix Terminal.

Declare owningEntity, lineOfBusiness, Platform and Project

At one point during Service Instantiation, the user need to select values for those 4 parameters

  • Owning Entity

  • Line Of Business

  • Platform

  • Project

Those parameters and values must be pre-declared in ONAP VID component using REST API

Those informations will be available to all service instantiation (you only need to declare them once in ONAP)

Example for “Owning Entity” named “Test”

curl -X POST \
  http://vid.api.simpledemo.onap.org:30238/vid/maintenance/category_parameter/owningEntity \
  -H 'Accept-Encoding: gzip, deflate' \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
    "options": ["Test"]
}'

Example for “platform” named “Test_Platform”

curl -X POST \
  http://vid.api.simpledemo.onap.org:30238/vid/maintenance/category_parameter/platform \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
    "options": [""Test_Platform"]
}'

Example for “line of business” named “Test_LOB”

curl -X POST \
http://vid.api.simpledemo.onap.org:30238/vid/maintenance/category_parameter/lineOfBusiness \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache' \
-d '{
  "options": ["Test_LOB"]
}'

Example for “project” named “Test_project”

curl -X POST \
  http://vid.api.simpledemo.onap.org:30238/vid/maintenance/category_parameter/project \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
    "options": ["Test_project"]
}'
Declare a customer

Each time you have a new customer, you will need to perform those operations

This operation is using ONAP AAI REST API

Any service instance need to be linked to a customer

in the query path, you put the customer_name

in the query body you put the customer name again

Here after an example to declare a customer named “my_customer_name”

curl -X PUT \
  https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/business/customers/customer/my_customer_name \
  -H 'Accept: application/json' \
  -H 'Authorization: Basic QUFJOkFBSQ==' \
  -H 'Content-Type: application/json' \
  -H 'X-FromAppId: AAI' \
  -H 'X-TransactionId: 808b54e3-e563-4144-a1b9-e24e2ed93d4f' \
  -H 'cache-control: no-cache' \
  -d '{
    "global-customer-id": "my_customer_name",
    "subscriber-name": "my_customer_name",
    "subscriber-type": "INFRA"
}' -k

check customers in ONAP AAI (you should see if everything ok in the response)

curl -X GET \
  https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/business/customers \
  -H 'Accept: application/json' \
  -H 'Authorization: Basic QUFJOkFBSQ==' \
  -H 'Content-Type: application/json' \
  -H 'X-FromAppId: AAI' \
  -H 'X-TransactionId: 808b54e3-e563-4144-a1b9-e24e2ed93d4f' \
  -H 'cache-control: no-cache' -k
Associate Service Model to Customer

This operation is using ONAP AAI REST API

in the query path, you put the customer_name and the service model name

in the query body you put the service model UUID

curl -X PUT \
  https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/business/customers/customer/my_customer_name/service-subscriptions/service-subscription/my_service_model_name \
  -H 'Accept: application/json' \
  -H 'Authorization: Basic QUFJOkFBSQ==' \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: d4bc4991-a518-4d75-8a87-674ba44bf13a' \
  -H 'X-FromAppId: AAI' \
  -H 'X-TransactionId: 808b54e3-e563-4144-a1b9-e24e2ed93d4f' \
  -H 'cache-control: no-cache' \
  -d '{
    "service-id": "11265d8c-2cc2-40e5-95d8-57cad81c18da"
}' -k
Associate Cloud Site to Customer

in the query path, you put the customer_name and the service model name

in the query body you put the cloud owner name, the cloud site name, the tenant id and the tenant name

curl -X PUT \
  https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/business/customers/customer/my_customer_name/service-subscriptions/service-subscription/my_service_model_name/relationship-list/relationship \
  -H 'Accept: application/json' \
  -H 'Authorization: Basic QUFJOkFBSQ==' \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: 11ea9a9e-0dc8-4d20-8a78-c75cd6928916' \
  -H 'X-FromAppId: AAI' \
  -H 'X-TransactionId: 808b54e3-e563-4144-a1b9-e24e2ed93d4f' \
  -H 'cache-control: no-cache' \
  -d '{
    "related-to": "tenant",
    "related-link": "/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/my_cloud_owner_name/my_cloud_site_name/tenants/tenant/234a9a2dc4b643be9812915b214cdbbb",
    "relationship-data": [
        {
            "relationship-key": "cloud-region.cloud-owner",
            "relationship-value": "my_cloud_owner_name"
        },
        {
            "relationship-key": "cloud-region.cloud-region-id",
            "relationship-value": "my_cloud_site_name"
        },
        {
            "relationship-key": "tenant.tenant-id",
            "relationship-value": "234a9a2dc4b643be9812915b214cdbbb"
        }
    ],
    "related-to-property": [
        {
            "property-key": "tenant.tenant-name",
            "property-value": "my_tenant_name"
        }
    ]
}' -k

check (you should see if everything ok in the response)

curl -X GET \
  'https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/business/customers/customer/my_customer_name/service-subscriptions?depth=all' \
  -H 'Accept: application/json' \
  -H 'Authorization: Basic QUFJOkFBSQ==' \
  -H 'Content-Type: application/json' \
  -H 'X-FromAppId: AAI' \
  -H 'X-TransactionId: 808b54e3-e563-4144-a1b9-e24e2ed93d4f' \
  -H 'cache-control: no-cache' -k

Service Instantiation methods

Declare PNF instances:

Declare PNF instances in ONAP

PNF instances can be declared in ONAP inventory (AAI) using REST API

An example:

curl -X PUT \
  https://{{ONAP_LB_IP@}}:30233/aai/v16/network/pnfs/pnf/my_pnf_instance_001 \
  -H 'Accept: application/json' \
  -H 'Authorization: Basic QUFJOkFBSQ==' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: f5e2aae0-dc1c-4edb-b9e9-a93b05aee5e8' \
  -H 'X-FromAppId: AAI' \
  -H 'X-TransactionId: 999' \
  -H 'depth: all' \
  -d '{
  "pnf-name":" my_pnf_instance_001",
  "equip-type":" router",
  "nf-role":"primary",
  "p-interfaces": {
      "p-interface": [
          {
              "interface-name": "ae1",
              "port-description": "Link aggregate for trunk between switches"
          },
          {
              "interface-name": "xe-0/0/6",
              "port-description": "to PNF_instance_002 trunk1"
          },
          {
              "interface-name": "xe-0/0/2",
              "port-description": "to PNF_instance_003 trunk1"
          },
          {
              "interface-name": "xe-0/0/10",
              "port-description": "to PNF_instance_004 trunk1"
          },
          {
              "interface-name": "xe-0/0/0",
              "port-description": "firewall trunk"
          },
          {
              "interface-name": "xe-0/0/14",
              "port-description": "to PNF_instance_005 trunk1"
          }
      ]
  }
}' -k

It is possible to declare the location where is deployed the PNF (called a “complex” in ONAP AAI)

curl -X PUT \
  https:// {{ONAP_LB_IP@}}:30233/aai/v11/cloud-infrastructure/complexes/complex/my_complex_name \
  -H 'Accept: application/json' \
  -H 'Authorization: Basic QUFJOkFBSQ==' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: 43523984-db01-449a-8a58-8888871110bc' \
  -H 'X-FromAppId: AAI' \
  -H 'X-TransactionId: 999' \
  -H 'depth: all' \
  -d '{
  "physical-location-type":"PoP",
  "physical-location-id":"my_complex_name",
  "complex-name":"Name of my Complex",
  "city":"LANNION",
  "postal-code":"22300",
  "country":"FRANCE",
  "street1":"Avenue Pierre Marzin",
  "region":"Europe"
}' -k

To indicate that a PNF instance is located in a complex, we create a relation

curl -X PUT \
  https:// {{ONAP_LB_IP@}}:30233/aai/v14/network/pnfs/pnf/my_pnf_instance_001/relationship-list/relationship \
  -H 'Accept: application/json' \
  -H 'Authorization: Basic QUFJOkFBSQ==' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: 15315304-17c5-4e64-aada-bb149f1af915' \
  -H 'X-FromAppId: AAI' \
  -H 'X-TransactionId: 999' \
  -H 'depth: all' \
  -d '{
    "related-to": "complex",
    "related-link": "/aai/v11/cloud-infrastructure/complexes/complex/my_complex_name"
}' -k

Instantiate a Service:

e2eServiceInstance mode via ONAP UUI Portal

UUI documentation, see UUI for details.

Service Instantiation via ONAP NBI API (TM Forum)

ONAP NBI allow you to use a TM Forum standardized API (serviceOrder API)

Additional info NBI Guide

ONAP NBI will convert that request to ONAP SO request.

ServiceOrder management in NBI will support 2 modes:

  • E2E integration - NBI calls SO API to perform an End-To-end integration

  • Service-level only integration - NBI will trigger only SO request at serviceInstance level (not at VNF, not at Vf-module level and nothing will be created on cloud platform)

ONAP SO prerequisite: SO must be able to find a BPMN to process service fulfillment (integrate VNF, VNF activation in SDNC, VF module)

The choice of the mode is done by NBI depending on information retrieved in SDC. If the serviceSpecification is within a Category “E2E Service” , NBI will use E2E SO API, if not only API at service instance level will be used.

There is no difference or specific expectation in the service order API used by NBI user.

Example of serviceOrder to instantiate (=add) a service based on model with id=0d463b0c-e559-4def-8d7b-df64cfbd3159

curl -X POST \
  http://nbi.api.simpledemo.onap.org:30274/nbi/api/v4/serviceOrder \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
  "externalId": "BSS_order_001",
  "priority": "1",
  "description": "this is a service order to instantiate a service",
  "category": "Consumer",
  "requestedStartDate": "",
  "requestedCompletionDate": "",
  "relatedParty": [
    {
      "id": "JohnDoe",
      "role": "ONAPcustomer",
      "name": "JohnDoe"
    }
  ],
  "orderItem": [
    {
      "id": "1",
      "action": "add",
      "service": {
        "name": "my_service_model_instance_01",
        "serviceState": "active",
        "serviceSpecification": {
          "id": "0d463b0c-e559-4def-8d7b-df64cfbd3159"
        }
      }
    }
  ]
}'

In the response, you will obtain the serviceOrderId value.

Then you have the possibility to check about the serviceorder (here after the serviceOrderId=5d06309da0e46400017b1123).

This will allow you to get the serviceOrder Status (completed, failed…)

curl -X GET \
  http://nbi.api.simpledemo.onap.org:30274/nbi/api/v4/serviceOrder/5d06309da0e46400017b1123 \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache'
A La Carte mode Service Instantiation via ONAP SO API

Using ONAP SO API in “A La Carte” mode, you need to send several requests, depending on the service model composition.

For example, if your service model is composed of 2 VNF and a Network, you will have to build and send :

  • a request to SO to create the “service instance” object

  • a request to SO to create the VNF 1 instance object

  • a request to SDNC to declare VNF 1 instance parameters and values (SDNC preload)

  • a request to SO to create the Vf-module 1 instance object

  • a request to SO to create the VNF 2 instance object

  • a request to SDNC to declare VNF 2 instance parameters and values (SDNC preload)

  • a request to SO to create the Vf-module 2 instance object

  • a request to SO to create the Network instance object

Example to request a service instance directly to ONAP SO

TO BE COMPLETED

In the response, you will obtain the serviceOrderId value.

Then you have the possibility to check about the SO request (here after the requestId=e3ad8df6-ea0d-4384-be95-bcb7dd39bbde).

This will allow you to get the serviceOrder Status (completed, failed…)

curl -X GET \
  http://so.api.simpledemo.onap.org:30277/onap/so/infra/orchestrationRequests/v6/e3ad8df6-ea0d-4384-be95-bcb7dd39bbde \
  -H 'Accept: application/json' \
  -H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \
  -H 'Content-Type: application/json' \
  -H 'X-FromAppId: AAI' \
  -H 'X-TransactionId: get_aai_subscr' \
  -H 'cache-control: no-cache'

To instantiate a VNF, you need to build a complex request. All necessary parameters are available in the Tosca service template generated by SDC when you defined your service model.

curl -X POST \
http://so.api.simpledemo.onap.org:30277/onap/so/infra/serviceInstances/v6/95762b50-0244-4723-8fde-35f911db9263/vnfs \
-H 'Accept: application/json' \
-H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: get_aai_subscr' \
-H 'cache-control: no-cache' \
-d '{
"requestDetails": {
  "requestInfo": {
    "productFamilyId": "0d463b0c-e559-4def-8d7b-df64cfbd3159",
    "instanceName": "my_service_vnf_instance_001",
    "source": "VID",
    "suppressRollback": false,
    "requestorId": "test"
  },
"modelInfo": {
  "modelType": "vnf",
  "modelInvariantId": "4e66bb92-c597-439e-822d-75aaa69b13d4",
    "modelVersionId": "3b6ba59c-287c-449e-a1da-2db49984a087",
    "modelName": "my_service_VF",
    "modelVersion": "1.0",
    "modelCustomizationId": "",
    "modelCustomizationName": ""
  },
  "requestParameters": {
    "userParams": [],
    "aLaCarte": true,
  "testApi": "VNF_API"
  },
  "cloudConfiguration": {
    "lcpCloudRegionId": "my_cloud_site",
    "tenantId": "5906b9b8fd9642df9ba1c9e290063439"
  },
  "lineOfBusiness": {
    "lineOfBusinessName": "test_LOB"
  },
  "platform": {
    "platformName": "test_platform"
  },
  "relatedInstanceList": [{
    "relatedInstance": {
      "instanceId": "95762b50-0244-4723-8fde-35f911db9263",
      "modelInfo": {
        "modelType": "service",
        "modelName": "my-service-model",
        "modelInvariantId": "11265d8c-2cc2-40e5-95d8-57cad81c18da",
        "modelVersion": "1.0",
        "modelVersionId": "0d463b0c-e559-4def-8d7b-df64cfbd3159"
      }
    }
  }]
}
}'

To instantiate a VF module, you need to build two complex requests All necessary parameters are available in the Tosca service template generated by SDC when you defined your service model.

1st request is called a “SDNC-preload” for a VNF object and is used to store in SDNC some VNF parameters values that will be needed for the instantiation

curl -X POST \
http://sdnc.api.simpledemo.onap.org:30202/restconf/operations/VNF-API:preload-vnf-topology-operation \
-H 'Accept: application/json' \
-H 'Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: API client' \
-H 'X-TransactionId: 0a3f6713-ba96-4971-a6f8-c2da85a3176e' \
-H 'cache-control: no-cache' \
-d '{
  "input": {
      "request-information": {
          "notification-url": "onap.org",
          "order-number": "1",
          "order-version": "1",
          "request-action": "PreloadVNFRequest",
          "request-id": "test"
      },
      "sdnc-request-header": {
          "svc-action": "reserve",
          "svc-notification-url": "http:\/\/onap.org:8080\/adapters\/rest\/SDNCNotify",
          "svc-request-id": "test"
      },
      "vnf-topology-information": {
          "vnf-assignments": {
              "availability-zones": [],
              "vnf-networks": [],
              "vnf-vms": []
          },
          "vnf-parameters": [],
          "vnf-topology-identifier": {
              "generic-vnf-name": "my_service_vnf_instance_001",
              "generic-vnf-type": "",
              "service-type": "95762b50-0244-4723-8fde-35f911db9263",
              "vnf-name": "my_service_vfmodule_001",
              "vnf-type": ""
          }
      }
  }
}'

The 2nd request is to instantiate the VF module via ONAP SO (instance name must be identical in both requests)

curl -X POST \
http://so.api.simpledemo.onap.org:30277/onap/so/infra/serviceInstances/v6/95762b50-0244-4723-8fde-35f911db9263/vnfs/vfModules \
-H 'Accept: application/json' \
-H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: get_aai_subscr' \
-H 'cache-control: no-cache' \
-d '{
"requestDetails": {
  "requestInfo": {
    "instanceName": "my_vfmodule_001",
    "source": "VID",
    "suppressRollback": false,
    "requestorId": "test"
  },
"modelInfo": {
  "modelType": "vfModule",
  "modelInvariantId": "",
  "modelVersionId": "",
  "modelName": "",
  "modelVersion": "1",
  "modelCustomizationId": "",
  "modelCustomizationName": ""
},
"requestParameters": {
  "userParams": [],
  "testApi": "VNF_API",
  "usePreload": true
},
  "cloudConfiguration": {
    "lcpCloudRegionId": "my_cloud_site",
    "tenantId": "5906b9b8fd9642df9ba1c9e290063439"
  },
  "relatedInstanceList": [{
    "relatedInstance": {
      "instanceId": "95762b50-0244-4723-8fde-35f911db9263",
      "modelInfo": {
        "modelType": "service",
        "modelName": "my-service-model",
        "modelInvariantId": "11265d8c-2cc2-40e5-95d8-57cad81c18da",
        "modelVersion": "1.0",
        "modelVersionId": "0d463b0c-e559-4def-8d7b-df64cfbd3159"
      }
    }
  },
  {
    "relatedInstance": {
      "instanceId": "",
      "modelInfo": {
        "modelType": "vnf",
        "modelName": "my_service_model_VF",
        "modelInvariantId": "4e66bb92-c597-439e-822d-75aaa69b13d4",
        "modelVersion": "1.0",
        "modelVersionId": "3b6ba59c-287c-449e-a1da-2db49984a087",
        "modelCustomizationId": "",
        "modelCustomizationName": ""
      }
    }
  }]
}
}'

To instantiate a Neutron Network, you need to build two complex request. All necessary parameters are available in the Tosca service template generated by SDC when you defined your service model.

1st request is the “SDNC-preload” for a network object:

curl -X POST \
http://sdnc.api.simpledemo.onap.org:30202/restconf/operations/VNF-API:preload-network-topology-operation \
-H 'Accept: application/json' \
-H 'Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: API client' \
-H 'X-TransactionId: 0a3f6713-ba96-4971-a6f8-c2da85a3176e' \
-H 'cache-control: no-cache' \
-d '{
"input": {
  "request-information": {
    "request-id": "postman001",
    "notification-url": "http://so.onap.org",
    "order-number": "postman001",
    "request-sub-action": "SUPP",
    "request-action": "PreloadNetworkRequest",
    "source": "postman",
    "order-version": "1.0"
  },
  "network-topology-information": {
    "network-policy": [],
    "route-table-reference": [],
    "vpn-bindings": [],
    "network-topology-identifier": {
      "network-role": "integration_test_net",
      "network-technology": "neutron",
      "service-type": "my-service-2",
      "network-name": "my_network_01",
      "network-type": "Generic NeutronNet"
    },
    "provider-network-information": {
      "is-external-network": "false",
      "is-provider-network": "false",
      "is-shared-network": "false"
    },
    "subnets": [
      {
    "subnet-name": "my_subnet_01",
    "subnet-role": "OAM",
        "start-address": "192.168.90.0",
        "cidr-mask": "24",
        "ip-version": "4",
        "dhcp-enabled": "Y",
    "dhcp-start-address": "",
    "dhcp-end-address": "",
        "gateway-address": "192.168.90.1",
    "host-routes":[]
      }
            ]
  },
  "sdnc-request-header": {
    "svc-action": "reserve",
    "svc-notification-url": "http://so.onap.org",
    "svc-request-id": "postman001"
  }
}
}'

2nd request is to instantiate the network via ONAP SO (instance name must be identical in both requests)

curl -X POST \
http://so.api.simpledemo.onap.org:30277/onap/so/infra/serviceInstances/v6/95762b50-0244-4723-8fde-35f911db9263/networks \
-H 'Accept: application/json' \
-H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: get_aai_subscr' \
-H 'cache-control: no-cache' \
-d '{
"requestDetails": {
    "requestInfo": {
        "instanceName": "my_network_01",
        "source": "VID",
        "suppressRollback": false,
        "requestorId": "demo",
        "productFamilyId": "b9ac88f7-0e1b-462d-84ac-74c3c533217c"
    },
    "modelInfo": {
        "modelType": "network",
        "modelInvariantId": "0070b65c-48cb-4985-b4df-7c67ca99cd95",
        "modelVersionId": "4f738bed-e804-4765-8d22-07bb4d11f14b",
        "modelName": "Generic NeutronNet",
        "modelVersion": "1.0",
        "modelCustomizationId": "95534a95-dc8d-4ffb-89c7-091e2c49b55d",
        "modelCustomizationName": "Generic NeutronNet 0"
    },
  "requestParameters": {
    "userParams": [],
    "aLaCarte": true,
  "testApi": "VNF_API"
  },
  "cloudConfiguration": {
    "lcpCloudRegionId": "my_cloud_site",
    "tenantId": "5906b9b8fd9642df9ba1c9e290063439"
  },
    "lineOfBusiness": {
        "lineOfBusinessName": "Test_LOB"
    },
    "platform": {
        "platformName": "Test_platform"
    },
    "relatedInstanceList": [{
        "relatedInstance": {
            "instanceId": "95762b50-0244-4723-8fde-35f911db9263",
            "modelInfo": {
                "modelType": "service",
                "modelName": "my_service_model_name",
                "modelInvariantId": "11265d8c-2cc2-40e5-95d8-57cad81c18da",
                "modelVersion": "1.0",
                "modelVersionId": "0d463b0c-e559-4def-8d7b-df64cfbd3159"
            }
        }
    }]
  }
}'
Macro mode Service Instantiation via ONAP SO API

Using Macro mode, you have to build and send only one request to ONAP SO

In that request you need to indicate all object instances that you want to be instantiated.

Reminder : ONAP SO in Macro mode will perform the VNF parameters/values assignment based on CDS Blueprint templates that are supposed to be defined during Design and Onboard steps. That means ONAP has all information to be able to get all necessary values by itself (there is no longer need for an Operator to provide “SDNC preload”).

Additional info in:

Request Example :

curl -X POST \
  'http://{{k8s}}:30277/onap/so/infra/serviceInstantiation/v7/serviceInstances' \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
  "requestDetails": {
    "subscriberInfo": {
      "globalSubscriberId": "Demonstration"
    },
    "requestInfo": {
      "suppressRollback": false,
      "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
      "requestorId": "adt",
      "instanceName": "{{cds-instance-name}}",
      "source": "VID"
    },
    "cloudConfiguration": {
      "lcpCloudRegionId": "fr1",
      "tenantId": "6270eaa820934710960682c506115453"
    },
    "requestParameters": {
      "subscriptionServiceType": "vFW",
      "userParams": [
        {
          "Homing_Solution": "none"
        },
        {
          "service": {
            "instanceParams": [

            ],
            "instanceName": "{{cds-instance-name}}",
            "resources": {
              "vnfs": [
                {
                  "modelInfo": {
                "modelName": "{{vnf-modelinfo-modelname}}",
                "modelVersionId": "{{vnf-modelinfo-modeluuid}}",
                "modelInvariantUuid": "{{vnf-modelinfo-modelinvariantuuid}}",
                "modelVersion": "1.0",
                "modelCustomizationId": "{{vnf-modelinfo-modelcustomizationuuid}}",
                "modelInstanceName": "{{vnf-modelinfo-modelinstancename}}"
                  },
                  "cloudConfiguration": {
                    "lcpCloudRegionId": "fr1",
                    "tenantId": "6270eaa820934710960682c506115453"
                  },
                  "platform": {
                    "platformName": "test"
                  },
                  "lineOfBusiness": {
                    "lineOfBusinessName": "someValue"
                  },
                  "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
                  "instanceName": "{{vnf-modelinfo-modelinstancename}}",
                  "instanceParams": [
                    {
                      "onap_private_net_id": "olc-private",
                      "onap_private_subnet_id": "olc-private",
                      "pub_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwj7uJMyKiP1ogEsZv5kKDFw9mFNhxI+woR3Tuv8vjfNnqdB1GfSnvTFyNbdpyNdR8BlljkiZ1SlwJLEkvPk0HpOoSVVek/QmBeGC7mxyRcpMB2cNQwjXGfsVrforddXOnOkj+zx1aNdVGMc52Js3pex8B/L00H68kOcwP26BI1o77Uh+AxjOkIEGs+wlWNUmXabLDCH8l8IJk9mCTruKEN9KNj4NRZcaNC+XOz42SyHV9RT3N6efp31FqKzo8Ko63QirvKEEBSOAf9VlJ7mFMrGIGH37AP3JJfFYEHDdOA3N64ZpJLa39y25EWwGZNlWpO/GW5bNjTME04dl4eRyd",
                      "image_name": "Ubuntu 14.04",
                      "flavor_name":"s1.cw.small-1"
                    }
                  ],
                  "vfModules": [
                    {
                      "modelInfo": {
                        "modelName": "{{vnf-vfmodule-0-modelinfo-modelname}}",
                        "modelVersionId": "{{vnf-vfmodule-0-modelinfo-modeluuid}}",
                       "modelInvariantUuid": "{{vnf-vfmodule-0-modelinfo-modelinvariantuuid}}",
                        "modelVersion": "1",
                        "modelCustomizationId": "{{vnf-vfmodule-0-modelinfo-modelcustomizationuuid}}"
                       },
                      "instanceName": "{{vnf-vfmodule-0-modelinfo-modelname}}",
                      "instanceParams": [
                                                 {
                          "sec_group": "olc-open",
                          "public_net_id": "olc-net"
                        }
                      ]
                    },
                    {
                      "modelInfo": {
                        "modelName": "{{vnf-vfmodule-1-modelinfo-modelname}}",
                        "modelVersionId": "{{vnf-vfmodule-1-modelinfo-modeluuid}}",
                        "modelInvariantUuid": "{{vnf-vfmodule-1-modelinfo-modelinvariantuuid}}",
                        "modelVersion": "1",
                        "modelCustomizationId": "{{vnf-vfmodule-1-modelinfo-modelcustomizationuuid}}"
                       },
                      "instanceName": "{{vnf-vfmodule-1-modelinfo-modelname}}",
                      "instanceParams": [
                        {
                          "sec_group": "olc-open",
                          "public_net_id": "olc-net"
                        }
                      ]
                    },
                    {
                      "modelInfo": {
                        "modelName": "{{vnf-vfmodule-2-modelinfo-modelname}}",
                        "modelVersionId": "{{vnf-vfmodule-2-modelinfo-modeluuid}}",
                        "modelInvariantUuid": "{{vnf-vfmodule-2-modelinfo-modelinvariantuuid}}",
                        "modelVersion": "1",
                        "modelCustomizationId": "{{vnf-vfmodule-2-modelinfo-modelcustomizationuuid}}"
                       },
                      "instanceName": "{{vnf-vfmodule-2-modelinfo-modelname}}",
                      "instanceParams": [
                        {
                          "sec_group": "olc-open",
                          "public_net_id": "olc-net"
                        }
                      ]
                    },
                    {
                      "modelInfo": {
                        "modelName": "{{vnf-vfmodule-3-modelinfo-modelname}}",
                        "modelVersionId": "{{vnf-vfmodule-3-modelinfo-modeluuid}}",
                        "modelInvariantUuid": "{{vnf-vfmodule-3-modelinfo-modelinvariantuuid}}",
                        "modelVersion": "1",
                        "modelCustomizationId": "{{vnf-vfmodule-3-modelinfo-modelcustomizationuuid}}"
                      },
                      "instanceName": "{{vnf-vfmodule-3-modelinfo-modelname}}",
                      "instanceParams": [
                        {
                          "sec_group": "olc-open",
                          "public_net_id": "olc-net"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "modelInfo": {
              "modelVersion": "1.0",
        "modelVersionId": "{{service-uuid}}",
        "modelInvariantId": "{{service-invariantUUID}}",
        "modelName": "{{service-name}}",
              "modelType": "service"
            }
          }
        }
      ],
      "aLaCarte": false
    },
    "project": {
      "projectName": "Project-Demonstration"
    },
    "owningEntity": {
      "owningEntityId": "24ef5425-bec4-4fa3-ab03-c0ecf4eaac96",
      "owningEntityName": "OE-Demonstration"
    },
    "modelInfo": {
      "modelVersion": "1.0",
        "modelVersionId": "{{service-uuid}}",
        "modelInvariantId": "{{service-invariantUUID}}",
        "modelName": "{{service-name}}",
     "modelType": "service"
    }
  }
}'

e2eServiceInstance method is a hard-coded approach with dedicated/specific service BPMN workflow. That means it is linked to ONAP source code and lifecycle.

A La Carte method requires the Operations actor to build and send a lot of operations. To build those requests, Operator actor needs to define/collect by himself all VNF parameters/values.

Macro method required the Operations actor to build and send only one request and, thanks to CDS Blueprint templates, ONAP will collect and assign all required parameters/values by itself.

E2E Network Slicing

The objective of this use case is to realize End-to-End 5G Network Slicing using ONAP. An End-to-End Network Slice consists of RAN (Radio Access Network), Transport Network (TN) and Core Network (CN) slice sub-nets. This use case intends to demonstrate the modeling, orchestration (life cycle and resources) and assurance of a network slice which are implemented in alignment with relevant standards.

Overall High level view for ONAP-based Slice Management

Architecture Choice

3GPP(TS 28.801) defines three layer slice management functions which include:

CSMF(Communication Service Management Function):

  • Responsible for translating the communication service related requirement to network slice related requirements.

  • Communicate with Network Slice Management Function (NSMF).

NSMF(Network Slice Management Function):

  • Responsible for management and orchestration of NSI.

  • Derive network slice subnet related requirements from network slice related requirements.

  • Communicate with the Network Slice Subnet Management Function (NSSMF) and Communication Service Management Function.

NSSMF(Network Slice Subnet Management Function):

  • Responsible for management and orchestration of NSSI.

  • Communicate with the NSMF.

_images/e2e-network-slicing-architecture.png

To realize the three layers of the slice management function, we need to decide whether to implement CSMF, NSMF or NSMF within ONAP, or use the external CSMF, NSMF or NSSMF. This implies that for ONAP-based network slice management, we have different choices from an architectural perspective:

  1. Implement CSMF, NSMF, NSSMF all within ONAP;

  2. Connect an external CSMF from the Northbound, Implement NSMF and NSSMF within ONAP;

  3. Connect an external CSMF from the Northbound, Implement NSMF within ONAP, Connect a 3rd party NSSMF from the Southbound;

  4. Implement CSMF, NSMF within ONAP, Connect a 3rd party NSSMF from then Southbound.

  5. Use external CSMF and NSMF, only implement NSSMF within ONAP.

_images/architecture-choices-e2e-slicing.png

Slice Management Functions - Realization in SO

  • CSMF and NSMF is realized within ONAP (enhancement in Frankfurt functionality), and the NB interfaces is standardized using ExtAPI.

  • All 3 NSSMFs shall be realized within ONAP (From Guilin).

  • ONAP acting as NSMF shall also interact with external RAN and Transport NSSMF using 3GPP APIs

  • CSMF reliazed within SO receives service requirements from EXT-API, which translates service requirements to slice profile(NST selection) and sends request to NSMF for slice allocation.

  • NSMF reliazed within SO receives request for slice allocation (slice profile, S-NSSAI, NST) and determines slice instantiation/modification (with OOF) to fulfil the slice allocation request.

  • NSSMF reliazed within SO receive information from NSMF & trigger RAN/Core/Transport NSSMF for orchestration actions.

Network Slice Instance (NSI) Life Cycle View

Design and pre-provision: Creation of necessary slice/slice sub-net templates. Creation, activation, deactivation and termination of NSI, including its constituent slice sub-nets (RAN, Core and Transport)

3GPP Specification (3GPP TS 28.530) describes management aspects of a Network Slice Instance, which can be described by the four phases:

Preparation: The preparation phase includes network slice design, network slice capacity planning, on-boarding and evaluation of the network functions, preparing the network environment and other necessary preparations required to be done before the creation of an NSI

Commisioning: NSI provisioning in the commissioning phase includes creation of the NSI. During NSI creation all needed resources are allocated and configured to satisfy the network slice requirements. The creation of an NSI can include creation and/or modification of the NSI constituents

Operation: The Operation phase includes the activation, supervision, performance reporting (e.g. for KPI monitoring), resource capacity planning, modification,and de-activation of an NSI.

Decommissioning: Network slice instance provisioning in the decommissioning phase includes decommissioning of non-shared constituents if required and removing the NSI specific configuration from the shared constituents. After the decommissioning phase, the NSI is terminated and does not exist anymore. The ONAP-based NSI lifecycle management will finally provide the demonstration of all these phases.

The ONAP-based NSI lifecycle management will finally provide the demonstration of all these phases.

_images/lifecycle-of-network-slice-instance.png

Support for Option1 &Option2 in E2E Network Slicing

ONAP E2E Network Slicing option 1 and 2 differs on the RAN and FH/BH relationship.

  • In option 1, RAN NSSMF will decide FH/MH requirements and send to TN side, so RAN NSST will nest FH/MH NSST, and slice profile requirements will contain not only RAN side requirements but also FH/MH.

Template design for option 1: https://wiki.onap.org/display/DW/Template+Design+for+Option+1

_images/slicing-option1.png
  • In option 2, FH and MH are independent requirments when doing E2E requirements decomposition. Detailed background of option 1 and 2, please see E2E Network Slicing Use Case in R7 Guilin.

Template design for option 2: https://wiki.onap.org/display/DW/Template+Design+for+Option2

_images/slicing-option2.png

3 domain combination solution -Endpoint

In order to enable 3 subnet connectivity, making end-to-end forwarding and control plane interacting, in slicing services, we need slicing interworking identifier and information to tell how RAN and Core connect with TN. Slicing interworking identifier(in ONAP is vlan Id, allocated by NSMF) is used to isolate differerent service datas, and identify the unique slicing service across RAN, TN and Core, 1 S-NSSAI will need to be assigned with 1 slicing interworking identifier(vlan Id). The slicing interworking information is used as bridges to connect RAN/Core and TN,it should be RAN/Core side outgress and TN ingress, like port, ipAddress, next hops and etc.

SO ETSI CSIT (NFVO and VNFM)

This guide will go through the CSIT of the ETSI NFVO and VNFM.

Ensure you have a healthy ONAP Deployment running. The following components will be required/used as part of this guide:

  • SO

  • SDC

  • AAI

  • DMAAP

  • Modeling

What is ETSI?

The European Telecommunications Standards Institute (ETSI) produces globally-applicable standards for Information and Communications Technologies. ETSI set out standards covering the functionalities of the interfaces specified on the reference points, which use the acronym NFV-SOL (standing for “NFV Solutions”). As of ONAPs Dublin release the SO SVNFM adapter supports SOL003 standards for Create, Instantiate, Terminate and Delete operations with Granting, Subscription and Notification. As of ONAP Honolulu release, the SO ETSI NFVO sub-component supports SOL005 (NBI) and SOL003 (SBI) standards for Create, Instantiate, Terminate and Delete NS and VNF (through the SOL003 Adapter) operations.

How to Run CSIT Tests

The follow steps are to install and run on an Ubuntu 18.04 (desktop) installation. Later versions of Ubuntu and Java may work for the tests.

First pull the CSIT repo from Gerrit, either with or without the hooks

git clone "https://gerrit.onap.org/r/integration/csit"

or

git clone "https://gerrit.onap.org/r/integration/csit" && (cd "csit" && mkdir -p .git/hooks && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg https://gerrit.onap.org/r/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg)

Once this is downloaded a few more installations are required.

Install pip (if required)

sudo apt install python-pip

Install Robot Framework through pip

pip install robotframework

Run Script

Once all of this is done, then the tests should be run by calling the run-csit.sh script and giving it the location of our test folder (csit/plans/so/integration-etsi-testing). From the csit projects root folder run the following command:

./run-csit.sh plans/so/integration-etsi-testing

This should successfully run the ETSI CSIT suite

How to run tests againt specific SO versions

It is possible to run the ETSI CSIT suite against local docker images although it is not the default. Through this method specific versions of SO can be tested. There are two changes required to make this work. The env file, located at [containing folder]/csit/plans/so/integration-etsi-testing/config/env, first needs to be changed. The DOCKER_ENVIROMENT needs to be changed from “remote” to “local”. Also the TAG value might need to be changed. This Tag relates to the version of images being used.

Secondly all of the required docker images must be present on system.

This should be enough to run the ETSI CSIT test suite locally.

ETSI NFVO Automated CSIT Tests High Level Scenarios

Step 1:

Perform Configuration / Setup Steps prior to running tests

Step 2:

Onboard SOL004 Package and SOL007 directly into ETSI Catalog using ROBOT framework

Step 3:

ETSI Catalog Gets Package from SDC Simulator (New: ETSI Catalog and Modeling ETSI Catalog DB will need to be set up and spun up for CSIT. May be some impact on SDC Simulator here)

Step 4:

ETSI Catalog Stores Package in its Modeling ETSI Catalog DB

Step 5:

ROBOT framework used to trigger NS LCM requests, e.g., INSTANTIATE NS

Step 6:

ETSI NFVO NS LCM gets required data from ETSI Catalog, e.g., Get and Parse NSD

Step 7:

If e.g., a CREATE NS task, ETSI NFVO NS LCM checks to see if already exists in ETSI NFVO DB

Step 8:

Create Generic VNF and connect to Service Instance in A&AI Simulator (May be some impact on A&AI Simulator here)

Step 9:

Instantiate VNF through SOL003 Adapter

Step 10:

SOL003 Adapter processes requests through A&AI and (May be some impact on A&AI Simulator here)

Step 11:

SOL003 Adapter processes requests through ETSI-Catalog

Step 12:

SOL003 Adapter sends notification to SOL003 NBI, etc.

What are the tests doing?

There are three tests currently being run “Distribute Service Template”, “Invoke Service Instantiation”, “Invoke NS Instantiation”, “Delete NS Instance”, “Invoke VNF Instantiation”, “Delete VNF Instance” and “Delete Service Instance”.

Distribute Service Template

As the name would suggest the aim for the “Distribute Service Template” test is to distribute a service template within the SDC controller pod. Once a http session of the SDC controller is created a post request can be made to it. This post requests sends binary data from “distributeServiceTemplate.json”. This json file contains resources and artifacts required to distribute a service. Once this post request is sent, the response status code is checked to see if it is 200. If the code is not equal to 200 then the test is thought to be a failure.

Invoke Service Instantiation

The aim of the “Invoke Service Instantiation” test is to invoke the service distributed to the sdc controller in the previous test. A http session of the api handler pod is created. This session is sent a post request containing “serviceInstantiationRequest.json”. Once this request is made the response is checked if it a valid code is returned. A for loop is used to continually make calls to check the orchestration request, to check the status of service instantiation. Only once this orchestration returns either a fail or success, will we break out of the for loop.Once outside the for loop a final statement is used to check if service has been successfully instantiated.

Invoke NS Instance

The aim of “Invoke NS Instantiation” test is to now instantiate the NS that relates to service in the previous test. This test requires the ID of the service instance created in the previous test. If this is not provided then the test will fail from the get go. Once again a http session of the api handler pod is created. Similarly a post request using the json data within “nsInstantiationRequest.json”. Once this request is made if it returns a success code then the test moves on to a for loop. Within this for a loop an orchestration request is made each time, when this request signals that either the instantiation request has failed or fully succeeded then the loop is escaped. The test will either be a pass or fail depending on this final orchestration request.

Delete NS Instance

This test will delete the NS Instance created in the previous test. Both the ID of the NS instance created in the previous test and the service instance created in the test before that. If either of these values is not provided then the test will fail. This test once again makes use of a session of the api handler pod. A post request is made using the data from “nsDeleteRequest.json”. Once this request is made if it returns a success code then the test moves on to a for loop. Within this for a loop an orchestration request is made each time, when this request signals that either the instantiation request has failed or fully succeeded then the loop is escaped. The test will either be a pass or fail depending on this final orchestration request.

Invoke VNF Instance

The aim of “Invoke VNF Instantiation” test is to now instantiate the VNF that relates to service in the previous test. This test requires the ID of the service instance created in the previous test. If this is not provided then the test will fail from the get go. Once again a http session of the api handler pod is created. Similarly a post request using the json data within “vnfInstantiationRequest.json”. Once this request is made if it returns a success code then the test moves on to a for loop. Within this for a loop an orchestration request is made each time, when this request signals that either the instantiation request has failed or fully succeeded then the loop is escaped. The test will either be a pass or fail depending on this final orchestration request.

Delete VNF Instance

This test will delete the VNF Instance created in the previous test. Both the ID of the vnf instance created in the previous test and the service instance created in the test before that. If either of these values is not provided then the test will fail. This test once again makes use of a session of the api handler pod. A post request is made using the data from “vnfDeleteRequest.json”. Once this request is made if it returns a success code then the test moves on to a for loop. Within this for a loop an orchestration request is made each time, when this request signals that either the instantiation request has failed or fully succeeded then the loop is escaped. The test will either be a pass or fail depending on this final orchestration request.

Delete Service Instance

This test will delete the service instance created in earlier test. To delete the service the ID of previously

created Service Instance is required, if this is not supplied then the test will fail before starting. A post request is then made to the API handler containing data from “serviceDeleteRquest.json”. Once this request is made if it returns a success code then the test moves on to a for loop. Within this for a loop an orchestration request is made each time, when this request signals that either the instantiation request has failed or fully succeeded then the loop is escaped. The test will either be a pass or fail depending on this final orchestration request.

Troubleshooting

There are a number of simple issues relating from Python and its libraries

A correct installation of the robot framework to run our tests requiring python and the following pip libraries.

  • robotframework

  • robotframework-extendedselenium2library

  • robotframework-httplibrary

  • robotframework-onap

  • robotframework-requests

  • robotframework-selenium2library

To make sure each of the previous libraries is installed run the following command

pip -list

ETSI NFVO Network Service LCM Setup & Functionality

This guide will go through the setup required and the use of the ETSI NFVO NS LCM Functionality: Create, Instantiate, Terminate and Delete a Network Service

Ensure you have a healthy ONAP Deployment running. The following components will be required/used as part of this guide:

  • SO

  • SDC

  • AAI

  • DMAAP

  • Modeling

  • UUI

Add Entries to ESR System Info List and ESR VNFM Lists

This first section of the guide will involve adding values to AAI under the following 3 paths:

  • /aai/v15/cloud-infrastructure/cloud-regions/cloud-region/<cloud-owner>/<cloud-region-id>/esr-system-info-list/esr-system-info/<yourVnfmId>

  • /aai/v15/external-system/esr-vnfm-list/esr-vnfm/<yourVnfmId>

  • /aai/v15/external-system/esr-vnfm-list/esr-vnfm/<yourVnfmId>/esr-system-info-list/esr-system-info/

For the purposes of this guide, the VNFM Simulator will be used as the VNFM throughout. You will need to edit the below CURLs in order to match your specific VNFM’s requirements, if using one other than the VNFM Simulator.

Step 1:

Exec into any pod within your ONAP deployment that is connected to the primary ONAP network. This will give you access to using the internal service hostnames.

Step 2:

Send the following CURL to add the AAI Cloud Infrastructure ESR System Info List Entry. Ensuring you alter the values to match your deployment’s AAI Data:

AAI Cloud Infrastructure ESR System Info List Entry

curl -X PUT -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/regionOne/esr-system-info-list/esr-system-info/vnfmSimulator -d '{"name": "vnfmSimulatorName", "system-type": "simulator", "vimId": "myCloud", "vendor": "EST", "version": "V1.0", "certificateUrl": "", "url": "http://so-vnfm-simulator.onap:9093/vnflcm/v1/", "user-name": "vnfm", "password": "password1$"}' -k

Step 3:

Next you will need to send the following 2 CURLs in order to add entries into the AAI External System ESR VNFM List:

AAI External System ESR VNFM List

curl -X PUT -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/external-system/esr-vnfm-list/esr-vnfm/vnfmSimulator -d '{"vnfmId": "vnfmSimulator", "name": "vnfmSimulatorName", "type": "simulator", "vendor": "est"}'

AAI External System ESR VNFM System Info List

curl -X PUT -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/external-system/esr-vnfm-list/esr-vnfm/vnfmSimulator/esr-system-info-list/esr-system-info/vnfmSimulatorId -d '{"esr-system-info-id": "vnfmSimulatorId", "type": "simulator", "user-name": "vnfm", "password": "password1$", "system-type": "simulator", "service-url": "http://so-vnfm-simulator.onap:9093/vnflcm/v1"}'

Step 4:

Take note of the “system-type” and “type” values you have added with these CURLs. This will be used at a later stage when creating your VF in SDC.

Onboard a VNF package along with a Network Service CSAR into SDC

A video demonstration of this process “Onboarding ETSI Based NS” can be found here: SO NFVO NS Onboarding and LCM Demonstrations It is recommended that you view this video before/alongside this section of the guide.

Step 1:

Login to the ONAP Portal. (Link: https://portal.api.simpledemo.onap.org:30225/ONAPPORTAL/login.htm (where “portal.api.simpledemo.onap.org” is set as the IP of your VM/host of your Portal component.)

Login: cs0008 Password: demo123456!

Step 2:

Select the SDC App. It is possible that your browser will block the scripts run by the Portal, you will need to enable them if it does.

Step 3:

Follow the onboarding guide below:

Onboarding your VNF:

1: Click the “ONBOARD” tab near the top of the window.

2: Create a “VLM” if you have not created a “VLM” before.

  • From the “ONBOARD” page, click create VLM.

  • Enter name and description, then select create.

  • Click on the plus button beside Entitlement Pool.

  • Add Name and Manufacturing Reference Number, then click save.

  • Click on the plus button beside License Key Groups.

  • Add Name and select type, then click save.

  • Click on the plus button beside Feature Groups.

  • In the general tab, add name, Description and Part Number. Move to the Entitlements Pools tab, select the entitlement pool you just created and click the rightward arrow. Move to the License Key Group tab, select the license key group you just created and click the rightward arrow. Once these three things are done, click save.

  • Click on the plus button beside License Agreement.

  • Add Name and select License Term. Next move to the Feature Groups tab, select the Feature Group you just created and click the rightward arrow. Lastly click save.

  • On the overview page, select submit in the top right corner of the screen.

  • Enter a commit comment and click Commit & Submit.

3: Create a Virtual Service Product (VSP)

  • Click the “ONBOARD” tab near the top of the window.

  • Click “CREATE NEW VSP” and fill in the required information. Make sure to select “Network Package” for the “ONBOARDING PROCEDURE” section. Then click “CREATE”.

  • Click where it shows “! Missing” underneath “License Agreement”. Simply select a “Licensing Version” and “License Agreement/Feature Group” from the drop downs.

  • Click the “Overview” tab on the left hand side. Then press “Select File” in the “SOFTWARE PRODUCT ATTACHMENTS” section and select your prepared VNF Package. If you are onboarding a supported zip, then click “PROCEED TO VALIDATION” once you can see your added files. You can safely ignore any warnings that come up at this step, but not any errors. (Note: The package validation does not support CSARs currently, they will still work however, providing they meet SDC requirements.)

  • Now click “Submit”.

4: Then click “ONBOARD” in the top left. Hover your mouse over the small grey triangle that is just to the right of the “ONBOARD” tab and select “HOME”.

5: Hover over the “IMPORT” square and select “Import VSP”. Find your VSP, click the drop-down arrow beside it and then press the “Import VSP” icon at the far right of the line that drops down.

6: You will now be brought to the draft page of your VF. Follow the instructions below in order to certify it.

  • First, give your VF a name you will remember, as we will be using this in the following section, then click “Create” in the top-right hand corner.

  • You will need to edit the properties of the VF in order to add a property value, that will be required at a later point.

  • Go to the “Properties Assignment” tab on the left-hand side, then select your VF on the right-hand side.

  • Now go to the “Inputs” tab within the “Properties Assignment”.

  • Find the “nf_type” input and enter a value matching the value you entered for “system-type” and “type” in the previous ESR Entries section.

  • Click “Save” in the top-right of the “Properties Assignment” tab and then you can Certify your VF, by clicking “Certify” in the top-right of the VF Page.

Creating/Configuring your SDC Service

1: In the “HOME” tab of the SDC ONAP Portal, hover over the “ADD” square and select “ADD SERVICE”. Fill in the required fields, select the “Category” “Network Service” and press “Create” in the top right-hand corner.

2: You will be brought to the draft page of your Service. Go to the “Composition” tab on the left-hand side and drag/drop the VF, that you just created, into this service (you can search for the VF by name in the top left).

3: Now you will need to add the Network Service CSAR package to this service. You can do this by clicking in the blank whitespace of the composition, then on the right hand side of the page select the 2nd tab in order to add a deployment artifact. Click “ADD ARTIFACT” here, give an “Artifact Label” of “ns”, any description value and ensure you choose a “Type” of “OTHER”. Then click “DONE”.

4: Finally you can click “Certify” in the top right hand corner, followed by “Distribute”. Your Service will now distributed across ONAP.

Onboarding your Network Service to ETSI Catalog through UUI

This next small section (Onboarding your NS through UUI) can also been seen in the “Onboarding ETSI Based NS” video mentioned earlier.

Step 1:

Go to the following link, in order to access the UUI Portal: https://msb.api.simpledemo.onap.org:30283/iui/usecaseui/#/home (where “msb.api.simpledemo.onap.org” is set as the IP of your VM/host of your UUI component.)

Step 2:

Click “Package Management”, you will be brought to the “NS” tab, you should see your Service name in the list. Simply click the “Operation button” on the right hand side of your Service in order to onboard it into the ETSI Catalog.

Step 3:

Wait for the confirmation that your Network Service has been Onboarded Successfully.

Triggering the ETSI NFVO NS LCM Functionality

The next section of this guide will go through the actual triggering of the ETSI NFVO NS LCM Functionalities in the following order: Create, Instantiate, Terminate and then Delete.

This section of this guide can be seen in video format at the following link: https://wiki.onap.org/display/DW/SO+NFVO+NS+Onboarding+and+LCM+Demonstrations

It is recommended that you view the “ETSI Based NS Orchestration Demo” video before/alongside this section of the guide.

Create NS

Step 1:

First you will need to retrieve the NSD ID from the ETSI Catalog Database in order to populate the Create Network Service CURL. The ETSI Catalog Database will be found within the Modeling DB container.

Log into the ETSI Catalog Database and retrieve the data from the “catalog_nspackage” table. The value under the column “NSPACKAGEID” will be the NSD ID required as part of the Create Network Service CURL.

Step 2:

Exec into any pod within your ONAP deployment that is connected to the primary ONAP network. This will give you access to using the internal service hostnames.

Step 3:

Send the following Create Network Service CURL Command, ensuring your deployment’s Global Customer ID (from AAI) and your NSDID (from ETSI Catalog Database) replace the values within the <>:

Create NS Curl

curl -k -X POST -H "accept:application/json" -H "Content-Type:application/json" -H "HTTP_GLOBALCUSTOMERID: <GLOBALCUSTOMERID>" -d '{"nsdId": "<NSDID>", "nsName": "demo", "nsDescription": "demo"}' -v http://so-etsi-nfvo-ns-lcm.onap:9095/so/so-etsi-nfvo-ns-lcm/v1/api/nslcm/v1/ns_instances -H "Authorization: Basic c28tZXRzaS1uZnZvLW5zLWxjbTpEdXJnMSREYWxhWG95ZA=="

You should receive a synchronous response back with a 201 Create HTTP Response. This response will contain the NS Instance ID of the NS Instance we just created, take note of this as it will be needed in the following steps.

After this step has been completed you should log into the Marie-Db-Galera-0 Pod on your ONAP deployment, then connect to the “NFVO” database. Retrieving all data from the “ns_inst” table will show that your initial NS has been created.

Instantiate NS

Step 1:

Next you will need to create a JSON file on the pod, which you are exec’ed into, named “Payload.json” in the following example.

Payload.json

{
    "nsFlavourId": "default",
        "locationConstraints": [{
        "vnfProfileId": "b1bb0ce7-2222-4fa7-95ed-4840d70a1177"
    }],
    "additionalParamsForVnf": [{
        "vnfProfileId": "b1bb0ce7-2222-4fa7-95ed-4840d70a1177",
        "vnfInstanceName": "vgwVnf1",
        "vnfInstanceDescription": "test",
        "additionalParams": {
            "vim_id": "<cloud-owner>_<cloud-region-id>_<tenant_id>"
        }
    }]
}

In the above Payload.json, you must ensure that the “vnfProfileId” matches the VNF Descriptor ID found in the VNF CSAR which you onboarded as part of the VNF Onboarding section of this guide. The “vnfInstanceName” must match your VNF’s name, and finally the “vim_id” must be replaced with your AAI Data values for your deployment’s Cloud-Owner, Cloud-Region-Id and Tenant-Id respectively.

Step 2:

Next you will need to send the following CURL command in order to trigger the instantiation of the Network Service. Ensure that you add the NS Instance ID received in the Create NS response to the URL Path (replacing <NS_INSTANCE_ID>), and match the Global Customer ID as before:

Instantiate NS Curl

curl -k -X POST -H "Authorization: Basic c28tZXRzaS1uZnZvLW5zLWxjbTpEdXJnMSREYWxhWG95ZA==" -H "accept: application/json" -H "Content-Type:application/json" -H "HTTP_GLOBALCUSTOMERID: ADemoCustomerInXcloud" -d @Payload.json -v http://so-etsi-nfvo-ns-lcm.onap:9095/so/so-etsi-nfvo-ns-lcm/v1/api/nslcm/v1/ns_instances/<NS_INSTANCE_ID>/instantiate

This will trigger the Asynchronous Instantiate NS Functionality. You will receive a response confirming that the process has begun with a 202 Accepted HTTP Response Header. You can view the debug.log files on the following pods in order to view the progress:

  • SO-ETSI-NFVO-NS-LCM

  • SO-ETSI-SOL003-ADAPTER

  • SO-VNFM-SIMULATOR (If making use of the VNFM-Simulator, alternatively the logs of the VNFM you are using)

Once the full instantiation has been completed, reconnect to the “NFVO” database, within the Marie-Db-Galera-0 pod on your ONAP deployment. Retrieving all data from the “ns_inst” table again, you should see that the “STATUS” field for your NS has changed to “INSTANTIATED”.

Terminate NS

Step 1:

Send the following CURL command in order to trigger the Termination of the Network Service. Ensure that you add the NS Instance ID received in the Create NS response to the URL Path (replacing <NS_INSTANCE_ID>):

Terminate NS Curl

curl -k -X POST -H "Authorization: Basic c28tZXRzaS1uZnZvLW5zLWxjbTpEdXJnMSREYWxhWG95ZA==" -H "accept: application/json" -H "Content-Type: application/json" -v http://so-etsi-nfvo-ns-lcm.onap:9095/so/so-etsi-nfvo-ns-lcm/v1/api/nslcm/v1/ns_instances/<NS_INSTANCE_ID>/terminate

Similar to the Instantiate functionality, this is an asynchronous call, so you will receive a response confirming that the process has begun with a 202 Accepted HTTP Response Header. As above, view the specified debug.log files in order to view the progress.

Once the full termination has been completed, reconnect to the “NFVO” database, within the Marie-Db-Galera-0 pod on your ONAP deployment. Retrieving all data from the “ns_inst” table again, you should see that the “STATUS” field for your NS has changed back to “NOT_INSTANTIATED”.

Delete NS

Step 1:

Finally send the following CURL command in order to trigger the Deletion of the Network Service. Ensure that you add the NS Instance ID received in the Create NS response to the URL Path (replacing <NS_INSTANCE_ID>):

Delete NS Curl

curl -k -X DELETE -H "Authorization: Basic c28tZXRzaS1uZnZvLW5zLWxjbTpEdXJnMSREYWxhWG95ZA==" -H "accept: application/json" -H "Content-Type: application/json" -v http://so-etsi-nfvo-ns-lcm.onap:9095/so/so-etsi-nfvo-ns-lcm/v1/api/nslcm/v1/ns_instances/<NS_INSTANCE_ID>

Similar to the Create functionality, this is a synchronous call and as such you will receive a 204 No Content Http Response to your CURL command.

Once the full deletion has been completed, reconnect to the “NFVO” database, within the Marie-Db-Galera-0 pod on your ONAP deployment. Retrieving all data from the “ns_inst” table again, you should no longer be able to see the NS Instance in the NS_INST table.

SO ETSI VNF LCM Setup & Functionality

Introduction

This guide will describe the steps required to execute the ETSI “Instantiate VNF” and “Terminate VNF” workflows using ONAP. The initial requirements you need for this guide are as follows:

Initial Configurations

The following configurations need to be completed in order to execute the ETSI workflows and instantiate through the SO-ETSI-SOL003-Adapter.

Log into the MariaDB Database

Find your Mariadb pod:

kubectl -n onap get pods | grep maria

Exec into a Mariadb-Galera pod (replace <PODNAME> with the Mariadb pod name):

kubectl -n onap -it exec <PODNAME> bash

Log into the SQL database and connect to the “catalogdb” database. Follow the next steps in order to configure your ONAP’s Mariadb database.

Enable the ETSI “Instantiate/Create” & “Terminate/Delete” building blocks.

Firstly, you will need to add the ETSI Create & Delete building blocks, this is done by inserting them into the “building_block_detail” table in the Mariadb’s “catalogdb” database.

Insert the ETSI Create Building Block:

insert into building_block_detail(building_block_name, resource_type, target_action) values (“EtsiVnfInstantiateBB”, “VNF”, “ACTIVATE”);

Insert ETSI Delete Building Block:

insert into building_block_detail(building_block_name, resource_type, target_action) values (“EtsiVnfDeleteBB”, “VNF”, “DEACTIVATE”);

View the “building_block_detail” table:

select * from building_block_detail;

You should now have the entries in your “building_block_detail” table.

Update the orchestration_flow_reference table

Note: Standard VNF instantiation is unlikely to work once this step has been completed.

The next step is to set which building blocks are triggered on a VNF instantiate request. We will also be setting the correct sequence for these building blocks.

View the VNF Create/Delete sequences from the “orchestration_flow_reference” table:

select * from orchestration_flow_reference where COMPOSITE_ACTION="VNF-Create";
select * from orchestration_flow_reference where COMPOSITE_ACTION="VNF-Delete";

Remove/Update current entries for “VNF-Create” & “VNF-Delete”:

Retrieve “ID” from “northbound_request_ref_lookup” table. Take note of the “ID” value for “VNF-Create” and “VNF-Delete”:

select * from northbound_request_ref_lookup where REQUEST_SCOPE='Vnf' and IS_ALACARTE is true;

Remove current VNF-Insert and insert ETSI VNF-Create, replace <ID> with the corresponding value retrieved from the “northbound_request_ref_lookup” table:

delete from orchestration_flow_reference where COMPOSITE_ACTION = "VNF-Create";
insert into orchestration_flow_reference (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) values ("VNF-Create",1,"AssignVnfBB",1,<ID>);
insert into orchestration_flow_reference (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) values ("VNF-Create",2,"EtsiVnfInstantiateBB",1,<ID>);
insert into orchestration_flow_reference (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) values ("VNF-Create",3,"ActivateVnfBB",1,<ID>);

Remove current VNF-Delete and insert ETSI VNF-Delete, replace <ID> with the corresponding value retrieved from the “northbound_request_ref_lookup” table:

delete from orchestration_flow_reference where COMPOSITE_ACTION = "VNF-Delete";
insert into orchestration_flow_reference (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) values ("VNF-Delete",1,"EtsiVnfDeleteBB",1,<ID>);
insert into orchestration_flow_reference (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) values ("VNF-Delete",2,"UnassignVnfBB",1,<ID>);

You have now enabled the ETSI building blocks and configured the sequence of building blocks to execute.

Update the “orchestration_status_state_transition_directive” table

The last step that needs to take in the MariaDB, is to update the state transition table, in order to allow our ETSI Create building blocks to correctly change the operation status of a VNF. If the operation status is not allowed to change correctly, then our ETSI building block will be skipped and will not be executed.

View the current “orchestration_status_state_transition_directive” setup.

select * from orchestration_status_state_transition_directive where RESOURCE_TYPE='VNF' and ORCHESTRATION_STATUS='Created';

Update the row that decides when a “VNF” with an orchestration status of “CREATED” has a target action of “ACTIVATE” to “CONTINUE” instead of “FAIL” using the following command:

update orchestration_status_state_transition_directive set FLOW_DIRECTIVE='CONTINUE' where RESOURCE_TYPE='VNF' and ORCHESTRATION_STATUS='CREATED' and TARGET_ACTION='ACTIVATE' and FLOW_DIRECTIVE='FAIL';

The transition directive is now set up correctly, allowing all of your ETSI building blocks to be executed correctly.

Adding your VNFM to ONAP ESR

Now you will need to send a curl command to A&AI, in order to add the VNFM to ESR/A&AI.

Please ensure you have ESR added to your ONAP installation before attempting this step. Next, you will need to populate the ESR VNFM List with information relating to the VNFM that you want to instantiate your VNFs through.

Adding your VNFM to ONAP ESR using CURL:

In order to use the curl command method, you will need to log into an ONAP pod, that is within your ONAP network. (This prevents us needing to go and get the AAI service IP and external port.)

You can log into one of your pods with the following command (this example will use the BPMN-INFRA pod):

kubectl -n onap get pods | grep bpmn

Then take the full pod name and put it into this command instead of <PODNAME>:

kubectl -n onap exec -it <PODNAME> sh

Once Exec’ed into the pod you can run the following command which creates a VNFM, in ESR, with ID “ExampleVnfm”. (Edit this curl command to your needs before using it)

curl -X PUT -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/external-system/esr-vnfm-list/esr-vnfm/ExampleVnfm -d '{"vnfmId": "ExampleVnfm", "name": "ExampleVnfmName", "type": "ExampleVnfmType", "vendor": "est"}'

One important thing to note in this curl command is the type: “ExampleVnfmType”. This will be used in a later step for specifying which VNFM you want to instantiate through, take note of this.

Once you have entered the previous information you need to add the “service-url” to your “esr-system-info” section of this VNFM you just added. Please note, that the “service-url” in the following curl command was designed to work with the “so-vnfm-simulator”, you will need to change this to match your specific VNFM’s “service-url”.

You will need to put this data into the “external-system” and “cloud-infrastructure” API paths listed below. This is done with the following curl commands:

AAI Cloud-Infrastructure

curl -X PUT -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/<CLOUD_OWNER>/<CLOUD_REGION_ID>/esr-system-info-list/esr-system-info/ExampleVnfm -d '{"name": "ExampleVnfm", "system-type": "ExampleVnfmType", "vimId": "myCloud", "vendor": "EST", "version": "V1.0", "certificateUrl": "", "url": "http://so-vnfm-simulator.onap:9095/vnflcm/v1/", "user-name": "testUser", "password": ""}'

Please note you will need to replace <CLOUD_OWNER> and <CLOUD_REGION_ID> with their respective values in your ONAP deployment.

AAI External-System

curl -X PUT -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/external-system/esr-vnfm-list/esr-vnfm/ExampleVnfm/esr-system-info-list/esr-system-info/ExampleEsrSystemInfo -d '{"esr-system-info-id": "ExampleEsrSystemInfo", "type": "ExampleVnfmType", "user-name": "user", "password": "password", "system-type": "VNFM", "service-url": "http://so-vnfm-simulator.onap:9095/vnflcm/v1"}'

You have now entered your VNFM into the ESR/AAI components.

Here are the equivalent GET commands for checking what is currently in your ESR/AAI list (change the IDs to match the IDs you used earlier):

curl -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/external-system/esr-vnfm-list/
curl -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/external-system/esr-vnfm-list/esr-vnfm/ExampleVnfmId/esr-system-info-list/esr-system-info

Upload VNF Image to VNFM

Currently, there is no implementation of the package management interface in the SO-ETSI-SOL003-Adapter, this means that the VNF image needs to be onboarded to your VNFM before instantiation. The VNF image will then be selected by using the VNF descriptor, found in one of the artifacts within the SDC onboarding package, mentioned later in this guide (“descriptor.yaml”).

This is an important step, which unfortunately can be drastically different depending on the specific vendor’s VNFM.

Onboarding a Virtual Software Product (VSP) with an ETSI HEAT Template.

Onboard a VNF package along with a Network Service CSAR into SDC. A video demonstration of this process “Onboarding ETSI Based NS” can be found under SO NFVO NS Onboarding and LCM Demonstrations It is recommended that you view this video before/alongside this section of the guide.

Step 1:

Login to the ONAP Portal. (Link: https://portal.api.simpledemo.onap.org:30225/ONAPPORTAL/login.htm (where “portal.api.simpledemo.onap.org” is set as the IP of your VM/host of your Portal component.)

Login: cs0008 Password: demo123456!

Step 2:

Select the SDC App. It is possible that your browser will block the scripts run by the Portal, you will need to enable them if it does.

Step 3:

Onboarding your VNF: 1: Click the “ONBOARD” tab near the top of the window. 2: Create a “VLM” if you have not created a “VLM” before.

  • From the “ONBOARD” page, click create VLM.

  • Enter name and description, then select create.

  • Click on the plus button beside Entitlement Pool.

  • Add Name and Manufacturing Reference Number, then click save.

  • Click on the plus button beside License Key Groups.

  • Add Name and select type, then click save.

  • Click on the plus button beside Feature Groups.

  • In the general tab, add name, Description and Part Number. Move to the Entitlements Pools tab, select the entitlement pool you just created and click the rightward arrow. Move to the License Key Group tab, select the license key group you just created and click the rightward arrow. Once these three things are done, click save.

  • Click on the plus button beside License Agreement.

  • Add Name and select License Term. Next move to the Feature Groups tab, select the Feature Group you just created and click the rightward arrow. Lastly click save.

  • On the overview page, select submit in the top right corner of the screen.

  • Enter a commit comment and click Commit & Submit.

3: Create a Virtual Service Product (VSP)

  • Click the “ONBOARD” tab near the top of the window.

  • Click “CREATE NEW VSP” and fill in the required information. Make sure to select “Network Package” for the “ONBOARDING PROCEDURE” section. Then click “CREATE”.

  • Click where it shows “! Missing” underneath “License Agreement”. Simply select a “Licensing Version” and “License Agreement/Feature Group” from the drop downs.

  • Click the “Overview” tab on the left hand side. Then press “Select File” in the “SOFTWARE PRODUCT ATTACHMENTS” section and select your prepared VNF Package. If you are onboarding a supported zip, then click “PROCEED TO VALIDATION” once you can see your added files. You can safely ignore any warnings that come up at this step, but not any errors. (Note: The package validation does not support CSARs currently, they will still work however, providing they meet SDC requirements.)

  • Now click “Submit”.

4: Then click “ONBOARD” in the top left. Hover your mouse over the small grey triangle that is just to the right of the “ONBOARD” tab and select “HOME”.

5: Hover over the “IMPORT” square and select “Import VSP”. Find your VSP, click the drop-down arrow beside it and then press the “Import VSP” icon at the far right of the line that drops down.

6: You will now be brought to the draft page of your VF. You can now Certify your VF, by clicking “Certify” in the top-right of the VF Page.

Creating/Configuring your SDC Service:

Step 1:

In the “HOME” tab of the SDC ONAP Portal, hover over the “ADD” square and select “ADD SERVICE”. Fill in the required fields, select the “Category” “Network Service” and press “Create” in the top right-hand corner.

Step 2:

You will be brought to the draft page of your Service. Go to the “Composition” tab on the left-hand side and drag/drop the VF, that you just created, into this service (you can search for the VF by name in the top left).

Step 3:

Now you will need to add the Network Service CSAR package to this service. You can do this by clicking in the blank whitespace of the composition, then on the right hand side of the page select the 2nd tab in order to add a deployment artifact. Click “ADD ARTIFACT” here, give an “Artifact Label” of “ns”, any description value and ensure you choose a “Type” of “OTHER”. Then click “DONE”.

Step 4:

Finally you can click “Certify” in the top right hand corner, followed by “Distribute”. Your Service will now distributed across ONAP.

Preloading SDNC (Optional)

This next step is optional, and is only required if a user needs to add “addiional-params” or “virtual-link” information. You will need to preload SDNC with the required attributes for your VNF. You will need to access the SDNC OpenDaylight RestConf API Documentation in order to add these attributes.

You will then be required to sign in once you access this site, the credentials are as follows, but may change in the future:

Username: admin

Password: Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U

Next click on VNF-API.

Then use the following endpoint to post the preload JSON, found below.

Endpoint: restconf/operations/VNF-API:vnf-topology-operation

The following section of code is an example of the JSON that needs to be uploaded to the SDNC OpenDaylight RestConf API Documentation site.

Please note that you will need to set the attributes “generic-vnf-name” and “vnf-name” to the exact name that you will use when instantiating the VNF through VID. The attributes “generic-vnf-type” and “vnf-type” need to have the exact same name as the VSP that you imported to SDC, to create the VF.

Preload for SDNC:

{
    "input": {
        "request-information": {
            "notification-url": "openecomp.org",
            "order-number": "1",
            "order-version": "1",
            "request-action": "PreloadVNFRequest",
            "request-id": "robot21"
        },
        "sdnc-request-header": {
            "svc-action": "reserve",
            "svc-notification-url": "http://openecomp.org:8080/adapters/rest/SDNCNotify",
            "svc-request-id": "robot21"
        },
        "vnf-topology-information": {
            "vnf-assignments": {
                "availability-zones": [],
                "vnf-networks": [],
                "vnf-vms": []
            },
            "vnf-parameters": [{
                "vnf-parameter-name": "additionalParams",
                "vnf-parameter-value": "{\"key_1\": \"value_1\"}"
            }, {
                "vnf-parameter-name": "extVirtualLinks",
                "vnf-parameter-value": "{}"
            }],
            "vnf-topology-identifier": {
                "generic-vnf-name": "VnfInstantiateName",
                "generic-vnf-type": "VspPackageName",
                "service-type": "vCPE",
                "vnf-name": "VnfInstantiateName",
                "vnf-type": "VspPackageName"
            }
        }
    }
}

The datatype of “additionalParams” and “extVirtualLinks” can be found in the Sol003 Specifications.

The data must be JSON and contain only escaped strings. Here are examples of both:

Example of additionalParameters parameter:

{\"enableRollback\": \"false\"}

Example of extVirtualLinks Parameter:

[{\"id\":\"3b94d0be-6e37-4a01-920f-512e96803fc9\",\"tenant\":{\"cloudOwner\":\"CloudOwner\",\"regionName\":\"RegionOne\",\"tenantId\":\"f3d66580-7eff-4da5-8d27-91f984ad0c0b\"},\"resourceId\":\"e6e1a04d-c599-4b09-bc16-688834d0ac50\",\"extCps\":[{\"cpdId\":\"a83f86e0-7e9b-4514-9198-2d9eba91bd8e\",\"cpConfig\":[{\"cpInstanceId\":\"f966673d-fb96-41d4-8e5c-659f1c8c6bcc\",\"linkPortId\":null,\"cpProtocolData\":null}]}],\"extLinkPorts\":null}]

Using VID to send Instantiate Request

In order to access the VID (Virtual Infrastructure Deployment) component through the portal, you will need to login with the id “demo”. Once logged in to VID, first ensure that the GR-API is set. First we will need to instantiate the service, once this is done we can then instantiate the VNF. This will be when the ETSI Workflows are run.

Deploy SDC Service

You will need to select “Deploy an SDC Service” on the left-hand side of the GUI. You should see your distributed service in the list of services shown here. (Note: if you cannot see your services here then you will need to go back to SDC, to check the status of the distribution.)

  • Press “Deploy” on the left-hand side of the service you have distributed.

  • Fill out the required fields and press “Confirm”.

  • Wait for the Service to be instantiated.

  • Press “Close” at bottom of pop-up window.

Now you should be brought to the “View/Edit Service Instance” page, focused on the service you just instantiated.

Instantiate VNF:

  • Press “Add node instance” and select your VNF.

  • Fill out the required fields and press “Confirm”.

  • Leave this VID page open, as this step can take quite some time, depending on a number of factors.

  • Monitor the VNF instantiation through your VNFM GUI and back through the SO-ETSI-SOL003-Adapter logs and finally the BPMN logs.

  • Upon success, your VNF should be instantiated correctly.

Delete VNF:

  • Travel back to the service instance that you instantiated your VNF through.

  • Simply select the red X on the right-hand side of the VNF instance.

  • The VNF should begin terminating now, it may take quite some time, depending on a number of factors.

  • Monitor the VNFM GUI and other logs until success.

Monitoring Logs (BPMN, SO-ETSI-SOL003-ADAPTER and VNFM)

There are 3 stages of logs to monitor throughout the process of instantiating your service, and sending your request through the SO-ETSI-SOL003-Adapter, to your VNFM.

The initial service instantiation request will be recorded in the BPMN-INFRA pod’s logs. Logging into this pod will enable you to view them through the “debug.log” file.

The VNF instantiation request will appear first in the BPMN-INFRA pod’s logs, then once the ETSI Building Block is being executed you will see entries going through the SO-ETSI-SOL003-Adapter pod’s logs. Followed finally by the VNFM itself receiving a request from the SO-ETSI-SOL003-Adapter. This should all be recorded throughout the “debug.logs” on each of the mentioned pods.

The other areas to monitor would be your VNFM’s GUI (if applicable), your Openstack Tenant’s logs as well as it’s server list and the SO-Admin-Cockpit tool (in order to see the BPMN flow’s progress).

Example Zip VNF Package

Please follow the structure laid out below for creating your onboarding package.

Structure:

5 files (2 .yaml, 1 .meta, 1 .json, 1 .env)

  • base.yaml

  • descriptor.yaml

  • base.env

  • MANIFEST.json

  • TOSCA.meta

  • Compressed in a Zip folder.

  • No directories. (Flat structure)

Files:

base.yaml - This file will be a very simple HEAT template, as it is just required in order to be able to instantiate the Service once its distributed.

descriptor.yaml - This file will contain the VNFD (Virtual Network Function Descriptor). It must be structured to match what the SO-ETSI-SOL003-Adapter searches for.

base.env - This file simply contains some environment variables for the base.yaml.

MANIFEST.json - This file lists all of the other files contained within it’s package.

TOSCA.meta - This important file contains the path of the VNFD, which will be used by the SO-ETSI-SOL003-Adapter.

Please find example versions of the files below:

base.yaml

heat_template_version: 2013-05-23
description: Simple template to deploy a single compute instance

parameters:
  simple_name_0:
    type: string
    label: Key Name
    description: Name of key-pair to be used for compute instance
  simple_key:
    type: string
    label: Key Name
    description: Name of key-pair to be used for compute instance
  simple_image_name:
    type: string
    label: Image ID
    description: Image to be used for compute instance
  simple_flavor_name:
    type: string
    label: Instance Type
    description: Type of instance (flavor) to be used
  vnf_id:
    type: string
    label: VNF ID
    description: The VNF ID is provided by ONAP
  vf_module_id:
    type: string
    label: vFirewall module ID
    description: The vFirewall Module ID is provided by ONAP
  simple_netid:
    type: string
    label: Netid
    description: netid
  public_net_id:
    type: string
    label: Netid
    description: public NetId
  ves_ip:
    type: string
    label: Netid
    description: public ves_ip
  node_ip:
    type: string
    label: Netid
    description: public ves_ip

resources:

  simple_0_private_port:
    type: OS::Neutron::Port
    properties:
      network: { get_param: simple_netid }
      fixed_ips:
      - ip_address: { get_param: node_ip }

  simple_0:
    type: OS::Nova::Server
    properties:
      availability_zone: nova
      key_name: { get_param: simple_key }
      image: { get_param: simple_image_name }
      flavor: { get_param: simple_flavor_name }
      name: { get_param: simple_name_0 }
      metadata: {vnf_id: { get_param: vnf_id }, vf_module_id: { get_param: vf_module_id }}
      networks:
      - port: { get_resource: simple_0_private_port }
      user_data_format: RAW
      user_data:
        str_replace:
          params:
            __ves_ip__: { get_param: ves_ip }
            __vnfId__: { get_param: vnf_id }

          template: |
            #!/bin/bash

            echo "the value we got for vndID was : __vnfId__" >> /tmp/vnfid.log

outputs:
  oam_management_v4_address:
    description: The IP address of the oam_management_v4_address
    value: { get_param: node_ip  }

descriptor.yaml

tosca_definitions_version: tosca_simple_yaml_1_1

imports:
    - etsi_nfv_sol001_vnfd_0_10_0_type.yaml

node_types:
    Wiki.Demo.VnfmImageId:
        derived_from: tosca.nodes.nfv.VNF
        properties:
            descriptor_id:
                type: string
                constraints: [ valid_values: [ VnfmImageId ] ]
                default: VnfmImageId

The “descriptor.yaml” is the most important file within the package, as it provides the ID/Name of the VNF package for the VNFM to use when instantiating. It must follow the structure above, or the SO-ETSI-SOL003-Adapter will not be able to locate the VNFD.

Don’t forget to replace “VnfmImageId” with the ID of your VNF package.

base.env

parameters:
  simple_image_name: UBUNTU16
  simple_flavor_name: m1.small
  simple_name_0: SIMPLEUBU
  simple_key: demo-key
  vnf_id: VESMED
  vf_module_id: vfModuleId
  simple_netid:  onap_vip
  public_net_id: nova_floating
  ves_ip: 172.55.10.10
  node_ip: 172.55.10.10

MANIFEST.json

{
    "name": "MMEPackage",
    "description": "Test",
    "version": "0.0",
    "data": [{
        "isBase": true,
        "file": "base.yaml",
        "type": "HEAT",
        "data": [{
            "file": "base.env",
            "type": "HEAT_ENV"
        }]
    },
    {
        "file": "descriptor.yaml",
        "type": "OTHER"
    },
    {
        "file": "TOSCA.meta",
        "type": "OTHER"
    }]
}

TOSCA.meta

TOSCA-Meta-File-Version: 1.0
CSAR-Version: 1.1
Created-by: Demo
Entry-Definitions: Artifacts/Deployment/OTHER/descriptor.yaml

The MANIFEST.json and TOSCA.meta are extremely important, if either are incorrectly formatted it will either fail to onboard or fail to distribute when you get to that step.

Ensure that the file names all match and your indentation/quotes are all correct, as it will save you a lot of time.

ASD Architecture

ASD Overview

Application Service Descriptor (ASD) is a deployment descriptor for cloud native application/functions. It seeks to provide deployment using the minimum information needed by the orchestrator. The CSAR package adheres to ETSI SOL004. ASD minimizes duplication whilst leveraging the management capabilities of the Kubernets platfor. It provides a clear separation between high level orchestration and cloud native application deployment.

ASD Architecture Overview

The following diagram depicts the ASD high-level architecture:

CreateVfModuleVolumeInfraV1 is a main process flow.

_images/asd_architecture.png

ASD POC wiki page

ASD Onboarding

The following diagram depicts the ASD onboarding to ONAP SDC:

_images/asd_onboarding.png

ASD Orchestration by ONAP SO

The following diagram depicts the ASD Orchestration by ONAP SO:

_images/asd_orchestration.png

AS LCM RESTful Protocols

SO CNFM

The following diagram depicts the SO CNFM, an SO Plug-in component:

_images/asd_cnfm.png

Frequently Asked Questions SO

Casablanca Release throws java.sql.SQLDataException: (conn:85) Data too long for column ‘RESOURCE_INPUT’ at row 1

This issue could be solved either using the SO-1.3.7 release or through a manual patch to update the lenght of the column ‘RESOURCE_INPUT’.

Following are the sql statements to update length of resource_input:

use catalogdb;

ALTER TABLE vnf_resource_customization MODIFY IF EXISTS RESOURCE_INPUT varchar(20000);

ALTER TABLE network_resource_customization MODIFY IF EXISTS RESOURCE_INPUT varchar(20000);

ALTER TABLE allotted_resource_customization MODIFY IF EXISTS RESOURCE_INPUT varchar(20000);

in so mariadb pod (username/password root/password)

Integrate SO with MultiCloud

Integrate SO with MultiCloud

There are 2 SO tables that you need to modify if you want to use Multicloud. They are in the MariaDB container in the dev-so service. Here are the credentials to access the DB (through mysql command line): cataloguser/catalog123. The table you need to use is called catalogdb.

The 2 tables are cloud_sites and identity_services. cloud_sites contains information about the cloud (region name and keystone for example). The keystone name (IDENTITY_SERVICE_ID) is the key of identity_services table, which contains specific information about cloud authentication. In the example below, you can see my configuration for a cloud region called RegionTwo, in which SO uses Multicoud for talking to the underlying cloud platfrorm. Note indeed that the IDENTITY_URL in identity_services redirects to Multicloud. In practice, SO reads cloud and authentication information from this two tables, and uses the provided keystone authentication given an identity URL.

MariaDB [catalogdb]> select * from cloud_sites;

ID | REGION_ID | IDENTITY_SERVICE_ID | CLOUD_VERSION | CLLI | CLOUDIFY_ID | PLATFORM | ORCHESTRATOR | LAST_UPDATED_BY | CREATION_TIMESTAMP | UPDATE_TIMESTAMP |
Chicago | ORD | RAX_KEYSTONE | 2.5 | ORD | NULL | NULL | NULL | FLYWAY | 2018-12-28 22:58:34 | 2018-12-28 22:58:34 |
Dallas | DFW | RAX_KEYSTONE | 2.5 | DFW | NULL | NULL | NULL | FLYWAY | 2018-12-28 22:58:34 | 2018-12-28 22:58:34 |
DEFAULT | RegionOne | DEFAULT_KEYSTONE | 2.5 | RegionOne | NULL | NULL | NULL | FLYWAY | 2018-12-28 22:58:34 | 2018-12-28 22:58:34 |
Northern Virginia | IAD | RAX_KEYSTONE | 2.5 | IAD | NULL | NULL | NULL | FLYWAY | 2018-12-28 22:58:34 | 2018-12-28 22:58:34 |
RegionOne | RegionOne | DEFAULT_KEYSTONE | 2.5 | RegionOne | NULL | NULL | NULL | FLYWAY | 2018-12-28 22:58:34 | 2018-12-28 22:58:34 |
RegionTwo | RegionTwo | KEYSTONE_REGION_TWO | 2.5 | RegionTwo | NULL | NULL | NULL | FLYWAY | 2019-01-02 20:07:28 | 2019-01-02 20:07:28 |

MariaDB [catalogdb]> select * from identity_services;

ID | IDENTITY_URL | MSO_ID | MSO_PASS | ADMIN_TENANT | MEMBER_ROLE | TENANT_METADATA | IDENTITY_SERVER_TYPE | IDENTITY_AUTHENTICATION_TYPE | LAST_UPDATED_BY | CREATION_TIMESTAMP | UPDATE_TIMESTAMP |
DEFAULT_KEYSTONE | http://135.197.225.10:5000/v2.0 | admin | a83e2b8446193c5ac450d84f0f1dc711 | service | admin | 1 | KEYSTONE | USERNAME_PASSWORD | FLYWAY | 2018-12-28 22:58:34 | 2018-12-28 22:58:34 |
KEYSTONE_REGION_TWO | http://10.43.117.142:9001/api/multicloud/v0/CloudOwner_RegionTwo/identity/v2.0 | username | <encrypted pwd> | service | admin | 1 | KEYSTONE | USERNAME_PASSWORD | FLYWAY | 2019-01-02 20:03:26 | 2019-01-02 20:03:26 |
RAX_KEYSTONE | https://identity.api.rackspacecloud.com/v2.0 | RACKSPACE_ACCOUNT_ID | RACKSPACE_ACCOUNT_APIKEY | service | admin | 1 | KEYSTONE | RACKSPACE_APIKEY | FLYWAY | 2018-12-28 22:58:34 | 2018-12-28 22:58:34 |

One thing to know is that the actual IP 10.43.117.142:9001 is the MSB (iag) container. Multicloud registers with MSB, so you can use MSB to fetch the Multicloud endpoint (I think you can use the K8S cluster IP and MSB node port for that instead of the actual MSB container IP and port).

One final thing: you may need to add identity URL to the AAI cloud region as well, like this:

curl -X PUT

https://135.197.220.117:30233/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionTwo

-H ‘Accept: application/json’

-H ‘Content-Type: application/json’

-H ‘Postman-Token: b05ff02d-78c7-4e1e-9457-d9fa9cc5da65’

-H ‘X-FromAppId: AAI’

-H ‘X-TransactionId: get_aai_subscr’

-H ‘cache-control: no-cache’

-d ‘{

“cloud-owner”: “CloudOwner”,

“cloud-region-id”: “RegionTwo”,

“cloud-type”: “openstack”,

“cloud-region-version”: “v2.5”,

“identity-url”: “http://10.43.111.6/api/multicloud/v0/CloudOwner_RegionTwo/identity/v2.0/tokens”,

“cloud-zone”: “bm-2”,

“complex-name”: “complex-2”,

“tenants”: {

“tenant”: [{

“tenant-id”: “c236140a3dff4911bb4c7c86940616cc”,

“tenant-name”: “ONAP_Casablanca”

}]

},

“esr-system-info-list”: {

“esr-system-info”: [{

“esr-system-info-id”: “1”,

“system-name”: “OpenStack-2”,

“type”: “vim”,

“service-url”: “http://XXX:5000/v3”,

“user-name”: “username”,

“password”: “password”,

“system-type”: “VIM”,

“ssl-insecure”: true,

“cloud-domain”: “default”,

“default-tenant”: “ONAP_Casablanca”

}]

}

}’

Building Block Understanding

Building Block Understanding
UNDERSTANDING BUILDING BLOCKS USING MACRO FLOW

There are basically 2 flows - macro , a la carte.

In a la carte:

We manually will initiate each step for a process.

In macro:

The whole flow happens at a single click like if we want to create a service. The flow will itself look whether there are vnfs, pnfs or networks in the service and it will be created and activated in the flow also.Thus these independent tasks like if vnf is present, then assign create and activate vnf are all taken up as individual building blocks and are only called on need basis. Each and every request will reach to the api handler first.

API HANDLER( ServiceInstances.java )

# 1. Rest call reaching SO Api handler with the input json

According to the below path it is mapped to the createServiceInstance function in ServiceInstances file.

curl -v -H "Content-Type: application/json" -X POST --data @serviceinstance.json -u mso_admin:password1$ http://localhost:8080/onap/so/infra/serviceInstantiation/v7/serviceInstances.

# 2. Herein a unique requestid is generated corresponding to every request, and is checked whether that particular requestid exists in request db (Happens in createServiceInstance in ServiceInstances).

  1. http://request-db-adapter:8083/infraActiveRequests/requestid (GET), which will return a 404 if not exists.

  2. CreateInstance is set to the action variable. Here the request scope is set to service from the inputjson - modelType.

# 3. Running local validations on input json.

# 4. create InfraActiveRequests, to store request details in request db adapter and as a payload to bpmn.

  1. A new InfraActiveRequests object is created. And all the necessary information from the input is set to it.

  2. Retrieving productFamilyName from the input json to put into requests db. http://aai/servicedesigncreation/services/service/{productfamilyid} (GET), which will return a 404 if not exists in aai. If service exists, then that service’s serviceDescritiption is set as productfamilyName.

  3. http://aai/cloudinfrastructure/cloudregions/cloudregion/cloudowner/{lcpCloudRegionId}/tenants/tenant/{tenantId} (GET), checks for whether the particular cloud configuration exists in aai, if not exists returns 404. If we are able to get, then the tenant’s name derived from aai is set as tenantName.

  4. serviceInstanceName is derived from requestInfo.instanceName and is set.

  5. Request json is also set as RequestBody of InfraActiveRequests.

# 5. Checks fro whether duplicate name exists.

  1. version v[integer] is converted to the particular integer and stored.

  2. Checks whether instance name already exists in with a POST request in http://request-db-adapter:8083/infraActiveRequests/checkInstanceNameDuplicate, with the data { instanceIdmap = null, instanceName = {instanceName} , instanceservice = service } . It checks for the current progress and if in progress it throws the particular status.

# 6. Gets the orchestration url from the recipe table.

  1. Checks whether the service already exists in catalogdb http://catalog-db-adapter:8082/service/{modelNameVersionId} (GET).

  2. Checks the service recipe table with the modelNameVersionId and the action to be performed http://catalog-db-adapter:8082/serviceRecipe/search/findFirstByServiceModelUUIDAndAction?serviceModelUUID={modelNameVersionId}&action=createInstance . Returns a 404 if no recipe exists with the corresponding id.

  3. As recipe corresponding to this doesn’t exist, we try to get with a default value. This flow comes under generic resource flow so the default value is GR-API-DEFAULT. First we get service with this value http://catalog-db-adapter:8082/service/search/findFirstByModelNameOrderByModelVersionDesc?modelName=GR-API-DEFAULT (GET). It returns a service with modelUUID as d88da85c-d9e8-4f73-b837-3a72a431622b, and further can be used to get the recipe.

  4. http://catalog-db-adapter:8082/serviceRecipe/search/findFirstByServiceModelUUIDAndAction?serviceModelUUID=d88da85c-d9e8-4f73-b837-3a72a431622b&action=createInstance (GET), gives a recipe which has a parameter “orchestrationUri” as “/mso/async/services/WorkflowActionBB”.

# 7. Updates the infraActiveRequests with the current request.

  1. http://request-db-adapter:8083/infraActiveRequests/ (POST) with the data formed. And a 201 created response is received.

# 8. Call the bpmn with a post call on orchestrationUri. The data to bpmn is prepared having parameters like

  1. bpmnRequest - formed from input request.

  2. vfModuleId, pnfCorrelationId, networkId, configurationId, vfModuleType, serviceInstanceId , serviceType are updated if present in the input json or else set to empty string.

  3. apiVersion , requestId, aLaCarte = false (def), recipeTimeout = 180(def) ,requestAction= createInstance are all updated accordingly.

  4. requestUri - v7/serviceInstances ,which is formed from the request url.

# 9. A sync response is obtained on reaching bpmn like

{“requestReferences”:{“requestId”:”c45702f7-3f08-4081-bc98-2f9f18b81607”,”instanceId”:”cadca18f-9bff-44be-8910-ad29d342e91f”,”requestSelfLink”:”http://159.138.57.166:30277/orchestrationRequests/v7/c45702f7-3f08-4081-bc98-2f9f18b81607”}}.

# 10. Calls the WorkflowActionBB.bpmn

BPMN
Hits WorkflowActionBB.bpmn
_images/workflow.png

# 10.1. RetrieveBBExecutionList - implemented in selectExecutionList in WorkflowAction.java

  1. resourcetype, resourceid are formed from matching the requestUri to a regex pattern matcher

[pattern=[vV]\d+.*?(?:(?:/(?<type>vnfs|vfModules|networks|networkCollections|volumeGroups|serviceInstances|instanceGroups)(?:/(?<id>[^/]+))?)(?:/(?<action>[^/]+))?(?:/resume)?)] .
  1. Checks whether there is a service subscription with service instance name as {instanceName} correspoding to the customer in aai

    https://aai.onap:8443/aai/v19/business/customers/customer/slice1/service-subscriptions/service-subscription/service/service-instances?depth=2&resultIndex=0&resultSize=1&service-instance-name={instanceName}.
    

    Returns 404 not found, if it doesnt exists then the id of that particular instance is taken and given as both the resourceid and serviceinstance id. If not present then a random value is generated, and is assigned same to both.

  2. Checks whether there is a service of the particular serviceInstanceId exists in aai. https://aai.onap:8443/aai/v19/nodes/service-instances/service-instance/{serviceInstanceId} , returns not found if it doesnt exist. If service with corresponding instance name already exists , then flowsToExecute is got by quering the requestdbadapter with the earlier request id. If not present, then only orchestrationflows are got, and later from that the flowsToExecute are found out.

  3. Get the particular service from catalogdb . http://so-catalog-db-adapter.onap:8082/service/{modelNameVersionId} (GET). Be sure that the service with this particular modelNameVersionId exists in catalogdb, because based on the services (like whether pnf, or vnf, or networkcollection) present in that particular service, which all bbs to execute are decided.

  4. This being a service, “service” is added to the resource list. And is checked upon for other resources like vnf and network, eg:

    http://so-catalog-db-adapter.onap:8082/service/{modelNameVersionId}/vnfCustomizations (GET)

    http://so-catalog-db-adapter.onap:8082/service/{modelNameVersionId}/collectionResourceCustomizations (GET)

    http://so-catalog-db-adapter.onap:8082/service/{modelNameVersionId}/networkCustomizations (GET)

    And depending on the resources in the service, the resources found is updated like

    Found :Service - 1 Vnf - 0 Pnf - 0 VfModule - 0 VolumeGroup - 0 Network - 0 VirtualLink - 0 NetworkCollection - 0 Configuration - 0 InstanceGroup - 0

  5. Then the orchestration flows are get from the orchestration_flow_table depending on the cloudowner and request scope:

    http://so-catalog-db-adapter.onap:8082/northbound_request_ref_lookup/search/findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType?action=createInstance&requestScope=Service&isALaCarte=false&cloudOwner={CloudOwner}&serviceType=%2A (GET)

    Here if present, then the orchestration flows are returned or else with default cloud owner, we try again

    http://so-catalog-db-adapter.onap:8082/northbound_request_ref_lookup/search/findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType?action=createInstance&requestScope=Service&isALaCarte=false&cloudOwner=DEFAULT&serviceType=%2A (GET)

    Here in northBoundRequest is returned which has the parameter orchestrationFlowList, that contains the link that will return the orchestration flows.

    “orchestrationFlowList” : { “href” : “http://so-catalog-db-adapter.onap:8082/northbound_request_ref_lookup/101/orchestrationFlowList”}

    Now we do a get on the orchestration flow link to get the set of orchestration flows required

    http://so-catalog-db-adapter.onap:8082/northbound_request_ref_lookup/101/orchestrationFlowList.

    Here a set of 20 orchestration flows are returned under the action of Service-Macro-Create, each with a sequence no assigned sequentially in the given order

    • AssignServiceInstanceBB,

    • CreateNetworkCollectionBB,

    • AssignNetworkBB,

    • AssignVnfBB,

    • AssignVolumeGroupBB,

    • AssignVfModuleBB,

    • ConfigAssignVnfBB,

    • AssignPnfBB,

    • WaitForPnfReadyBB,

    • ActivatePnfBB,

    • CreateNetworkBB,

    • ActivateNetworkBB,

    • CreateVolumeGroupBB,

    • ActivateVolumeGroupBB,

    • CreateVfModuleBB,

    • ActivateVfModuleBB,

    • ConfigDeployVnfBB,

    • ActivateVnfBB,

    • ActivateNetworkCollectionBB,

    • ActivateServiceInstanceBB.

    _images/flowchart.png
  6. Flows to execute is determined by iterating through all the orchestartion flows and matching it with the found resources. It is merely a contains matching. In this particular as service was the only resource : List of BuildingBlocks to execute:AssignServiceInstanceBB, ActivateServiceInstanceBB.

  7. processing data is added to the requestdbadapter. Here the data is post to the requestdb as two different building blocks http://so-request-db-adapter.onap:8083/requestProcessingData.

  8. The already stored request details in request db is ammended like “lastModifiedBy” : “CamundaBPMN” , and status to in_progress with a put request.

# 10.2. sendSyncAck - This was used to give an acknowledgement , with status code as 200, and requestId and resourceId is sent as content.

# 10.3. Prevalidate the workflow

# 10.4. SelectBB - implemented in selectBBin WorkflowActionBBTasks

This is used to select the building block from the flows to execute depending on the sequence order.

  1. Depending on the current sequence , the building block is selected from the flows to execute.

  2. Execution variable, that is passed between the different building blocks as the payload is amended as: execution.setVariable(“buildingBlock”, buildingblockselected).

  3. current sequence is incremented by 1, and updated in execution variable.

  4. Depending on whether currentSequence is greater than flowsToExecute.size(), COMPLETED variable is either set to true or false.

# 10.5. updateFlowStatistics - implemented in updateFlowStatistics in WorkflowActionBBTasks

  1. Depending on the current sequence no, the completed bb and next bb is got from the flows to execute. And these are mentioned in a statusMessage.

  2. Percentage progress is got from the total no of bbs

  3. These are ammended to the already present request in the request db

# 10.6. Execute BB - calls the ExecuteBuildingBlock.bpmn


Hits ExecuteBuildingBlock.bpmn
_images/ExecuteBuildingBlock.png

# 10.6.1. BBInputSetup - implemented in execute in BBInputSetup

Here a generalbuildingblock is formed from executingbuildingblock after certain updations and validations.

  1. lookupKeyMap is formed from the input , and a map is formed with serviceInstanceId, networkID, vnfID, pnfID, vfmoduleID, volumegroupID, configurationID, instancegroupID as the keys.

  2. Depending on whether a la carte or macro , different flows are called. getGBBMacro is called in here.

  3. In getGBBMacro , a valid customer is got with service subscription. (getCustomerAndServiceSubscription)

    First a customer is got by get request on https://aai.onap:8443/aai/v19/business/customers/customer/{globalSubscriberId}

    After that ServiceSubscription is got by doing a get request

    https://aai.onap:8443/aai/v19/business/customers/customer/{globalSubscriberId}/service-subscriptions/service-subscription/service

    If, the above request doesnt give any , then ServiceSubscription is fetched by first creating uri keys

    https://aai.onap:8443/aai/v19/nodes/service-instances/service-instance/{resourceId}?format=pathed.

    Then ServiceSubscription is got from the globalSubscriberId and the uri keys

    Note

    a valid customer and a corresponding ServiceSubscription must be present in the aai, for setting up the customer to gbuildingblock

  4. project and owningEntity is updated from the input

  5. service is got from the catalog db either by ModelVersionId or by ModelVersion and ModelInvariantId.

  6. ServiceInstance is created from the above parameters, and this ServiceInstance is used in the preparation of general building block.

  7. Depending on whether the current executing block name contains either of the network, or configuration, or network collection. A new instance of the corresponding type is created and is updated to the general building block (Happens in getGBBMacroNoUserParamsCreate)

  8. This general building block is set to the gBuildingBlockExecution and gBBInput parameter of execution.

# 10.6.2. StatusPolicy - implemented in validateOrchestrationStatus in OrchestrationStatusValidator. Input being gBuildingBlockExecution

  1. orchestrationStatus is obtained after checking the resource type. We had updated the orchestrationStatus in the above step when a new service instance was created.

  2. OrchestrationStatusStateTransitionDirective is got by doing a get call to the catlog db with the url as findOneByResourceTypeAndOrchestrationStatusAndTargetAction

    http://so-catalog-db-adapter.onap:8082/orchestrationStatusStateTransitionDirective/search/findOneByResourceTypeAndOrchestrationStatusAndTargetAction?resourceType=SERVICE&orchestrationStatus=PRECREATED&targetAction=ASSIGN

  1. orchestrationStatusValidationResult parameter is set to executionvariable from the OrchestrationStatusStateTransitionDirective.getFlowDirective() “flowDirective” : “CONTINUE”

# 10.6.3. Prevalidate the gBuildingBlockExecution

# 10.6.4. BB To Execute: Depending on which building block is to be executed, that particular bpmn is called .In this case, AssignServiceInstanceBB is called


# 10.6.4.1. AAI create service subscription - implemented in createServiceSubscription of createAAITasks

This method is used for creating and subscribing the service in A&AI

  1. Customer is got from the general building block that was updated above

  2. Here a serviceSubscriptionURI is formed by taking in the globalSubscriberId and the serviceType

  3. If a service subscription for the particular customer doesnt exist in AAI, then a new subscription is created by taking in the serviceSubscriptionURI

GET performed on uri:https://aai.onap:8443/aai/v19/business/customers/customer/slice1/service-subscriptions/service-subscription/service? {“results”:[{“service-subscription”:1}]}

# 10.6.4.2. AAI create service instance - implemented in createServiceInstance of createAAITasks

This method is used for creating the service instance in A&AI

  1. Customer is got from the general building block that was updated above

  2. A serviceInstanceURI is formed by taking in the globalSubscriberId, the serviceType and the service instance id

  3. If the service instance in the particular path doesnt exist in AAI , then a new service instance is created by using the serviceInstanceURI

GET to:https://aai.onap:8443/aai/v19/business/customers/customer/slice1/service-subscriptions/service-subscription/service/service-instances/service-instance/2b955def-e536-40ee-84cb-3f06e3cc6d84?

response: {"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","business/customers/customer/slice1/service-subscriptions/service-subscription/service/service-instances/service-instance/2b955def-e536-40ee-84cb-3f06e3cc6d84","Node Not Found:No Node of type service-instance found at: business/customers/customer/slice1/service-subscriptions/service-subscription/service/service-instances/service-instance/2b955def-e536-40ee-84cb-3f06e3cc6d84","ERR.5.4.6114"]}}}

Sending HTTP PUT to:https://aai.onap:8443/aai/v19/business/customers/customer/slice1/service-subscriptions/service-subscription/service/service-instances/service-instance/2b955def-e536-40ee-84cb-3f06e3cc6d84

with req body : {"service-instance-id":"2b955def-e536-40ee-84cb-3f06e3cc6d84","service-instance-name":"DEMO_123456","model-invariant-id":"944862ae-bb65-4429-8330-a6c9170d6672","model-version-id":"d88da85c-d9e8-4f73-b837-3a72a431622b","orchestration-status":"Inventoried"}

# 10.6.4.3. AAI create project - implemented in createProject of createAAITasks

This method is used for creation of the project A&AI. Here too it checks whether a project with a {projectName} exist in AAI . If not it creates one, and connects it to the service instance identified by the serviceInstanceId

Sending HTTP PUT to:https://aai.onap:8443/aai/v19/business/projects/project/name%20of%20proj/relationship-list/relationship

with req body: {"related-link":"/business/customers/customer/slice1/service-subscriptions/service-subscription/service/service-instances/service-instance/2b955def-e536-40ee-84cb-3f06e3cc6d84"}

# 10.6.4.4. AAI create owning entity - implemented in createOwningEntity of createAAITasks

  1. OwningEntityId and OwningEntityName is extracted from the OwningEntity given in the input json

  2. If both of them are null, then an exception is raised.

  3. If only OwningEntityId is null, then whether the OwningEntityName is present in AAI is checked. If present then OwningEntityId is set by quering the OwningEntity from AAI. And then connect it to the service instance. If not present in the aai then a random id is generated and assigned to OwningEntityId. Then Owning entity is first created and then connected to the service instance

  4. Depending on whether the owning entity is already present or not, either createOwningEntityandConnectServiceInstance is called, or connectOwningEntityandServiceInstanceis called.

    Sending HTTP PUT to:https://aai.onap:8443/aai/v19/business/owning-entities/owning-entity/owningEntityIdof%20owningEntity/relationship-list/relationship
    
    req body: {"related-link":"/business/customers/customer/slice1/service-subscriptions/service-subscription/service/service-instances/service-instance/2b955def-e536-40ee-84cb-3f06e3cc6d84"}
    

# 10.6.4.5. SDNC Create Assign Request - implemented in assignServiceInstance of SDNCAssignTasks

  1. Here first the requestContext, serviceInstance, customer are obtained from the general building block

  2. Then a payload for the assignServiceInstance of the sdnc is formed by passing in the above parameters to the assignServiceInstance in sdncSIResources.

  3. A new sdnc request is formed with the above thing as payload

  4. This sdnc request is assigned to the SDNCRequest parameter of the execution variable

    {"input":{
     "request-information" : {
       "request-action" : "CreateServiceInstance",
       "source" : "MSO",
       "request-id" : "139636cd-4b69-4c3a-9e67-fed2c283baee"
    
     },
     "sdnc-request-header" : {
    
       "svc-request-id" : "9bfe8cb0-bb8b-4dca-949d-2f2b51011b54",
       "svc-action" : "assign"
    
     },
     "service-information" : {
    
       "onap-model-information" : {
         "model-name" : "GR-API-DEFAULT",
         "model-version" : "1.0",
         "model-uuid" : "d88da85c-d9e8-4f73-b837-3a72a431622b",
         "model-invariant-uuid" : "944862ae-bb65-4429-8330-a6c9170d6672"
    
       },
       "subscription-service-type" : "service",
       "service-id" : "2b955def-e536-40ee-84cb-3f06e3cc6d84",
       "global-customer-id" : {global_customerid},
       "service-instance-id" : "2b955def-e536-40ee-84cb-3f06e3cc6d84"
    
     },
     "service-request-input" : {
    
       "service-input-parameters" : {
         "param" : [ {
           "name" : "some name",
           "value" : "some value"
    
         } ]
    
       },
       "service-instance-name" : {instance_name}
     }
    }}
    

# 10.6.4.6. It calls another bpmn file - SDNCHandler.bpmn

  1. Setup callback variables - Here mainly the correlator variable and the sdnc timeout variable is set

  2. callSDNC - Here post call to sdnc client is done with the above prepared payload. And then isSDNCCompleted is set to the execution variable

    Both the above tasks are implemented in SDNCRequestTasks.

    http://sdnc-oam.onap:8282/restconf/operations/GENERIC-RESOURCE-API:service-topology-operation/

# 10.6.4.7. AAI Update (svc instance)- implemented in the updateOrchestrationStatusAssignedService in AAIUpdateTasks

BPMN access method to update the status of Service to Assigned in AAI. Here serviceInstance is obtained , then its orchestration status is changed to assigned and is updated in the AAI


Reaches back to ExecuteBuildingBlock.bpmn

# 10.6.5. Post validate the generic building block

# 10.6.6. Set Handling Code To Success - implemented in setHandlingStatusSuccess in ExecuteBuildingBlockRainyDay handling code is set to success for the execution variable


Reaches back to WorkflowActionBB.bpmn

# 10.7. postProcessingExecuteBB

If the building block excuted is ActivateVfModuleBB, then a postProcessingExecuteBBActivateVfModule needs to be executed

Then again it is looped back to selectBB through a checkRetryStatus block.

This block comes into play only if the handlingCode is retry, and the retry count is lesser than the maximum allowed no of retries, then the current sequence is again reduced by 1 , so that the same block is executed again. Request in the requestdb is updated with a setRetryStatusMessage, keeping an eye on the no of retries executed.

And in this particular example ActivateServiceInstanceBB. bpmn is called next in the sequence.

Here updateOrchestrationStatusActiveService is called, which is BPMN access method to update status of Service to Active in AAI. Here orchestrationStatus is set to active for the particular service instance and is updated in the AAI .

# 10.8. updateRequestStatusToComplete is called if the “complete” flag is true

  1. Here first the request is got from the requestDbclient http://request-db-adapter:8083/infraActiveRequests/requestid

  2. Then a status message is formed as “Macro-” + resourceName + “-” + action + ” request was executed correctly.”

This status message is updated in the request as well as is set to finalStatusMessage of the execution variable

  1. Other request parameters are updated

    request.setEndTime(endTime);

    request.setFlowStatus(“Successfully completed all Building Blocks”);

    request.setProgress(Long.valueOf(100));

    request.setRequestStatus(“COMPLETE”);

    request.setLastModifiedBy(“CamundaBPMN”);

  2. This new request parameters are updated by a put request to the requestDbclient

Flow ends

If there are other resources present along with the service : Eg :- Volumegroup.( These BBs wil be specifically called )

  1. AssignVolumeGroupBB :

    1. genericvnfid and volumegroupid is obtained from the execution block.

    2. volumegroup orchestrationstatus is set to assigned

    3. a volume group of the above details is created in aai

    4. connect volumegroup to this genericvnf

    5. cloud configuration is got, and then the volumegroup is linked to tenant

  2. createVolumeGroupBB :

    1. get the vf details according to Vf module id from sdnc.

    2. vfmodulequeriedfromsdnc is set to the executionvariable.

    3. createVolumeGroupRequest is formed with getCloudRegion, serviceinstance, genericVnf, volumegroup, sdncVfModuleQueryResponse.

    4. calls vnfadapter, which in turn calls openstackadaptertask.

    5. update heattask in the volumegroup and which is ammended in the aai.

    6. orchestrationstatus for the volume group is set to created.

  3. ActivateVolumeGroupBB :

    orchestrationstatus for the volume group is ammended to active.

Rollback, Retry and abort

When exception is thrown then Error handling event subprocess in BPMN ExecuteBuildingBlock is invoked.

_images/handling_error.png

QueryRainyDayTable task main responsibility is to determine with rainy_day_handler_macro table the right policy to apply in order to recover from error.

For each BB a policy is defined in rainy_day_handler_macro table (retry, rollback, abort …)

HandlingCode parameter is populated with BB policy value.

# 1. In case of retry handling code

Policy in rainy_day_handler_macro table for current BB failure is Retry

_images/retry_Bdd2.png

Once Error handling subprocess has set handlingCode to retry value, the main process retries to execute previous failing BB (green arrow).

_images/retry.png

If a new failure occurred a new retry is performed (green arrow in Error handling subprocess)

_images/retry3.png

Until max retry count is reached, this time secondary policy will be queried.

_images/retry2.png

HandlingCode is now set with secondary policy value from rainy_day_handler_macro table (rollback, abort…)

_images/retry_Bdd.png
# 2. In case of rollback handling code

Policy in rainy_day_handler_macro table for current BB failure is set to Rollback (or RollbackToXXX)

_images/rollback_Bdd.png

In case of Rollback the main process follows green arrows

_images/rollback.png
  1. HandlingCode set previously in Error handling subprocess to Rollback (or RollbackToXXX) drives to RollBack Execution Path in main process

  2. RollBack Execution Path task has responsibility to prepare rollback flow sequence.

    BB FlowName are changed in the following way:

    • AssignXXX => UnassignXXX

    • CreateXXX => DeleteXXX

    • ActivateXXX => DeactivateXXX

    • AddXXX => DeleteXXX

    • VNFSetXXX => VNFUnsetXXX

    • VNFLockXXX => VNFUnLockXXX

    • VNFStopXXX => VNFStartXXX

    • VNFQuiesceXXX => VNFResumeXXX

  3. and 4. Loop on step 3 and step 4, BB are executed one after one in order to rollback previous flow execution.

  1. RollBack completed.

# 3. In case of Abort handling code

Policy in rainy_day_handler_macro table for current BB failure is Abort

_images/abort.png
Suppress Rollback

Request can disable rollback with suppressRollback parameter

if suppressRollback is set to false value, QueryRainyDayTable task will directly return abort without querying policy in table rainy_day_handler_macro

curl --location --request POST 'http://master2:30277/onap/so/infra/serviceInstantiation/v7/serviceInstances' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic abcdef' \
--header 'X-ONAP-PartnerName: NBI' \
--data-raw '{
    "requestDetails": {
        "subscriberInfo": {
            "globalSubscriberId": "ones"
        },
        "requestInfo": {
            "suppressRollback": false,
            "productFamilyId": "Useless_But_Mandatory",

How to Build software without unit tests

cd $HOME/onap/workspace/SO/libs

$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml -DskipTests -Dmaven.test.skip=true clean install

cd $HOME/onap/workspace/SO/so

$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml -DskipTests -Dmaven.test.skip=true clean install

How to Build docker images

SO docker images are built using the “docker” maven profile.

During the build, the chef-repo and so-docker repositories are cloned from gerrit into the “so” directory structure. Extra definitions are required in the build environment to make this happen. You may need to adjust the definition of mso.chef.git.url.prefix to match the way you authenticate yourself when performing git clone –depth 1.

If you are behind a corporate firewall, you can specify proxy definitions for the constructed docker images.

Remove existing docker containers and images

docker stop $(docker ps -qa)

docker rm $(docker ps -aq)

docker rmi -f $(docker images -q)

Build docker images (without proxy definition):

cd $HOME/onap/workspace/SO/so/packages

$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install -P docker
-Dmso.chef.git.url.prefix=ssh://$USER@gerrit.onap.org:29418 -Dmso.chef.git.branchname=master
-Dmso.chef.git.url.suffix.chef.repo=so/chef-repo -Dmso.chef.git.url.suffix.chef.config=so/so-config
-Ddocker.buildArg.http_proxy=http://one.proxy.att.com:8080
-Ddocker.buildArg.https_proxy=http://one.proxy.att.com:8080

Build docker images (with proxy definition):

cd $HOME/onap/workspace/SO/so/packages

$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install -P docker
-Dmso.chef.git.url.prefix=ssh://$USER@gerrit.onap.org:29418 -Dmso.chef.git.branchname=master
-Dmso.chef.git.url.suffix.chef.repo=so/chef-repo -Dmso.chef.git.url.suffix.chef.config=so/so-config
-Ddocker.buildArg.http_proxy=http://proxyhost:port -Ddocker.buildArg.https_proxy=http://proxyhost:port

How to Build with Integration Tests

This is done exactly as described for building docker images, except that the maven profile to use is “with-integration-tests” instead of “docker”. Integration tests are executed inside docker containers constructed by the build.

Service Orchestrator Release Notes

The SO provides the highest level of service orchestration in the ONAP architecture.

Version: 1.11.0

Release Date:

2022-09-08

SO Release Image Versions

  • so-bpmn-infra 1.11.0

  • so-catalog-db-adapter 1.11.0

  • so-admin-cockpit 1.8.3

  • so-nssmf-adapter 1.9.1

  • so-openstack-adapter 1.11.0

  • so-request-db-adapter 1.11.0

  • so-sdc-controller 1.11.0

  • so-sdnc-adapter 1.11.0

  • so-sol003-adapter 1.8.2

  • so-api-handler 1.11.0

  • so-etsi-nfvo-ns-lcm 1.8.2

  • so-oof-adapter 1.8.3

  • so-cnf-adapter 1.11.0

Release Purpose

SO Kohn Release. The key deliverable for this release is refactoring SO for better internal architecture.

Epics

  • REQ-890 - ONAP CNF orchestration - Kohn Enhancements

  • REQ-1041 - VNF LCM Support in SO

  • SO-3802 - Global Requirements Approval

  • SO-3826 - SO impacts for E2E Network Slicing in Kohn Release

Stories

The full list of implemented tasks is available on JIRA Kohn STORY

Tasks

The full list of implemented tasks is available on JIRA Kohn TASKS

Bug Fixes

The full list of fixed bugs is available on JIRA Kohn BUGS

Security Notes

Fixed Security Issues

Quick Links:

Known Issues

  • SO-3237 - Exposed HTTP port.

  • SO-3745 - SO images contain 1 GPLv3 lib

Upgrade Notes

N/A

Deprecation Notes

SO modules Ve-Vnfm-adapter and appc-orchestrator are deprectaed since istanbul release.

Other

N/A


Version: 1.10.0

Release Date:

2022-04-08

SO Release Image Versions

  • so-bpmn-infra 1.10.0

  • so-catalog-db-adapter 1.10.0

  • so-admin-cockpit 1.8.3

  • so-nssmf-adapter 1.9.1

  • so-openstack-adapter 1.10.0

  • so-request-db-adapter 1.10.0

  • so-sdc-controller 1.10.0

  • so-sdnc-adapter 1.10.0

  • so-sol003-adapter 1.8.2

  • so-api-handler 1.10.0

  • so-etsi-nfvo-ns-lcm 1.8.2

  • so-oof-adapter 1.8.3

  • so-cnf-adapter 1.10.0

Release Purpose

SO Jakarta Release. The key deliverable for this release is refactoring SO for better internal architecture.

Epics

  • REQ-890 - ONAP CNF orchestration - Jakarta Enhancements

  • REQ-1041 - VNF LCM Support in SO

  • SO-3802 - Global Requirements Approval

  • SO-3826 - SO impacts for E2E Network Slicing in Jakarta Release

Stories

The full list of implemented tasks is available on JIRA Jakarta STORY

Tasks

The full list of implemented tasks is available on JIRA Jakarta TASKS

Bug Fixes

The full list of fixed bugs is available on JIRA Jakarta BUGS

Security Notes

Fixed Security Issues

Quick Links:

Known Issues

  • SO-3237 - Exposed HTTP port.

  • SO-3745 - SO images contain 1 GPLv3 lib

Upgrade Notes

N/A

Deprecation Notes

SO modules Ve-Vnfm-adapter and appc-orchestrator are deprectaed since istanbul release.

Other

N/A


Version: 1.9.2

Release Date:

2021-10-14

SO Release Image Versions

  • so-bpmn-infra 1.9.2

  • so-catalog-db-adapter 1.9.2

  • so-admin-cockpit 1.8.3

  • so-nssmf-adapter 1.9.1

  • so-openstack-adapter 1.9.2

  • so-request-db-adapter 1.9.2

  • so-sdc-controller 1.9.2

  • so-sdnc-adapter 1.9.2

  • so-sol003-adapter 1.8.2

  • so-api-handler-infra 1.9.2

  • so-etsi-nfvo-ns-lcm 1.8.2

  • so-oof-adapter 1.8.3

  • so-cnf-adapter 1.9.1

Release Purpose

SO Istanbul Release. The key deliverable for this release is refactoring SO for better internal architecture.

Epics

  • REQ-627 - ONAP CNF orchestration - Istanbul Enhancements

  • SO-3649 - SO impacts for E2E Network Slicing in Istanbul Release

  • SO-3637 - Global Requirements Approval

  • SO-3473 - Refactor SO to enhance the usability

Stories

The full list of implemented tasks is available on JIRA Istanbul STORY

Tasks

The full list of implemented tasks is available on JIRA Istanbul TASKS

Bug Fixes

The full list of fixed bugs is available on JIRA Istanbul BUGS

Security Notes

Fixed Security Issues

Quick Links:

Known Issues

Upgrade Notes

N/A

Deprecation Notes

SO modules Ve-Vnfm-adapter and appc-orchestrator are deprectaed for the Istanbul release.

Other

N/A


Version: 1.8.3

Release Date:

2021-09-15

SO Release Image Versions

  • so-bpmn-infra 1.8.3

  • so-catalog-db-adapter 1.8.3

  • so-nssmf-adapter 1.8.3

  • so-openstack-adapter 1.8.3

  • so-request-db-adapter 1.8.3

  • so-sdc-controller 1.8.3

  • so-sdnc-adapter 1.8.3

  • so-api-handler-infra 1.8.3

Release Purpose

SO Honolulu Maintence Release. The key delivereable for this release is fixing the known issues of H release of SO and sync up with the latest CDS client version.

Epics

N/A

Stories

N/A

Tasks

N/A

Bug Fixes

  • SO-3626 - SO does not requests CDS for skipPostInstantiation flag set to False.

  • SO-3628 - SO cannot send CDS request due to grpc schema problem.

  • SO-3703 - Changes in Modify and Deallocate Core NSST flows

  • SO-3721 - Fix some attribute issues

  • SO-3260 - Wrong additional parameter for OOF’s terminateNxiRequest

Security Notes

Fixed Security Issues

Known Security Issues

Known Vulnerabilities in Used Modules

Quick Links:

Known Issues

Upgrade Notes

N/A

Deprecation Notes

SO modules Ve-Vnfm-adapter and appc-orchestrator are deprectaed for the Honolulu release.

Other

N/A


Version: 8.0.0

Release Date:

2021-04-19

SO Release Image Versions

  • so-bpmn-infra 1.8.2

  • so-catalog-db-adapter 1.8.2

  • so-admin-cockpit 1.8.2

  • so-nssmf-adapter 1.8.3

  • so-openstack-adapter 1.8.2

  • so-request-db-adapter 1.8.2

  • so-sdc-controller 1.8.2

  • so-sdnc-adapter 1.8.2

  • so-sol003-adapter 1.8.2

  • so-api-handler-infra 1.8.2

  • so-etsi-nfvo-ns-lcm 1.8.2

  • so-oof-adapter 1.8.3

  • so-cnf-adapter 1.9.1

Release Purpose

SO Honolulu Release. The key delivereable for this release is refactoring SO for better internal architecture.

Epics

  • SO-3473 - Refactor SO to enhance the usability

  • SO-3381 - SO Impacts for E2E Network Slicing in Honolulu

  • SO-3206 - Support for NS LCM and Workflows Management

  • SO-3493 - Java 11 and Python 3 upgrades

Stories

The full list of implemented tasks is available on JIRA Honolulu STORY Listed below are key functional jira stories handled in the Honolulu release:

Tasks

The full list of implemented tasks is available on JIRA Honolulu TASKS

Bug Fixes

The full list of fixed bugs is available on JIRA Honolulu BUGS

Security Notes

Fixed Security Issues

Known Security Issues

Known Vulnerabilities in Used Modules

Quick Links:

Known Issues * SO-3628 - SO cannot send CDS request due to grpc schema problem. * SO-3626 - SO does not requests CDS for skipPostInstantiation flag set to False. * SO-3237 - Exposed HTTP port.

Upgrade Notes

N/A

Deprecation Notes

SO modules Ve-Vnfm-adapter and appc-orchestrator are deprectaed for the Honolulu release.

Other

N/A


Version: 1.7.10

Release Date:

2020-11-19

SO Release Image Versions

  • so-bpmn-infra 1.7.10

  • so-catalog-db-adapter 1.7.10

  • so-monitoring 1.7.10

  • so-nssmf-adapter 1.7.10

  • so-openstack-adapter 1.7.10

  • so-request-db-adapter 1.7.10

  • so-sdc-controller 1.7.10

  • so-sdnc-adapter 1.7.10

  • so-vnfm-adapter 1.7.10

  • so-api-handler-infra 1.7.10

  • so-api-handler-infra 1.7.10

  • so-so-etsi-nfvo-ns-lcm 1.7.7

  • so-so-oof-adapter 1.7.6

  • so-cnf-adapter 1.7.10

Release Purpose

SO Guilin Release

Epics

  • SO-3167 - Design ETSI SOL007 compliant Network Service Descriptor packages

  • SO-3208 - SOL003 Adapter maintenance Enhancements

  • SO-3036 - SO impacts for E2E Network Slicing use case in Guilin

  • SO-2936 - PNF PnP: SO macro flow - use existing PNF instance in a Service Instance

  • SO-2843 - Support NS LCM and Workflows Management

  • SO-2842 - Support for SOL005 NBI API Handler

  • SO-2841 - Support SO NFVO Microservice Plugin Capabilities

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

  • SO-2681 - SO direct Catalog Management Support - Guilin

  • SO-2046 - support Java 11 upgrade

Stories

The full list of implemented tasks is available on JIRA GUILIN STORY Listed below are key functional jira stories handled in the Guilin release:

  • SO-2950 - Asynchronous service activation response handling support in MDONS

  • SO-3028 - SO supports the OVP 2.0 test platform

  • SO-2930 - Service level workflow execution API

  • SO-2929 - Service level workflow retrieving API

  • SO-2928 - Service model retrieving API

  • SO-2927 - Generic service level upgrade workflow

  • SO-2926 - New Service Level postCheck building block

  • SO-2925 - New Service Level Upgrade building block

  • SO-2924 - New Service Level Preparation building block

  • SO-2981 - PNF Plug & Play in R7 - SO Building Block Work

  • SO-3026 - Adapter for the SO to interact with the K8S plugin

  • SO-3025 - SO should support CNFO

  • SO-3039 - Containers must crash properly when a failure occurs

  • SO-3040 - ONAP container repository (nexus) must not contain upstream docker images

  • SO-3029 - SO support Multi Tenancy

  • SO-3077 - ONAP shall use STDOUT for logs collection - REQ-374

Tasks

The full list of implemented tasks is available on JIRA GUILIN TASKS Listed below are highest and high piority jira tasks handled in the Guilin release:

  • SO-3205 - E2E Network Slicing: Improvements for NST/NSI Selection callback

  • SO-3120 - Create swagger api for software upgrade in SO

  • SO-2915 - Upgrade Vulnerable Direct Dependencies

Bug Fixes

The full list of fixed bugs is available on JIRA GUILIN BUGS Listed below are highest and high piority jira tasks handled in the Guilin release:

  • SO-3375 - FlowManipulatorListenerRunner does not invoke for controller execution config-deploy

  • SO-3369 - Fix basic vm test case in onap

  • SO-3364 - SO sends rest request to cds twice per one operation

  • SO-3360 - SO-OpenStack-Adapter attempts to create wrong vserver-to-vnfc relation in AAI

  • SO-3357 - ControllerExecutionBB is triggered, when running a`la carte DeleteVFModule

  • SO-3352 - Exception in org.onap.so.bpmn.infrastructure.workflow.tasks.OrchestrationStatusValidator.validateOrchestrationStatus Orchestration Status Validation failed

  • SO-3351 - Staging image is present in OOM master branch

  • SO-3346 - vFW CNF AssignVfModuleBB has failed

  • SO-3342 - VnfAdapter is configured by default to v1 version whereas v2 version is more complete

  • SO-3341 - Exception of Writing NSSI to AAI for ExternalNssmfManager

  • SO-3339 - Transport Slicing integration: network-policy is missing under allotted-resource

  • SO-3326 - Transport Slicing integration: AAI Exception in DeAllocate TN NSSI WF

  • SO-3322 - PNF service instantiation using building blocks fails during ActivateServiceInstanceBB building block execution

  • SO-3321 - Transport Slicing integration: SO sets wrong subscription-service-type in SDNC payload

  • SO-3313 - SO getting disto error while SDC distribution

  • SO-3310 - Transport Slicing Integration: null pointer exception in saving SDNC rollback data

  • SO-3309 - Transport Slicing integration: unable to get prefix environment variable from execution in TnNssmfUntils

  • SO-3308 - Transport Slicing integration: MSOWorkflowException: mso-request-id not provided

  • SO-3304 - Exception in org.onap.so.bpmn.infrastructure.aai.tasks.AAICreateTasks.createServiceInstance ModelMapper configuration errors

  • SO-3296 - SO has python 2.7 pods

  • SO-3294 - Parameters exception of Deallocating NSSI

  • SO-3293 - Allocate TN NSSI fails to create relationship between allotted-resource and logical-links

  • SO-3290 - SO-VNFM certificates expired

  • SO-3284 - Exceptions in Allocate TN NSSI work flow

  • SO-3275 - Fix 3gppservices URI path in API-Handler

  • SO-3274 - Parameters exception of Allocating NSSI

  • SO-3271 - SO/BB PNF - skip_post_instantiation_configuration is not processed properly.

  • SO-3270 - BB workflow failing sporadically during post instantiation

  • SO-3266 - BPMN config assign bb - NullPointerException in ControllerExecution

  • SO-3261 - Encountering NullPointerException, WorkFlow failure after Java 11 upgrade Code refactorig on SO-bpmn-infra code base.

  • SO-3243 - SO-bpmn-infra Container after Java 11 upgrade encountering SunCertPathBuilder Exception: unable to find valid certification path to requested target in CSIT

  • SO-3236 - SO has java 8 pods

  • SO-3216 - Integration E2E VNF test fails due to missing EdgeRule in AAI call

  • SO-3196 - [SO] so-sdc-controller fails to connect to aai due to cert issue

  • SO-3193 - Macro Workflow fails in AssignVnfBB in step HomingBB

  • SO-2941 - Docker are not built anymore

  • SO-2939 - Master branch uses SNAPSHOT version that are not available anymore

  • SO-2809 - SO build is failing due to unable to download org.onap.appc.client:client-lib:jar:1.7.1-SNAPSHOT

  • SO-2797 - BB workflow with post instantiation is not working

Security Notes

Fixed Security Issues

Known Security Issues

Known Vulnerabilities in Used Modules

Quick Links:

Known Issues * SO-3403 - The functionality of the SO cnf-adapter will be tested further and will be delivered by the Guilin Maintenance Release as a 1.7.11 patch. * SO-3237 - Exposed HTTP port. * SO-3414 - Search Query does not contain get model data for vFW closed loop.

Upgrade Notes

N/A

Deprecation Notes

SO modules Ve-Vnfm-adapter and appc-orchestrator are deprectaed for the Guilin release.

Other

N/A


Version: 1.6.4

Release Date:

13th July 2020

SO Release Image Versions

  • onap-so-api-handler-infra

  • onap-so-bpmn-infra

  • onap-so-catalog-db-adapter

  • onap-so-openstack-adapter

  • onap-so-request-db-adapter

  • onap-so-sdc-controller

  • onap-so-sdnc-adapter

  • onap-so-so-monitoring

  • onap-so-vfc-adapter

  • onap-so-vnfm-adapter

  • onap-so-ve-vnfm-adapter

  • onap-so-nssmf-adapter

  • onap-so-appc-orchestrator

Release Purpose

The main goal of the Frankfurt maintenance release was to:

  • Appc Orchestraor changes were merged in SO and OOM as part of the release. This also used for the inplace software update flows.

  • MDONS had an issue in its delete flow that was addressed.

  • Vnfm-Adapter was unable to communicate with ETSI-Catalog through MSB, as the MSB cert is changed during the RC2 and this impacted the SO and ETSI Catalog DB connectivity.

New Features –N/A– Epics –N/A– Stories –N/A– Key Issues Addressed

  • [SO-2903] - Include so-appc-orchestrator with SO OOM.

  • [SO-2967] - Error in Delete MDONS service flow which causes No such property error.

  • [SO-2982] - Vnfm-Adapter unable to communicate with ETSI-Catalog through MSB.

  • [SO-3022] - Use BB-based VNF-InPlaceUpdate flow for inPlaceSoftwareUpdate requests.

Security Notes

Quick Links:

Known Issues

OJSI Issues

N/A

Upgrade Notes

N/A

Deprecation Notes

N/A

Other

N/A


Version: 1.6.3

Release Date:

SO Release Image Versions

  • onap-so-api-handler-infra

  • onap-so-bpmn-infra

  • onap-so-catalog-db-adapter

  • onap-so-openstack-adapter

  • onap-so-request-db-adapter

  • onap-so-sdc-controller

  • onap-so-sdnc-adapter

  • onap-so-so-monitoring

  • onap-so-vfc-adapter

  • onap-so-vnfm-adapter

  • onap-so-ve-vnfm-adapter

  • onap-so-nssmf-adapter

Release Purpose

The main goal of the Frankfurt release was to:
  • ETSI alignment improvements - CMCC, Ericcson, Huawei, Samsung, Verizon, ZTE.
    • SOL005 adaptation

    • SOL003 adaptation

    • SOL002 adaptation

    • SOL004 Package support by ETSI Catalog Manager and SOL003 Adapter

  • PNF orchestration Enhancements - Ericcson, Huawei, Nokia
    • PNF software upgrade

    • PNF PNP enhancement

  • CCVPN Enhancement
    • MDONS support - Fujitsu

    • Eline support - Bell, Huawei, CMCC

  • 5G Slicing - ATT, Amdocs, CMCC, Huawei, Wipro

  • CDS integration enhancement - ATT, Bell, Tech Mahindra

  • (SO Multi Cloud plugin improvements - Intel)

  • HPA - Intel (Testing effort)

New Features

Features Being considered for F release (As per the resource availability):

SOL005 Adapter supports communication security

SOL005 Adapter supports NS LCM

Multi-domain Optical Network Service Orchestration Support in SO

SOL002 Adapter - supports EM-triggered VNF/VNFC Management

SO Catalog Management Support

Frankfurt release planning milestone

Initiate/ Terminate slice service; Activate/deactivate Slice service

SO support of Network Slicing Demo in Frankfurt

ETSI Alignment Support - SOL003 Adapter Enhancement for Frankfurt

AAI update for VNF improvements

SO Multicloud plugin to Multicloud improvements

SO to CDS Enhancement for Generic Implementation

S3P improvement Requirements

Upgrade the APIs to Policy

Epics - [SO-2524] - Functionality and API Freeze - [SO-2519] - TSC must have for Frankfurt - [SO-2432] - Multi-domain Optical Network Service Orchestration Support in SO - [SO-2427] - SOL002 Adapter - supports EM-triggered VNF/VNFC Management - [SO-2404] - SO Catalog Management Support - [SO-2383] - Frankfurt release planning milestone - [SO-2368] - Support 5G slice orchestration - [SO-2281] - SO support of Network Slicing Demo in Frankfurt - [SO-2156] - ETSI Alignment Support - SOL003 Adapter Enhancement for Frankfurt - [SO-2087] - AAI update for VNF improvements - [SO-2086] - SO Multicloud plugin to Multicloud improvements - [SO-2046] - support Java 11 upgrade - [SO-1579] - SO supports ETSI SOL005 Alignment of its interfaces with NFVO

Stories - [SO-2774] - simplify fabric into add/delete steps - [SO-2772] - Add validations to prevent out of order deletes - [SO-2770] - Added support for volume group request to - [SO-2768] - mso vnf configuration update composite flow - [SO-2767] - convert openstack to external tasks - [SO-2763] - Ingest and Process Service Function - [SO-2762] - Update Subprocess to use COMPLETE status - [SO-2761] - Use setVariablesLocal for setting task variables - [SO-2753] - mso to add support for creating the cloud region - [SO-2744] - reworked dsl client code to check for outputs - [SO-2743] - split single and plural graph inventory uris - [SO-2735] - update poms to be compatible with eclipse IDE - [SO-2726] - Added check to prevent camunda history lookup on - [SO-2717] - Added git attributes to convert line endings to - [SO-2715] - Enhance startTime filtering for OrchestrationRequests - [SO-2713] - create custom spring aop annotation for logging - [SO-2700] - mso to store the heat template timeout minutes and - [SO-2697] - Added simpleNotTaskInfo format modifier - [SO-2683] - Enhance CSIT for ETSI package management - [SO-2680] - enhance openstack library - [SO-2675] - Rename migration script - [SO-2674] - mso to add tenant name and product family name to - [SO-2662] - Updated pom to release version of logging library - [SO-2660] - SO API extension to retrieve all PNF workflow - [SO-2657] - mso to add support for creating the cloud region - [SO-2655] - added in graceful shutdown to spring boot - [SO-2653] - Initial commit to check client alive - [SO-2651] - Remove unused param - [SO-2647] - Create ConfigDeployPnfBB - [SO-2646] - Create ConfigAssignPnfBB - [SO-2644] - WaitForPnfReadyBB - set orchestration status to Register and then Registered - [SO-2642] - AssignPnfBB - set orchestration status to Assigned after successful assignment - [SO-2641] - Include AssignPnfBB, WaitForPnfReadyBB, ActivatePnfBB in Service-Macro-Create flow - [SO-2640] - AssignPnfBB - store model related PNF parameters in AAI - [SO-2637] - modifications to create network to add lob - [SO-2623] - Remove Valet from openstack adapter - [SO-2620] - Include stack Status Reason when rollback is - [SO-2616] - add manual handling to rainy day handling for bbs - [SO-2615] - convert bbinputsetup populate methods to use - [SO-2614] - Add Neutron Port and Nova Server to Proxy - [SO-2607] - Create ActivatePnfBB - [SO-2606] - Create WaitForPnfReadyBB - [SO-2605] - AssignPnfBB should make a link in AAI between PNF and service instance - [SO-2603] - Replaced annotation with RepositoryRestResource - [SO-2601] - Use the timeout from the heat template instead of - [SO-2597] - removed powermock dependecy and added it to - [SO-2596] - 1911 create appc adapter micro service - [SO-2591] - mso stores vnf application id from macro create - [SO-2590] - configurable aaf user expires - [SO-2584] - consolidated security configuration - [SO-2577] - Support for volume groups on replace VF Module. - [SO-2572] - Remove references to AIC - [SO-2571] - update so to use 1.6.3 snapshot from the logging - [SO-2570] - Add simple query format, to limit response content - [SO-2568] - Create AssignPnfBB - [SO-2566] - Updated simulator test files - [SO-2565] - Include service-instance-id and - [SO-2564] - Refactor WorkflowAction.valiadteResourceIdInAAI - - [SO-2561] - add application id support to so - [SO-2555] - refactor fallouthandler - [SO-2548] - Terminate Slice Instance - [SO-2547] - Deactivate Slice Instance - [SO-2546] - Activate Slice Instance - [SO-2545] - Instantiate Slice Service - [SO-2540] - SO API extension to retrieve PNF workflow - [SO-2523] - vnf and vf module replace requests to make - [SO-2516] - remove unused columns infra active requests - [SO-2515] - Create E2E workflow for software upgrade (PNF) - [SO-2514] - Create dispatcher class for PNF Software upgrade. - [SO-2511] - Updated to include getEntity extract - [SO-2510] - Updated to use getEntity API for ServiceProxy - [SO-2509] - Updated logging library version to 1.6.2-SNAPSHOT - [SO-2499] - Skip requestId lookup when uri is - [SO-2493] - update so to use most recent update of logging - [SO-2490] - add new query for requestdb - [SO-2488] - refactor repeated duplicate check code to RequestHandlerUtils - [SO-2463] - Add so-simulator project - [SO-2460] - MDONS: L1 Service Termination - [SO-2459] - MDONS: L1 Service Creation - [SO-2444] - update scheduled tasks to have mdc setup - [SO-2442] - Add column to catalog db - [SO-2439] - Authentication and Authorization support between SOL005 Adapter and NFVO - [SO-2438] - Secured communication support between SOL005 Adapter and NFVO - [SO-2428] - SOL002 Adapter subscribes and consumes VNF LCM notifications from VNFM (Frankfurt) - [SO-2426] - feature request to so to save name on deletes - [SO-2412] - SOL003 Adapter Package Management by leveraging ONAP-ETSI Catalog Manager - [SO-2406] - Enhance SO SDC Controller to invoke ONAP-ETSI Catalog APIs - [SO-2399] - Update PNF instance attributes in AAI during instantiation (PnP) workflow - [SO-2398] - Converted tests to use LATEST - [SO-2372] - Validate SO Multicloud plugin adapter with Macro call / gr-api - [SO-2339] - Refactor SO/DMaaP client - move BBS functionality to a workflow Task - [SO-2316] - SO to support CDS Actor for ScaleoutBB - [SO-2312] - SO to CDS Enhancement for Generic Implementation - [SO-2293] - vf-module details in SDNC-Directives to pass through GR-API with v2 - [SO-2208] - Load proper instanceParams of the object being processed to CDS properties - [SO-2165] - Add Config deploy to service-macro-delete and CDS transition directives for vnf - [SO-2091] - Create new SO building blocks - activateNESw - [SO-2090] - SO-CDS PNF Building Blocks back-end impl - [SO-2089] - Create a new SO building block - preCheck - [SO-2073] - Create a new SO building blocks - postCheck - [SO-2072] - Support PNF CM workflow execution - [SO-2071] - SO API extension to support PNF Upgrade - [SO-2070] - a generic decision points for API - [SO-2063] - AAF integration - [SO-1657] - Automated testing for the SO Monitoring component - [SO-1635] - Preload using user_param (without UI changes) - [SO-1420] - SO should be able to decompose a composite service - [SO-1277] - Adapt PNF PnP flow to support updated AAI PNF model - [SO-994] - Sonar Issue: Replace duplicate strings with Constants in ServiceInstances - [SO-929] - Removing Sonar reported Vulnerability in AAIObjectMapper file - [SO-2] - MSO should mount vnfs in appc that appc has to manage

Key Issues Addressed

Security Notes

Quick Links:

Known Issues

  • [SO-2903] - Include so-appc-orchestrator with SO OOM

OJSI Issues

N/A

Upgrade Notes

N/A

Deprecation Notes

N/A

Other

N/A

Version: 5.0.1

Release Date:

2019-10-11

SO Release Image Versions

  • onap-so-api-handler-infra,1.5.3

  • onap-so-bpmn-infra,1.5.3

  • onap-so-catalog-db-adapter,1.5.3

  • onap-so-openstack-adapter,1.5.3

  • onap-so-request-db-adapter,1.5.3

  • onap-so-sdc-controller,1.5.3

  • onap-so-sdnc-adapter,1.5.3

  • onap-so-so-monitoring,1.5.3

  • onap-so-vfc-adapter,1.5.3

  • onap-so-vnfm-adapter,1.5.3

  • onap-so-vnfm-simulator,1.5.3

Release Purpose

The R5 El Alto release of ONAP is a maintenance release, focusing on deployability, technical debt, and auto test case improvements.

New Features

The main goal of the El-Alto release was to improve documentation, UT improvement for various kinds of resources.

Epics - [SO-1756] - Enhance SO VNFM Adapter

Stories - [SO-2376] - Improve fall out case handling - [SO-2363] - Update Resume Logic and Add Workflow Listeners - [SO-2353] - update logging to match onap logging library - [SO-2352] - Improvements to relationship handling in VNFM adapter - [SO-2332] - Remove unused table requestdb.active_requests. - [SO-2306] - getentity csar logging - [SO-2301] - Integrate Logging Library - [SO-2297] - updated all sql files including in tests to use - [SO-2291] - Created external task utils in a common location - [SO-2283] - Convert NetworkCollection to use GetEntity API. - [SO-2282] - Convert to use the GetEntity API - [SO-2259] - Added default value for when ErrorCode is null in mdc - [SO-2244] - Updated VNF and VfModules to use the getEntity API. - [SO-2233] - fixed dsl builder to correctly add output - [SO-2232] - Initial commit of validation framework to APIH - [SO-2231] - asdc controller treat distributionid as requestid in mdc - [SO-2224] - Updated vnfc instance groups to use the getEntity API. - [SO-2216] - health check now entirely config based - [SO-2205] - add rainy day handling with SERVICE_ROLE and type - [SO-2202] - Updated cvnfc’s to use the getEntity API - [SO-2190] - VNFM adapter support two way TLS - [SO-2180] - Support oauth for calls from VNFM to VNFM adapter - [SO-2169] - Add oauth for calls from VNFM adapter to VNFM - [SO-2157] - Upgrade springboot.version from 2.0.5 to 2.1.5 - [SO-2147] - Converted NetworkResource to use the parser getEntity method - [SO-2143] - Implement TLS for calls into VNFM adapter - [SO-2142] - mso to enhance get orchestration request to include workflow step - [SO-2122] - Added servicename to MDC so that it gets logged and added enter and exit markers - [SO-2121] - Removing the application-local.yaml files from the projects to fix CSO pen test issues - [SO-2116] - Implement TLS for calls from VNFM adapter to VNFM - [SO-2114] - We need to expand column request_status on table archived_infra_requests as well - [SO-2111] - add query stack data and populate table step - [SO-2097] - Global JJB Migration of SO - [SO-2093] - mso will support new requeststate values - [SO-2092] - update bpmn to save extsystemerrorsource - [SO-2080] - support new query param format - [SO-2068] - improved logging when no exception data is found - [SO-2066] - SO API Security Matrix - [SO-2064] - Alpine porting check - [SO-2057] - Update failsafe dependency to 2.0.1 - [SO-2055] - enhance workflowaction to handle resume func - [SO-2054] - add rollback ext system error source - [SO-2052] - Javadoc and logging improvement - [SO-2048] - Building individual repos for reducing compilation time - [SO-2043] - Security updates for maven dependencies - [SO-2035] - update apih to accept new uri parameter - [SO-2032] - support no payload for alacarte deletes - [SO-2024] - Validate ServiceInstance name using createNodesUri. - [SO-2023] - add is_data_internal column to request processing data - [SO-2022] - Validate name for InstanceGroup, Configuration and Network. - [SO-2021] - update multi stage code to accurately skip bbs if true - [SO-2020] - mso to validate the name uniqueness during object creation in a ai - [SO-2018] - Changes related to eviction of connections from connection pool - [SO-2017] - use count format and limit one for exists - [SO-2015] - support async operation for vf module operations with sdnc - [SO-2001] - Added ext_system_error_source column to requestdb - [SO-1999] - replaced String.repeat with static final strings - [SO-1990] - resume request copying request body rewrite requestorid - [SO-1976] - Enhance naming service support - [SO-1975] - Accommodate WAN Networking - [SO-1963] - apih resume request handling more generic - [SO-1960] - apih to populate original request id - [SO-1914] - Renamed NF fields in catalog db pojo - [SO-1902] - Added script for adding original_request_id column - [SO-1898] - Audit service enhancements - [SO-1897] - fix keypair conflict issue in openstack adapter - [SO-1893] - Initial checkin of updates for vf module replace - [SO-1867] - store openstack request status in requestdb - [SO-1866] - Update Rainy day handling to be more robust - [SO-1847] - Added inProgress request check to resume - [SO-1831] - Resume APIH Functionality - [SO-1807] - Store Cloud Request in Database, add to request service - [SO-1697] - Support State transition for configuration building blocks - [SO-1538] - Integration Test for SO VNFM Adapter - Perform the functional test to validate VNFM Adapter NBI and SOL003-based SBI - [SO-1447] - Refine multicloud use of SO cloudsites and identify DB - [SO-1446] - Multicloud API updates for generic clouds

Key Issues Addressed - [SO-2400] - vCPE Create Res Cust Service Error : Execption in create execution list - [SO-2382] - SO ConfigAssign Java Exception - [SO-2378] - Java lang exception in Homing - [SO-2375] - vCPE instantiate gmux fails due to API Handler error - [SO-2357] - Distribution of K8S service fails - [SO-2354] - vCPE model_customization_id not found on create vfmodule - [SO-2351] - SO Distribution Error on Allotted Resource - duplicate primary - [SO-2349] - Exception in DMAAP Client when PNF_READY event arrives from PRH - [SO-2337] - git clone –depth 1 not working for CSIT filename too long - [SO-2289] - CreateVcpeResCustService_simplified workflow used in PnP PNF registration workflow returns an exception in Dmaap listener - [SO-2229] - sdc adapter and openstack container in crash loopback - [SO-2228] - SDC Handler crash loopback - [SO-2222] - SO 1.5.0-STAGING-latest containers fail liveness probe - [SO-2221] - SO 1.5.0-STAGING-latest container fails to start - [SO-2082] - Delete Network does not work correctly - [SO-2038] - Fix build and harkari-cp version, Get LF to add dependency - [SO-2003] - No workflow assigned to ‘Dissociate’ button in VID - [SO-1934] - ETSI Building Block Fails to Execute - Due to variables not being mapped correctly in the workflow - [SO-1892] - CatalogDbClent - sql query error - [SO-1809] - ‘DoDeleteE2EServiceInstance’ calls ‘AAI GenericGetService’ sub-process which is deleted from SO common-bpmn - [SO-1644] - SO doesn’t keep the proxy settings within the containers - [SO-1605] - SO fails on updating Camunda table when DoCreateVfModule for vCPE infra service

Security Notes

Quick Links:

Known Issues

  • [SO-2063] - AAF integration

  • [SO-2403] - Not Displaying correct Workflow Name

  • [SO-2430] - vCPE Create VFmodule Fails on Query to SDNC

  • [SO-2433] - Not providing user options during Pause For Manual Task

  • [SO-2434] - Displaying Un-needed Mandatory User Inputs for Workflow with Pause

  • [SO-1754] - SO-Mariadb: ‘VNF_RESOURCE_CUSTOMIZATION’ DB update bug when service is distributed.

  • [SO-2447] - Openstack Adatper fails to find Stack Name and creates duplicate stack with address conflict

OJSI Issues

  • [OJSI-110] - so-monitor exposes plain text HTTP endpoint using port 30224

  • [OJSI-138] - so exposes plain text HTTP endpoint using port 30277

  • [OJSI-169] - Port 30224 exposes unprotected service outside of cluster

  • [OJSI-203] - SO exposes unprotected APIs/UIs (CVE-2019-12128

Upgrade Notes

N/A

Deprecation Notes

N/A

Other

N/A

Version: 1.4.4

Release Date:

2019-06-13

SO Release Image Versions

  • onap-so-api-handler-infra,1.4.4

  • onap-so-bpmn-infra,1.4.4

  • onap-so-catalog-db-adapter,1.4.4

  • onap-so-openstack-adapter,1.4.4

  • onap-so-request-db-adapter,1.4.4

  • onap-so-sdc-controller,1.4.4

  • onap-so-sdnc-adapter,1.4.4

  • onap-so-so-monitoring,1.4.4

  • onap-so-vfc-adapter,1.4.4

  • onap-so-vnfm-adapter,1.4.4

Release Purpose

New Features

The main goal of the Dublin release was to:
  • Support CCVPN extension

  • Support BroadBand Service Usecase

  • SO SOL003 plugin support

  • Improve PNF PnP

  • Improve SO internal modularity

Epics

  • [SO-1508] - ETSI Alignment - SO SOL003 plugin support to connect to external VNFMs

  • [SO-1468] - Hardening of HPA in SO and extension of HPA capabilities to existing use-cases

  • [SO-1394] - Extended and enhance the SO generic building block to support pre and post instantiation.

  • [SO-1393] - Support the CCVPN Extension

  • [SO-1392] - Support the BroadBand Service Usecase

  • [SO-1353] - SO to be made independent of Cloud technologies

  • [SO-1273] - PNF PnP Dublin updates & improvements

  • [SO-1271] - PNF PnP Casablanca MR updates

  • [SO-677] - Improve the issues and findings of the SO Casablanca Release

Stories

  • [SO-1974] - Turn off OpenStack heat stack audit

  • [SO-1924] - Add VnfConfigUpdate to the list of native CM workflows returned to VID

  • [SO-1820] - Add Model Version Query

  • [SO-1806] - Fix issue where null variable causes task to not

  • [SO-1793] - add status for delete

  • [SO-1792] - add status message requirement for create vf module event audit

  • [SO-1791] - Moved base client to new location

  • [SO-1790] - Enhanced sniro BB to account for sole service proxies to support 1908.

  • [SO-1765] - Convert Tabs to Spaces

  • [SO-1760] - Add Query param to pull back nested stack information

  • [SO-1758] - Fix POM to allow HTTP long polling to work on camunda

  • [SO-1749] - re add openstack audit of delete functions after refactor

  • [SO-1748] - Add support to parse cdl inside LOB and platform

  • [SO-1737] - if audit fails write sub interface data to a ai

  • [SO-1729] - Monitor Job Status-Delete

  • [SO-1687] - removed unused test classes and methods

  • [SO-1678] - removed extra argument from extractByKey method

  • [SO-1676] - replace all fixed wiremock ports

  • [SO-1671] - skip_post_instantiation_configuration schema and tosca ingestion

  • [SO-1657] - Automated testing for the SO Monitoring component

  • [SO-1648] - Increasing the test coverage of SO-Monitoring UI

  • [SO-1634] - Notification Handling - Terminate

  • [SO-1633] - Terminate VNF (with SVNFM interaction)

  • [SO-1632] - Handle VNF delete and termination (without SVNFM integration)

  • [SO-1630] - Monitor Job Status-Create

  • [SO-1629] - Notification Handling - Instantiate

  • [SO-1628] - Handle Notification Subscription

  • [SO-1627] - Create relationship between esr-vnfm and generic-vnf in AAI

  • [SO-1626] - Monitor Node Status

  • [SO-1625] - Handle Grant Request (Without Homing/OOF)

  • [SO-1624] - Instantiate VNF (with SVNFM Interaction)

  • [SO-1623] - Handle Create VNF request in VNFM adapter

  • [SO-1622] - Check for existing VNF (with SVNFM Interaction)

  • [SO-1621] - Create placeholder implementation for create VNF (without SVNFM interaction)

  • [SO-1620] - Create Shell Adapter

  • [SO-1619] - Create SO VNFM Adapter Northbound Interface using Swagger

  • [SO-1618] - SVNFM Simulator

  • [SO-1616] - Add instance group support to SO

  • [SO-1604] - SO Catalog Enhancement to support CDS Meta Data for VNF/PNF and PNF Tosca Ingestion

  • [SO-1598] - add equals and hashcode support to dslquerybuilder

  • [SO-1597] - improvements to audit inventory feature

  • [SO-1596] - query clients now have more useable result methods

  • [SO-1590] - skip cloud region validation for 1906

  • [SO-1589] - flow validators can now be skipped via an annotation

  • [SO-1582] - vnf spin up gr api vnf s base module fails

  • [SO-1573] - Abstract for CDS Implementation

  • [SO-1569] - do not attempt to commit empty transactions

  • [SO-1538] - Integration Test for SO VNFM Adapter - Perform the functional test to validate VNFM Adapter NBI and SOL003-based SBI

  • [SO-1534] - Create Pre Building Block validator to check if cloud-region orchestration-disabled is true

  • [SO-1533] - flowvaldiator will allow more flexible filtering

  • [SO-1512] - Added Camunda migration scripts and updated camunda springboot version

  • [SO-1506] - E2E Automation - Extend PNF workflow with post-instantiation configuration

  • [SO-1501] - add new functionality to aai client

  • [SO-1495] - made max retries configurable via mso config repo

  • [SO-1493] - restructure a&ai client

  • [SO-1487] - added license headers to various java files

  • [SO-1485] - add DSL endpoint support to A&AI Client

  • [SO-1483] - SO to support a new GRPC client for container to container communication

  • [SO-1482] - SO Generic Building Block to support config deploy action for CONFIGURE Step

  • [SO-1481] - Generic Bulding block for assign shall trigger controller for config assign action

  • [SO-1477] - AAF support for SO

  • [SO-1476] - Do not process vf module being created when building an index

  • [SO-1475] - store raw distribution notification in db

  • [SO-1474] - Test Issue

  • [SO-1469] - Refactor OOF Homing to Java

  • [SO-1462] - Clean up AT&T Acronyms from Unit tests for audit

  • [SO-1459] - add maven build properties to spring actuator

  • [SO-1456] - prototype fetching resources from openstack and compare to a ai

  • [SO-1452] - added list of flows to execution for cockpit

  • [SO-1451] - Updated the SDC API call with the ECOMP OE from AAI

  • [SO-1450] - support for secure communications between SO and Multicloud

  • [SO-1447] - Refine multicloud use of SO cloudsites and identify DB

  • [SO-1446] - Multicloud API updates for generic clouds

  • [SO-1445] - Multicloud support for volume groups and networks

  • [SO-1444] - AAI update after vfmodule creation

  • [SO-1443] - Prepare user_directives for multicloud API

  • [SO-1442] - Prepare sdnc_directives for multicloud API

  • [SO-1441] - Handle distribution of service with generic cloud artifacts

  • [SO-1436] - removed unnecessary repository from pom.xml

  • [SO-1432] - duplicate add custom object support to a ai client

  • [SO-1431] - Test issue 1

  • [SO-1429] - add custom object support to a ai client

  • [SO-1427] - Fix to include alloc pool from dhcpStart/end on reqs

  • [SO-1426] - Upgraded tosca parser to version 1.4.8 and updated imports

  • [SO-1425] - Re-Factor DMAAP Credentials to use encrypted auth

  • [SO-1421] - Support for SO->ExtAPI interface/API

  • [SO-1414] - update all inprogress checks in apih handler

  • [SO-1413] - replaced org.mockito.Matchers with ArgumentMatchers

  • [SO-1411] - Test Issue

  • [SO-1409] - added in validation for number of keys provided

  • [SO-1405] - apih infra shall ensure data for si matches on macro requests

  • [SO-1404] - covert sync calls for create and delete network to async

  • [SO-1395] - E2E Automation - PreInstatition and PostInstatition use cases

  • [SO-1389] - added mso-request-id when calling SDNCHandler subflow

  • [SO-1388] - descriptive messages now returned by validator

  • [SO-1387] - naming ms client fixes

  • [SO-1385] - removed retired A&AI versions from codebase

  • [SO-1384] - sdnc handler was not sending workflow exception upwards

  • [SO-1383] - refactored validator to be more generic

  • [SO-1381] - Quality of Life logging improvements

  • [SO-1380] - Service Proxy Consolidation

  • [SO-1379] - Add validation for vnfs before WorkflowAction starts

  • [SO-1378] - get subnet sequence number from A&AI

  • [SO-1377] - Re-enable Actuator for Springboot 2.0

  • [SO-1376] - Created sniro request pojos for homingV2 flow

  • [SO-1370] - Preparation for next scale-out after successful instantiation of the current scale-out operation

  • [SO-1369] - Processing of configuration parameters during instantiation and scale-out

  • [SO-1368] - VNF Health check during scale-out to be made as a separate workflow

  • [SO-1367] - Invoke the APP-C service configuration API after E2E Service instantiation

  • [SO-1366] - SO Workflow need to call configure API during instantiation

  • [SO-1362] - Changed the MDC sourcing from LoggingInterceptor to JaxRsFilterLogging.

  • [SO-1346] - Use SLF4J/Logback, instead of Log4J

  • [SO-1307] - Add Headers

  • [SO-1295] - Update SDNC client Version in POM

  • [SO-1293] - Vnf Recreate

  • [SO-1290] - Update orchestrationrequest response

  • [SO-1288] - Enhance GRM Clients to use encrypted auth loading

  • [SO-1287] - Change all SDNC Calls in GR_API

  • [SO-1284] - Create Relationship between Vnf and Tenant

  • [SO-1283] - Fix GR_API cloud info retrieval

  • [SO-1282] - Update Alacarte Logic for Recreate Flow

  • [SO-1279] - Replaced the VNFC hardcoded Function

  • [SO-1278] - Move all ecomp.mso properties to org.onap.so

  • [SO-1276] - Add Cloud_Owner to northbound request table

  • [SO-1275] - Resolve path issues

  • [SO-1274] - CreateAndUpdatePNFResource workflow:: Associate PNF instance

  • [SO-1272] - Use UUID to fill pnf-id in PNF PnP sub-flow

  • [SO-1270] - Add New A&AI objects

  • [SO-1269] - Add serviceRole to MSO SNIRO Interface

  • [SO-1260] - Add support for naming service

  • [SO-1233] - Added service role to sniro request when not null

  • [SO-1232] - Switch to SpringAutoDeployment rather than processes.xml

  • [SO-1229] - Remove all usage of AlarmLogger

  • [SO-1228] - Limit Number of Occurs for security reasons

  • [SO-1227] - Remove Swagger UI due to security scan concerns

  • [SO-1226] - changed assign vnf sdnc to use the async subflow

  • [SO-1225] - Add Keystone V3 Support

  • [SO-1207] - accept a la carte create instance group request from vid

  • [SO-1206] - Added groupInstanceId and groupInstanceName columns

  • [SO-1205] - separate error status from progression status in req db

  • [SO-806] - SO PNF PnP workflow shall not set “in-maint” AAI flag

  • [SO-798] - Externalize the PNF PnP workflow? as a Service Instance Deployment workflow? adding the Controller

  • [SO-747] - POC - Enable SO use of Multicloud Generic VNF Instantiation API

  • [SO-700] - SO should be able to support CCVPN service assurance

  • [SO-588] - Automate robot heatbridge manual step to add VF Module stack resources in AAI

  • [SO-18] - Keystone v3 Support in MSO

  • [SO-12] - Support Ocata apis

  • [SO-10] - Deploy a MSO high availability environment

  • [SO-7] - Move modified openstack library to common functions repos

  • [SO-6] - Document how to change username/password for UIs

Security Notes

SO code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The SO open Critical security vulnerabilities and their risk assessment have been documented as part of the project.

Quick Links:

Known Issues

Testing Terminate and Delete of ETSI VNFM Adapter is done and has some of the minor issues pending, it will be done in El Alto.

  • [SO-2013] - Test Terminate/Delete VNF with VNFM Adapter

Upgrade Notes

N/A

Deprecation Notes

N/A

Other

N/A

Version: 1.4.1

Release Date:

2019-04-19

This is the dublin release base version separated from master branch.

Version: 1.3.7

Release Date:

2019-01-31

This is the official release package that released for the Casablanca Maintenance.

Casablanca Release branch

New Features

This release is supporting the features of Casablanca and their defect fixes. - SO-1400 - SO-1408 - SO-1416 - SO-1417

SO Release Image Versions

  • onap-so-api-handler-infra,1.3.7

  • onap-so-bpmn-infra,1.3.7

  • onap-so-catalog-db-adapter,1.3.7

  • onap-so-openstack-adapter,1.3.7

  • onap-so-request-db-adapter,1.3.7

  • onap-so-sdc-controller,1.3.7

  • onap-so-sdnc-adapter,1.3.7

  • onap-so-so-monitoring,1.3.7

  • onap-so-vfc-adapter,1.3.7

Known Issues

  • SO-1419 - is a stretch goal that is under examination.

  • SDC-1955 - tested with a workaround to avoid this scenario. To be tested further with updated dockers of SDC, UUI and SO.

Security Notes

SO code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The SO open Critical security vulnerabilities and their risk assessment have been documented as part of the project.

Quick Links:

Version: 1.3.6

Release Date:

2019-01-10

This is the official release package that released for the Casablanca Maintenance.

Casablanca Release branch

New Features

This release is supporting the features of Casablanca and their defect fixes. - SO-1336 - SO-1249 - SO-1257 - SO-1258 - SO-1256 - SO-1194 - SO-1248 - SO-1184

SO Release Image Versions

  • onap-so-api-handler-infra,1.3.6

  • onap-so-bpmn-infra,1.3.6

  • onap-so-catalog-db-adapter,1.3.6

  • onap-so-openstack-adapter,1.3.6

  • onap-so-request-db-adapter,1.3.6

  • onap-so-sdc-controller,1.3.6

  • onap-so-sdnc-adapter,1.3.6

  • onap-so-so-monitoring,1.3.6

  • onap-so-vfc-adapter,1.3.6

Known Issues

Security Notes

SO code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The SO open Critical security vulnerabilities and their risk assessment have been documented as part of the project.

Quick Links:

New release over master branch for Dublin development

Version: 1.3.3

Release Date:

2018-11-30

This is the official release package that was tested against the 72 hour stability test in integration environment.

Casablanca Release branch

New Features

Features delivered in this release:

  • Automatic scale out of VNFs.

  • Extend the support of homing to vFW, vCPE usecases through HPA.

  • Monitoring BPMN workflow capabilities through UI.

  • SO internal architecture improvements.

  • Support PNF resource type.

  • Support to the CCVPN Usecase.

  • Workflow Designer Integration.

SO Release Image Versions

  • onap-so-api-handler-infra,1.3.3

  • onap-so-bpmn-infra,1.3.3

  • onap-so-catalog-db-adapter,1.3.3

  • onap-so-openstack-adapter,1.3.3

  • onap-so-request-db-adapter,1.3.3

  • onap-so-sdc-controller,1.3.3

  • onap-so-sdnc-adapter,1.3.3

  • onap-so-so-monitoring,1.3.3

  • onap-so-vfc-adapter,1.3.3

Known Issues

There are some issues around the HPA and CCVPN that have been resolved in the patch release of 1.3.5

  • SO-1249 The workflow for resource processing use the wrong default value.

  • SO-1257 Authorization header added to multicloud adapter breaks communication.

  • SO-1258 OOF Directives are not passed through flows to Multicloud Adapter.

  • SO-1256 Permission support for Vfcadapter is missing.

  • SO-1194 Unable to find TOSCA CSAR location using ServiceModelUUID in DoCreateResource BPMN flow.

Below issues will be resolved in the next release:

  • SO-1248 Csar needs to be manually placed into the bpmn corresponding directory.

  • SO-1184 Database table is not populated for Generic NeutronNet resource.

Security Notes

SO code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The SO open Critical security vulnerabilities and their risk assessment have been documented as part of the project.

Quick Links:

Version: 1.3.1

Release Date:

2018-10-24

Branch cut for Casablanca post M4 for integration test. New Features

Below features are under test:
  • Automatic scale out of VNFs.

  • Extend the support of homing to vFW, vCPE usecases through HPA.

  • Monitoring BPMN workflow capabilities through UI.

  • SO internal architecture improvements.

  • Support PNF resource type.

  • Support to the CCVPN Usecase.

  • Workflow Designer Integration.

Version: 1.3.0

Release Date:

2018-08-22

New release over master branch for Casablanca development

Version: 1.2.2

Release Date:

2018-06-07

The Beijing release is the second release of the Service Orchestrator (SO) project.

New Features

  • Enhance Platform maturity by improving SO maturity matrix see Wiki.

  • Manual scaling of network services and VNFs.

  • Homing and placement capabilities through OOF interaction.

  • Ability to perform change management.

  • Integrated to APPC

  • Integrated to OOF

  • Integrated to OOM

Bug Fixes

The defects fixed in this release could be found here.

Known Issues

SO docker image is still on ecmop and not onap in the repository. This will be addressed in the next release.

Security Notes

SO code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The SO open Critical security vulnerabilities and their risk assessment have been documented as part of the project.

Quick Links:

Upgrade Notes

NA

Deprecation Notes

NA

Version: 1.1.2

Release Date:

2018-01-18

Bug Fixes

The key defects fixed in this release :

  • SO-344 Only pass one VNF to DoCreateVnfAndModules.

  • SO-348 Json Analyze Exception in PreProcessRequest.

  • SO-352 SO failed to create VNF - with error message: Internal Error Occurred in CreateVnfInfra QueryCatalogDB Process.

  • SO-354 Change the Service Type And Service Role

Version: 1.1.1

Release Date:

2017-11-16

New Features

The SO provides the highest level of service orchestration in the ONAP architecture. It executes end-to-end service activities by processing workflows and business logic and coordinating other ONAP and external component activities.

The orchestration engine is a reusable service. Any component of the architecture can execute SO orchestration capabilities.

  • Orchestration services will process workflows based on defined models and recipe.

  • The service model maintains consistency and re-usability across all orchestration activities and ensures consistent methods, structure and version of the workflow execution environment.

  • Orchestration processes interact with other platform components or external systems via standard and well-defined APIs.

Deprecation Notes

There is a MSO 1.0.0 SO implementation existing in the pre-R1 ONAP Gerrit system. The MSO1.0.0 is deprecated by the R1 release and the current release is built over this release. The Gerrit repos of mso/* are voided and already locked as read-only. Following are the deprecated SO projects in gerrit repo:

  • mso

  • mso/chef-repo

  • mso/docker-config

  • mso/libs

  • mso/mso-config

Other

NA


End of Release Notes