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

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.

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.

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.

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

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

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.

developer_info/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

developer_info/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-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:

A La Carte mode Service Instantiation via ONAP VID Portal
e2eServiceInstance mode via ONAP UUI Portal
Service Instantiation via ONAP NBI API (TM Forum)

ONAP NBI allow you to use a TM Forum standardized API (serviceOrder API)

Additional info in:

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.

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


Hits AssignServiceInstanceBB.bpmn

_images/AssignServiceInstanceBB.png

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

Release Notes

Version: 1.11.0

Release Date

2022-09-08

  • so-bpmn-infra

    Version

    1.11.0

  • so-catalog-db-adapter

    Version

    1.11.0

  • so-admin-cockpit

    Version

    1.8.3

  • so-nssmf-adapter

    Version

    1.9.1

  • so-openstack-adapter

    Version

    1.11.0

  • so-request-db-adapter

    Version

    1.11.0

  • so-sdc-controller

    Version

    1.11.0

  • so-sdnc-adapter

    Version

    1.11.0

  • so-sol003-adapter

    Version

    1.8.2

  • so-api-handler

    Version

    1.11.0

  • so-etsi-nfvo-ns-lcm

    Version

    1.8.2

  • so-oof-adapter

    Version

    1.8.3

  • so-cnf-adapter

    Version

    1.11.0

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

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-bpmn-infra

    Version

    1.10.0

  • so-catalog-db-adapter

    Version

    1.10.0

  • so-admin-cockpit

    Version

    1.8.3

  • so-nssmf-adapter

    Version

    1.9.1

  • so-openstack-adapter

    Version

    1.10.0

  • so-request-db-adapter

    Version

    1.10.0

  • so-sdc-controller

    Version

    1.10.0

  • so-sdnc-adapter

    Version

    1.10.0

  • so-sol003-adapter

    Version

    1.8.2

  • so-api-handler

    Version

    1.10.0

  • so-etsi-nfvo-ns-lcm

    Version

    1.8.2

  • so-oof-adapter

    Version

    1.8.3

  • so-cnf-adapter

    Version

    1.10.0

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

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-bpmn-infra

    Version

    1.9.2

  • so-catalog-db-adapter

    Version

    1.9.2

  • so-admin-cockpit

    Version

    1.8.3

  • so-nssmf-adapter

    Version

    1.9.1

  • so-openstack-adapter

    Version

    1.9.2

  • so-request-db-adapter

    Version

    1.9.2

  • so-sdc-controller

    Version

    1.9.2

  • so-sdnc-adapter

    Version

    1.9.2

  • so-sol003-adapter

    Version

    1.8.2

  • so-api-handler-infra

    Version

    1.9.2

  • so-etsi-nfvo-ns-lcm

    Version

    1.8.2

  • so-oof-adapter

    Version

    1.8.3

  • so-cnf-adapter

    Version

    1.9.1

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

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


Release Notes

Version: 1.8.3

Release Date

2021-09-15

  • so-bpmn-infra

    Version

    1.8.3

  • so-catalog-db-adapter

    Version

    1.8.3

  • so-nssmf-adapter

    Version

    1.8.3

  • so-openstack-adapter

    Version

    1.8.3

  • so-request-db-adapter

    Version

    1.8.3

  • so-sdc-controller

    Version

    1.8.3

  • so-sdnc-adapter

    Version

    1.8.3

  • so-api-handler-infra

    Version

    1.8.3

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

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

Release Date

2021-04-19

  • so-bpmn-infra

    Version

    1.8.2

  • so-catalog-db-adapter

    Version

    1.8.2

  • so-admin-cockpit

    Version

    1.8.2

  • so-nssmf-adapter

    Version

    1.8.3

  • so-openstack-adapter

    Version

    1.8.2

  • so-request-db-adapter

    Version

    1.8.2

  • so-sdc-controller

    Version

    1.8.2

  • so-sdnc-adapter

    Version

    1.8.2

  • so-sol003-adapter

    Version

    1.8.2

  • so-api-handler-infra

    Version

    1.8.2

  • so-etsi-nfvo-ns-lcm

    Version

    1.8.2

  • so-oof-adapter

    Version

    1.8.3

  • so-cnf-adapter

    Version

    1.9.1

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

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-bpmn-infra

    Version

    1.7.10

  • so-catalog-db-adapter

    Version

    1.7.10

  • so-monitoring

    Version

    1.7.10

  • so/nssmf-adapter

    Version

    1.7.10

  • so/openstack-adapter

    Version

    1.7.10

  • so/request-db-adapter

    Version

    1.7.10

  • so/sdc-controller

    Version

    1.7.10

  • so/sdnc-adapter

    Version

    1.7.10

  • so/vnfm-adapter

    Version

    1.7.10

  • so/api-handler-infra

    Version

    1.7.10

  • so/api-handler-infra

    Version

    1.7.10

  • so/so-etsi-nfvo-ns-lcm

    Version

    1.7.7

  • so/so-oof-adapter

    Version

    1.7.6

  • so/cnf-adapter

    Version

    1.7.10

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

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


Release Date

13th July 2020

Docker Images

Dockers released for SO:

  • 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

Known Issues

OJSI Issues

N/A

Upgrade Notes

N/A

Deprecation Notes

N/A

Other

N/A


Release Date

Docker Images

Dockers released for SO:

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

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

Known Issues

  • [SO-2903] - Include so-appc-orchestrator with SO OOM

Appc Orchestrator Pod release : Appc - Ochestrator code changes will be delivered as part of the patch on Frankfurt as the OOM changes were delayed. These would be release as part of the post release flows.

OJSI Issues

N/A

Upgrade Notes

N/A

Deprecation Notes

N/A

Other

N/A

Release Date

2019-10-11

Docker Images

Dockers released for SO:

  • 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

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

Release Date

2019-06-13

Docker Images

Dockers released for SO:

  • 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

Release Date

2019-04-19

This is the dublin release base version separated from master branch.

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

Docker Images

Dockers released for SO:

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

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

Docker Images

Dockers released for SO:

  • 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

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.

Docker Images

Dockers released for SO:

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

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.

Release Date

2018-08-22

New release over master branch for Casablanca development

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

Release Date

2018-01-18

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

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