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

.

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:

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)

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

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.

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

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

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:
Browse to https://gerrit.onap.org
Log in
Open the menu next to your name (under the green search button)

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

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

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:

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”

Make sure the external installation is selected:

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

SO - Architecture
SO Functional View

SO Deployment View


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

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

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 json file |
html doc |
yaml doc |
The list of APIs that SO offerers for monitoring the BPMN flows could be found in the following table:
swagger json file |
yaml doc |
Further Reading
Detailed documentation can be found here:
serviceInstances API
This API allows to generate some requests to manage:
serviceInstances (create, delete)
volumeGroups attached to a vnf instance (create, delete)
vfModules attached to a vnf instance (create, delete)
vnfs attached to a service instance (create, delete)
orchestrationRequests (get)
CNF healthCheck
links:
Create service instance
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/serviceInstantiation/v7/serviceInstances |
Operation Type |
POST |
Content-Type |
application/json |
Request Headers:
Header Name |
Required |
Description |
---|---|---|
Authorization |
Y |
Base64 encoded username:password |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestDetails |
M |
1 |
requestDetails Object |
Content of requestDetails object. |
RequestDetails Object
Attribute |
Content |
Description |
---|---|---|
modelInfo |
modelInfo Object |
Content of modelInfo object. |
subscriberInfo |
subscriberInfo Object |
Content of subscriberInfo object. |
requestInfo |
requestInfo Object |
Content of requestInfo object. |
requestParameters |
requestParameters Object |
Content of requestParameters object. |
relatedInstanceList |
relatedInstanceList Object |
Content of relatedInstanceList object. |
cloudConfiguration |
cloudConfiguration Object |
Content of cloudConfiguration object. |
project |
project Object |
Content of project object. |
owningEntity |
owningEntity Object |
Content of owningEntity object. |
platform |
platform Object |
Content of platform object. |
lineOfBusiness |
lineOfBusiness Object |
Content of lineOfBusiness object. |
ModelInfo Object
Attribute |
Content |
Description |
---|---|---|
ModelType |
String |
Type of model |
ModelInvariantId |
String |
The Model Invariant Id. |
ModelNameVersionId |
String |
The modelname Version Id |
ModelName |
String |
Name of the Model |
ModelVersion |
String |
Version of the model |
ModelCustomization Name |
String |
The Model Customization name |
modelCustomizationUuid |
String |
The Model Customization UUid |
modelVersionId |
String |
The Model version id |
modelUuid |
String |
The Model UUid |
modelInvariantUuid |
String |
The Model Invariant UUid |
modelInstanceName |
String |
The Model Instance name |
SubscriberInfo Object
Attribute |
Content |
Description |
---|---|---|
GlobalSubscriberId |
String |
Global customer Id (in A&AI) |
SubscriberName |
String |
Name of the Subscriber |
RequestInfo Object
Attribute |
Content |
Description |
---|---|---|
Source |
String |
source of the request |
billingAccountNumber |
String |
billingAccountNumber of the request |
callbackUrl |
String |
callbackUrl of the request |
correlator |
String |
correlator of the request |
orderNumber |
String |
orderNumber of the request |
productFamilyId |
String |
productFamilyId of the request |
orderVersion |
String |
orderVersion of the request |
instanceName |
String |
instanceName of the request |
suppressRollback |
String |
suppressRollback of the request |
requestorId |
String |
requestorId of the request |
RequestParameters Object
Attribute |
Content |
Description |
---|---|---|
SubscriptionServiceType |
String |
The service type of the Subscription |
UserParams |
Array |
The product family Id. |
aLaCarte |
Boolean |
aLaCarte |
autoBuildVfModules |
Boolean |
autoBuildVfModules |
cascadeDelete |
Boolean |
cascadeDelete |
usePreload |
Boolean |
usePreload |
rebuildVolumeGroups |
Boolean |
rebuildVolumeGroups |
payload |
String |
payload |
controllerType |
String |
controllerType |
UserParams Object
Attribute |
Content |
Description |
---|---|---|
name |
String |
Tag name of attribute |
value |
String |
Value of the tag |
CloudConfiguration Object
Attribute |
Content |
Description |
---|---|---|
lcpCloudRegionId |
String |
CloudRegion Id (in A&AI) |
tenantId |
String |
Name of the Subscriber |
aicNodeClli |
String |
aicNodeClli property |
Project Object
Attribute |
Content |
Description |
---|---|---|
projectName |
String |
Name of the project |
OwningEntity Object
Attribute |
Content |
Description |
---|---|---|
owningEntityId |
String |
owningEntityId of the owingEntity |
owningEntityName |
String |
owningEntityName of the owingEntity |
Platform Object
Attribute |
Content |
Description |
---|---|---|
platformName |
String |
Platform Name |
LineOfBusiness Object
Attribute |
Content |
Description |
---|---|---|
lineOfBusinessName |
String |
Line Of Business Name |
Delete service instance
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId} |
Operation Type |
DELETE |
Content-Type |
application/json |
Request Headers:
Header Name |
Required |
Description |
---|---|---|
Authorization |
Y |
Base64 encoded username:password |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestDetails |
M |
1 |
requestDetails Object |
Content of requestDetails object. |
RequestDetails Object
Attribute |
Content |
Description |
---|---|---|
modelInfo |
modelInfo Object |
Content of modelInfo object. |
requestInfo |
requestInfo Object |
Content of requestInfo object. |
ModelInfo Object
Attribute |
Content |
Description |
---|---|---|
ModelType |
String |
Type of model |
ModelInvariantId |
String |
The Model Invariant Id. |
ModelName |
String |
Name of the Model |
ModelVersion |
String |
Version of the model |
RequestInfo Object
Attribute |
Content |
Description |
---|---|---|
Source |
String |
source of the request |
Create Volume Group
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups |
Operation Type |
POST |
Content-Type |
application/json |
Request Headers:
Header Name |
Required |
Description |
---|---|---|
Authorization |
Y |
Base64 encoded username:password |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestDetails |
M |
1 |
requestDetails Object |
Content of requestDetails object. |
RequestDetails Object
Attribute |
Content |
Description |
---|---|---|
modelInfo |
modelInfo Object |
Content of modelInfo object. |
subscriberInfo |
subscriberInfo Object |
Content of subscriberInfo object. |
requestInfo |
requestInfo Object |
Content of requestInfo object. |
requestParameters |
requestParameters Object |
Content of requestParameters object. |
relatedInstanceList |
relatedInstanceList Object |
Content of relatedInstanceList object. |
cloudConfiguration |
cloudConfiguration Object |
Content of cloudConfiguration object. |
project |
project Object |
Content of project object. |
owningEntity |
owningEntity Object |
Content of owningEntity object. |
platform |
platform Object |
Content of platform object. |
lineOfBusiness |
lineOfBusiness Object |
Content of lineOfBusiness object. |
ModelInfo Object
Attribute |
Content |
Description |
---|---|---|
ModelType |
String |
Type of model |
ModelInvariantId |
String |
The Model Invariant Id. |
ModelNameVersionId |
String |
The modelname Version Id |
ModelName |
String |
Name of the Model |
ModelVersion |
String |
Version of the model |
ModelCustomization Name |
String |
The Model Customization name |
modelCustomizationUuid |
String |
The Model Customization UUid |
modelVersionId |
String |
The Model version id |
modelUuid |
String |
The Model UUid |
modelInvariantUuid |
String |
The Model Invariant UUid |
modelInstanceName |
String |
The Model Instance name |
CloudConfiguration Object
Attribute |
Content |
Description |
---|---|---|
lcpCloudRegionId |
String |
CloudRegion Id (in A&AI) |
tenantId |
String |
Name of the Subscriber |
aicNodeClli |
String |
aicNodeClli property |
RequestInfo Object
Attribute |
Content |
Description |
---|---|---|
Source |
String |
source of the request |
billingAccountNumber |
String |
billingAccountNumber of the request |
callbackUrl |
String |
callbackUrl of the request |
correlator |
String |
correlator of the request |
orderNumber |
String |
orderNumber of the request |
productFamilyId |
String |
productFamilyId of the request |
orderVersion |
String |
orderVersion of the request |
instanceName |
String |
instanceName of the request |
suppressRollback |
String |
suppressRollback of the request |
requestorId |
String |
requestorId of the request |
relatedInstance List
Attribute |
Content |
Description |
---|---|---|
relatedInstance |
Object |
relatedInstance Object |
relatedInstance List
Attribute |
Content |
Description |
---|---|---|
instanceId |
String |
instanceId |
modelInfo |
Object |
Content of modelInfo object. |
Delete Volume Group
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volume-groupinstance-id} |
Operation Type |
DELETE |
Content-Type |
application/json |
Request Headers:
Header Name |
Required |
Description |
---|---|---|
Authorization |
Y |
Base64 encoded username:password |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestDetails |
M |
1 |
requestDetails Object |
Content of requestDetails object. |
RequestDetails Object
Attribute |
Content |
Description |
---|---|---|
modelInfo |
modelInfo Object |
Content of modelInfo object. |
cloudConfiguration |
cloudConfiguration Object |
Content of cloudConfiguration object. |
requestInfo |
requestInfo Object |
Content of requestInfo object. |
ModelInfo Object
Attribute |
Content |
Description |
---|---|---|
ModelType |
String |
Type of model |
ModelName |
String |
Name of the Model |
CloudConfiguration Object
Attribute |
Content |
Description |
---|---|---|
lcpCloudRegionId |
String |
CloudRegion Id (in A&AI) |
tenantId |
String |
Name of the Subscriber |
RequestInfo Object
Attribute |
Content |
Description |
---|---|---|
Source |
String |
source of the request |
Create VF Module
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules |
Operation Type |
POST |
Content-Type |
application/json |
Request Headers:
Header Name |
Required |
Description |
---|---|---|
Authorization |
Y |
Base64 encoded username:password |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestDetails |
M |
1 |
requestDetails Object |
Content of requestDetails object. |
RequestDetails Object
Attribute |
Content |
Description |
---|---|---|
modelInfo |
modelInfo Object |
Content of modelInfo object. |
cloudConfiguration |
cloudConfiguration Object |
Content of cloudConfiguration object. |
requestInfo |
requestInfo Object |
Content of requestInfo object. |
relatedInstanceList |
List |
Content of relatedInstanceList. |
ModelInfo Object
Attribute |
Content |
Description |
---|---|---|
ModelType |
String |
Type of model |
ModelInvariantId |
String |
The Model Invariant Id. |
ModelNameVersionId |
String |
The modelname Version Id |
ModelName |
String |
Name of the Model |
ModelVersion |
String |
Version of the model |
ModelCustomization Name |
String |
The Model Customization name |
CloudConfiguration Object
Attribute |
Content |
Description |
---|---|---|
lcpCloudRegionId |
String |
CloudRegion Id (in A&AI) |
tenantId |
String |
Name of the Subscriber |
RequestInfo Object
Attribute |
Content |
Description |
---|---|---|
InstanceName |
String |
The instance Name |
Source |
String |
source of the request |
SuppressRollback |
Boolean |
SuppressRollback |
relatedInstance List
Attribute |
Content |
Description |
---|---|---|
relatedInstance |
Object |
relatedInstance Object |
relatedInstance List
Attribute |
Content |
Description |
---|---|---|
instanceId |
String |
instanceId |
modelInfo |
Object |
Content of modelInfo object. |
instanceName |
String |
Name of the instance |
Delete VF Module
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleinstance-id} |
Operation Type |
DELETE |
Content-Type |
application/json |
Request Headers:
Header Name |
Required |
Description |
---|---|---|
Authorization |
Y |
Base64 encoded username:password |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestDetails |
M |
1 |
requestDetails Object |
Content of requestDetails object. |
RequestDetails Object
Attribute |
Content |
Description |
---|---|---|
modelInfo |
modelInfo Object |
Content of modelInfo object. |
cloudConfiguration |
cloudConfiguration Object |
Content of cloudConfiguration object. |
requestInfo |
requestInfo Object |
Content of requestInfo object. |
ModelInfo Object
Attribute |
Content |
Description |
---|---|---|
ModelType |
String |
Type of model |
ModelInvariantId |
String |
The Model Invariant Id. |
ModelNameVersionId |
String |
The modelname Version Id |
ModelName |
String |
Name of the Model |
ModelVersion |
String |
Version of the model |
ModelCustomization Name |
String |
The Model Customization name |
CloudConfiguration Object
Attribute |
Content |
Description |
---|---|---|
lcpCloudRegionId |
String |
CloudRegion Id (in A&AI) |
tenantId |
String |
Name of the Subscriber |
RequestInfo Object
Attribute |
Content |
Description |
---|---|---|
Source |
String |
source of the request |
Create VNF
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs |
Operation Type |
POST |
Content-Type |
application/json |
Request Headers:
Header Name |
Required |
Description |
---|---|---|
Authorization |
Y |
Base64 encoded username:password |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestDetails |
M |
1 |
requestDetails Object |
Content of requestDetails object. |
RequestDetails Object
Attribute |
Content |
Description |
---|---|---|
modelInfo |
modelInfo Object |
Content of modelInfo object. |
subscriberInfo |
subscriberInfo Object |
Content of subscriberInfo object. |
requestInfo |
requestInfo Object |
Content of requestInfo object. |
requestParameters |
requestParameters Object |
Content of requestParameters object. |
relatedInstanceList |
relatedInstanceList Object |
Content of relatedInstanceList object. |
cloudConfiguration |
cloudConfiguration Object |
Content of cloudConfiguration object. |
project |
project Object |
Content of project object. |
owningEntity |
owningEntity Object |
Content of owningEntity object. |
platform |
platform Object |
Content of platform object. |
lineOfBusiness |
lineOfBusiness Object |
Content of lineOfBusiness object. |
ModelInfo Object
Attribute |
Content |
Description |
---|---|---|
ModelType |
String |
Type of model |
ModelInvariantId |
String |
The Model Invariant Id. |
ModelNameVersionId |
String |
The modelname Version Id |
ModelName |
String |
Name of the Model |
ModelVersion |
String |
Version of the model |
ModelCustomization Name |
String |
The Model Customization name |
modelCustomizationUuid |
String |
The Model Customization UUid |
modelVersionId |
String |
The Model version id |
modelUuid |
String |
The Model UUid |
modelInvariantUuid |
String |
The Model Invariant UUid |
modelInstanceName |
String |
The Model Instance name |
CloudConfiguration Object
Attribute |
Content |
Description |
---|---|---|
lcpCloudRegionId |
String |
CloudRegion Id (in A&AI) |
tenantId |
String |
Name of the Subscriber |
RequestInfo Object
Attribute |
Content |
Description |
---|---|---|
Source |
String |
source of the request |
billingAccountNumber |
String |
billingAccountNumber of the request |
callbackUrl |
String |
callbackUrl of the request |
correlator |
String |
correlator of the request |
orderNumber |
String |
orderNumber of the request |
productFamilyId |
String |
productFamilyId of the request |
orderVersion |
String |
orderVersion of the request |
instanceName |
String |
instanceName of the request |
suppressRollback |
String |
suppressRollback of the request |
requestorId |
String |
requestorId of the request |
relatedInstance List
Attribute |
Content |
Description |
---|---|---|
relatedInstance |
Object |
relatedInstance Object |
relatedInstance List
Attribute |
Content |
Description |
---|---|---|
instanceId |
String |
instanceId |
modelInfo |
Object |
Content of modelInfo object. |
RequestParameters Object
Attribute |
Content |
Description |
---|---|---|
UserParams |
Array |
The product family Id. |
UserParams Object
Attribute |
Content |
Description |
---|---|---|
name |
String |
Tag name of attribute |
value |
String |
Value of the tag |
Delete VNF
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId} |
Operation Type |
DELETE |
Content-Type |
application/json |
Request Headers:
Header Name |
Required |
Description |
---|---|---|
Authorization |
Y |
Base64 encoded username:password |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestDetails |
M |
1 |
requestDetails Object |
Content of requestDetails object. |
RequestDetails Object
Attribute |
Content |
Description |
---|---|---|
modelInfo |
modelInfo Object |
Content of modelInfo object. |
cloudConfiguration |
cloudConfiguration Object |
Content of cloudConfiguration object. |
requestInfo |
requestInfo Object |
Content of requestInfo object. |
requestParameters |
requestParameters Object |
Content of requestParameters object. |
ModelInfo Object
Attribute |
Content |
Description |
---|---|---|
ModelType |
String |
Type of model |
ModelName |
String |
Name of the Model |
CloudConfiguration Object
Attribute |
Content |
Description |
---|---|---|
lcpCloudRegionId |
String |
CloudRegion Id (in A&AI) |
tenantId |
String |
Name of the Subscriber |
RequestInfo Object
Attribute |
Content |
Description |
---|---|---|
Source |
String |
source of the request |
RequestParameters Object
Attribute |
Content |
Description |
---|---|---|
UserParams |
Array |
The product family Id. |
UserParams Object
Attribute |
Content |
Description |
---|---|---|
name |
String |
Tag name of attribute |
value |
String |
Value of the tag |
Create CNF
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/cnfs |
Operation Type |
POST |
Content-Type |
application/json |
Request Headers:
Header Name |
Required |
Description |
---|---|---|
Authorization |
Y |
Base64 encoded username:password |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestDetails |
M |
1 |
requestDetails Object |
Content of requestDetails object. |
RequestDetails Object
Attribute |
Content |
Description |
---|---|---|
modelInfo |
modelInfo Object |
Content of modelInfo object. |
requestInfo |
requestInfo Object |
Content of requestInfo object. |
requestParameters |
requestParameters Object |
Content of requestParameters object. |
relatedInstanceList |
relatedInstanceList Object |
Content of relatedInstanceList object. |
cloudConfiguration |
cloudConfiguration Object |
Content of cloudConfiguration object. |
platform |
platform Object |
Content of platform object. |
lineOfBusiness |
lineOfBusiness Object |
Content of lineOfBusiness object. |
ModelInfo Object
Attribute |
Content |
Description |
---|---|---|
modelType |
String |
Type of model |
modelInvariantId |
String |
The Model Invariant Id. |
modelName |
String |
Name of the Model |
modelVersion |
String |
Version of the model |
modelCustomizationName |
String |
The Model Customization name |
modelVersionId |
String |
The Model version id |
CloudConfiguration Object
Attribute |
Content |
Description |
---|---|---|
lcpCloudRegionId |
String |
CloudRegion Id (in A&AI) |
tenantId |
String |
Name of the Subscriber |
cloudOwner |
String |
Name of the cloud owner |
RequestInfo Object
Attribute |
Content |
Description |
---|---|---|
source |
String |
source of the request |
productFamilyId |
String |
productFamilyId of the request |
instanceName |
String |
instanceName of the request |
suppressRollback |
String |
suppressRollback of the request |
requestorId |
String |
requestorId of the request |
relatedInstance List
Attribute |
Content |
Description |
---|---|---|
relatedInstance |
Object |
relatedInstance Object |
relatedInstance List
Attribute |
Content |
Description |
---|---|---|
instanceId |
String |
instanceId |
modelInfo |
Object |
Content of modelInfo object. |
RequestParameters Object
Attribute |
Content |
Description |
---|---|---|
userParams |
Array |
The product family Id. |
UserParams Object
Attribute |
Content |
Description |
---|---|---|
name |
String |
Tag name of attribute |
value |
String |
Value of the tag |
Delete CNF
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/cnfs/{cnfInstanceId} |
Operation Type |
DELETE |
Content-Type |
application/json |
Request Headers:
Header Name |
Required |
Description |
---|---|---|
Authorization |
Y |
Base64 encoded username:password |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestDetails |
M |
1 |
requestDetails Object |
Content of requestDetails object. |
RequestDetails Object
Attribute |
Content |
Description |
---|---|---|
modelInfo |
modelInfo Object |
Content of modelInfo object. |
cloudConfiguration |
cloudConfiguration Object |
Content of cloudConfiguration object. |
requestInfo |
requestInfo Object |
Content of requestInfo object. |
requestParameters |
requestParameters Object |
Content of requestParameters object. |
ModelInfo Object
Attribute |
Content |
Description |
---|---|---|
modelType |
String |
Type of model |
modelName |
String |
Name of the Model |
modelVersionId |
String |
The Model version id |
modelInvariantId |
String |
The Model Invariant Id. |
modelVersion |
String |
Version of the model |
modelCustomizationName |
String |
The Model Customization name |
modelCustomizationId |
String |
The Model Customization Id. |
CloudConfiguration Object
Attribute |
Content |
Description |
---|---|---|
lcpCloudRegionId |
String |
CloudRegion Id (in A&AI) |
tenantId |
String |
Name of the Subscriber |
cloudOwner |
String |
Name of the cloud owner |
RequestInfo Object
Attribute |
Content |
Description |
---|---|---|
source |
String |
source of the request |
requestId |
String |
request Id |
RequestParameters Object
Attribute |
Content |
Description |
---|---|---|
UserParams |
Array |
The product family Id. |
UserParams Object
Attribute |
Content |
Description |
---|---|---|
name |
String |
Tag name of attribute |
value |
String |
Value of the tag |
GET Orchestration Request
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/orchestrationRequests/v7/{request-id} |
Operation Type |
GET |
Content-Type |
application/json |
Request Headers:
Header Name |
Required |
Description |
---|---|---|
Authorization |
Y |
Base64 encoded username:password |
Response Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
request |
M |
1 |
request Object |
Content of request object. |
Request Object
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestId |
M |
1 |
String |
Request Id |
startTime |
M |
1 |
request Object |
Start time. |
requestScope |
M |
1 |
request Object |
Scope of the request. |
requestType |
M |
1 |
request Object |
Type of the request. |
requestDetails |
M |
1 |
requestDetails Object |
Type of the request. |
requestStatus |
M |
1 |
requestStatus Object |
Type of the request. |
RequestDetails Object
Attribute |
Content |
Description |
---|---|---|
modelInfo |
modelInfo Object |
Content of modelInfo object. |
subscriberInfo |
subscriberInfo Object |
Content of subscriberInfo object. |
requestInfo |
requestInfo Object |
Content of requestInfo object. |
requestParameters |
requestParameters Object |
Content of requestParameters object. |
relatedInstanceList |
relatedInstanceList Object |
Content of relatedInstanceList object. |
cloudConfiguration |
cloudConfiguration Object |
Content of cloudConfiguration object. |
project |
project Object |
Content of project object. |
owningEntity |
owningEntity Object |
Content of owningEntity object. |
platform |
platform Object |
Content of platform object. |
lineOfBusiness |
lineOfBusiness Object |
Content of lineOfBusiness object. |
ModelInfo Object
Attribute |
Content |
Description |
---|---|---|
ModelType |
String |
Type of model |
ModelInvariantId |
String |
The Model Invariant Id. |
ModelNameVersionId |
String |
The modelname Version Id |
ModelName |
String |
Name of the Model |
ModelVersion |
String |
Version of the model |
ModelCustomization Name |
String |
The Model Customization name |
modelCustomizationUuid |
String |
The Model Customization UUid |
modelVersionId |
String |
The Model version id |
modelUuid |
String |
The Model UUid |
modelInvariantUuid |
String |
The Model Invariant UUid |
modelInstanceName |
String |
The Model Instance name |
SubscriberInfo Object
Attribute |
Content |
Description |
---|---|---|
GlobalSubscriberId |
String |
Global customer Id (in A&AI) |
SubscriberName |
String |
Name of the Subscriber |
RequestInfo Object
Attribute |
Content |
Description |
---|---|---|
Source |
String |
source of the request |
billingAccountNumber |
String |
billingAccountNumber of the request |
callbackUrl |
String |
callbackUrl of the request |
correlator |
String |
correlator of the request |
orderNumber |
String |
orderNumber of the request |
productFamilyId |
String |
productFamilyId of the request |
orderVersion |
String |
orderVersion of the request |
instanceName |
String |
instanceName of the request |
suppressRollback |
String |
suppressRollback of the request |
requestorId |
String |
requestorId of the request |
RequestParameters Object
Attribute |
Content |
Description |
---|---|---|
SubscriptionServiceType |
String |
The service type of the Subscription |
RequestStatus Object
Attribute |
Content |
Description |
---|---|---|
finishTime |
String |
Time |
requestState |
String |
state of the request |
statusMessage |
String |
statusMessage |
percentProgress |
String |
percentage of progress |
GET Orchestration Requests
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/orchestrationRequests/v7 |
Operation Type |
GET |
Content-Type |
application/json |
Request Headers:
Header Name |
Required |
Description |
---|---|---|
Authorization |
Y |
Base64 encoded username:password |
Query Parameters:
Attribute |
Required |
Cardinality |
Content |
Description |
---|---|---|---|---|
filter |
Y |
1 |
String |
Orchestration filter (scheme KeyTypes:Option:Value)
|
includeCloudRequest |
N |
1 |
Boolean |
Enable or disable cloud data request |
format |
N |
1 |
String |
Orchestration request format [DETAIL, STATUSDETAIL, SIMPLE, SIMPLENOTASKINFO] |
Response Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestList |
M |
1 |
Array |
Content of request List. |
RequestList :
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
request |
M |
1 |
request Object |
Content of request object. |
Request Object
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestId |
M |
1 |
String |
Request Id. |
startTime |
M |
1 |
request Object |
Start time. |
requestScope |
M |
1 |
request Object |
Scope of the request. |
requestType |
M |
1 |
request Object |
Type of the request. |
requestDetails |
M |
1 |
requestDetails Object |
Type of the request. |
requestStatus |
M |
1 |
requestStatus Object |
Type of the request. |
RequestDetails Object
Attribute |
Content |
Description |
---|---|---|
modelInfo |
modelInfo Object |
Content of modelInfo object. |
subscriberInfo |
subscriberInfo Object |
Content of subscriberInfo object. |
requestInfo |
requestInfo Object |
Content of requestInfo object. |
requestParameters |
requestParameters Object |
Content of requestParameters object. |
relatedInstanceList |
relatedInstanceList Object |
Content of relatedInstanceList object. |
cloudConfiguration |
cloudConfiguration Object |
Content of cloudConfiguration object. |
project |
project Object |
Content of project object. |
owningEntity |
owningEntity Object |
Content of owningEntity object. |
platform |
platform Object |
Content of platform object. |
lineOfBusiness |
lineOfBusiness Object |
Content of lineOfBusiness object. |
ModelInfo Object
Attribute |
Content |
Description |
---|---|---|
ModelType |
String |
Type of model |
ModelInvariantId |
String |
The Model Invariant Id. |
ModelNameVersionId |
String |
The modelname Version Id |
ModelName |
String |
Name of the Model |
ModelVersion |
String |
Version of the model |
ModelCustomization Name |
String |
The Model Customization name |
modelCustomizationUuid |
String |
The Model Customization UUid |
modelVersionId |
String |
The Model version id |
modelUuid |
String |
The Model UUid |
modelInvariantUuid |
String |
The Model Invariant UUid |
modelInstanceName |
String |
The Model Instance name |
SubscriberInfo Object
Attribute |
Content |
Description |
---|---|---|
GlobalSubscriberId |
String |
Global customer Id (in A&AI) |
SubscriberName |
String |
Name of the Subscriber |
RequestInfo Object
Attribute |
Content |
Description |
---|---|---|
Source |
String |
source of the request |
billingAccountNumber |
String |
billingAccountNumber of the request |
callbackUrl |
String |
callbackUrl of the request |
correlator |
String |
correlator of the request |
orderNumber |
String |
orderNumber of the request |
productFamilyId |
String |
productFamilyId of the request |
orderVersion |
String |
orderVersion of the request |
instanceName |
String |
instanceName of the request |
suppressRollback |
String |
suppressRollback of the request |
requestorId |
String |
requestorId of the request |
RequestParameters Object
Attribute |
Content |
Description |
---|---|---|
SubscriptionServiceType |
String |
The service type of the Subscription |
RequestStatus Object
Attribute |
Content |
Description |
---|---|---|
finishTime |
String |
Time |
requestState |
String |
state of the request |
statusMessage |
String |
statusMessage |
percentProgress |
String |
percentage of progress |
CNF healthCheck
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/serviceInstantiation/v7/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/healthcheck |
Operation Type |
POST |
Content-Type |
application/json |
Request Headers:
Header Name |
Required |
Description |
---|---|---|
Authorization |
Y |
Base64 encoded username:password |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestDetails |
M |
1 |
requestDetails Object |
Content of requestDetails object. |
RequestDetails Object
Attribute |
Content |
Description |
---|---|---|
modelInfo |
modelInfo Object |
Content of modelInfo object. |
cloudConfiguration |
cloudConfiguration Object |
Content of cloudConfiguration object. |
requestInfo |
requestInfo Object |
Content of requestInfo object. |
relatedInstanceList |
List |
Content of relatedInstanceList. |
ModelInfo Object
Attribute |
Content |
Description |
---|---|---|
ModelType |
String |
Type of model |
ModelInvariantId |
String |
The Model Invariant Id. |
ModelNameVersionId |
String |
The modelname Version Id |
ModelName |
String |
Name of the Model |
ModelVersion |
String |
Version of the model |
ModelCustomization Name |
String |
The Model Customization name |
CloudConfiguration Object
Attribute |
Content |
Description |
---|---|---|
lcpCloudRegionId |
String |
CloudRegion Id (in A&AI) |
tenantId |
String |
Name of the Subscriber |
RequestInfo Object
Attribute |
Content |
Description |
---|---|---|
InstanceName |
String |
The instance Name |
Source |
String |
source of the request |
SuppressRollback |
Boolean |
SuppressRollback |
relatedInstance List
Attribute |
Content |
Description |
---|---|---|
relatedInstance |
Object |
relatedInstance Object |
relatedInstance List
Attribute |
Content |
Description |
---|---|---|
instanceId |
String |
instanceId |
modelInfo |
Object |
Content of modelInfo object. |
instanceName |
String |
Name of the instance |
e2eServiceInstances API
This API allows to manage:
e2eServiceInstances (create and delete)
operations on e2eServiceInstances (get)
Create E2E service instance
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/e2eServiceInstances/v3 |
Operation Type |
POST |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
service |
M |
1 |
Service Object |
Content of service object. |
Service Object
Attribute |
Content |
Description |
---|---|---|
name |
String |
Service instance name. |
description |
String |
Service instance description |
serviceUuid |
String |
Model UUID |
serviceInvariantUuid |
String |
Model Invariant UUID |
gloabalSubscriberId |
String |
Customer Id |
serviceType |
String |
service Type |
parameters |
Object |
Parameter Object |
Parameter Object
Attribute |
Content |
Description |
---|---|---|
locationConstraints |
List of object |
location infor for each vnf |
resource |
List of Resource |
resource of service/resource |
requestInputs |
key-value map |
input of service/resource |
LocationConstraint Object
Attribute |
Content |
Description |
---|---|---|
vnfProfileId |
String |
Customization id for VNF |
locationConstraints |
Object |
DC location info of VNF |
VnfLocationConstraint Object
Attribute |
Content |
Description |
---|---|---|
vimId |
String |
VIM id from ESR definition |
Resource Object
Attribute |
Content |
Description |
---|---|---|
resourceName |
String |
The resource name |
resourceInvariantUuid |
String |
The resource invariant UUID. |
resourceUuid |
String |
The resource UUID. |
resourceCustomizationUuid |
String |
The resource customization UUID. |
parameters |
Object |
Parameter of resource |
Response:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
serviceId |
M |
1 |
String |
Service instance ID. |
operationId |
M |
1 |
String |
Service Operation ID. |
Delete E2E service instance
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/e2eServiceInstances/v3/{serviceId} |
Operation Type |
DELETE |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
globalSubscriberId |
M |
1 |
String |
The subscriber id. It is defined in AAI |
serviceType |
M |
1 |
String |
The service type. It is defined in AAI |
Response:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
operationId |
M |
1 |
String |
The operation id. |
Query E2E service operation result
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/e2eServiceInstances/v3/{serviceId}/operations/{operationId} |
Operation Type |
GET |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
serviceId |
M |
1 |
Service instance ID. |
|
operationId |
M |
1 |
Service Operation ID. |
Response:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
operation |
M |
1 |
String |
Operation object identify. |
operationId |
M |
1 |
String |
Operation ID. |
operation |
M |
1 |
String |
Operation type, create|delete. |
result |
M |
1 |
String |
Operation result: finished, error, processing. |
reason |
M |
1 |
String |
If failing, need to write fail reason. |
userId |
M |
1 |
String |
Operation user ID. |
operationContent |
M |
1 |
String |
The status detail of current operation which is being executing. |
progress |
M |
1 |
String |
Current operation progress. |
operateAt |
M |
1 |
String |
Time that it starts to execute operation. |
finishedAt |
M |
1 |
String |
Time that it finished executing operation. |
onap3gppServiceInstances API
Create a 3GPP service instance
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/3gppservices/v1/allocate |
Operation Type |
POST |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
allocate3gppService |
M |
1 |
allocate3gppService Object |
Content of allocate3gppService object |
Allocate3gppService Object
Attribute |
Content |
Description |
---|---|---|
name |
String |
Name of the service to allocate |
modelInvariantUuid |
String |
Model Invariant UUID |
modelUuid |
String |
Model UUID |
gloabalSubscriberId |
String |
Customer Id |
subscriptionServiceType |
String |
service Type for subscription |
networkType |
String |
Network Type |
additionalProperties |
Object |
Map of additional properties required for service allocation |
Response:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
jobId |
M |
1 |
String |
Job ID to be used to identify the status of the job |
status |
M |
1 |
String |
Status of the job |
statusDescription |
M |
1 |
Object |
Description on status in case of erroneous response |
Terminate/Deallocate a 3GPP service instance
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/3gppservices/v1/deAllocate |
Operation Type |
DELETE |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
deAllocate3gppService |
M |
1 |
deAllocate3gppService Object |
Content of deAllocate3gppService object |
DeAllocate3gppService Object
Attribute |
Content |
Description |
---|---|---|
serviceInstanceID |
String |
ID of the service to terminate |
gloabalSubscriberId |
String |
Customer Id |
subscriptionServiceType |
String |
service Type for subscription |
networkType |
String |
Network Type |
additionalProperties |
Object |
Map of additional properties required for service deallocation |
Response:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
jobId |
M |
1 |
String |
Job ID to be used to identify the status of the job |
status |
M |
1 |
String |
Status of the job |
statusDescription |
M |
1 |
Object |
Description on status in case of erroneous response |
Modify a 3GPP service instance
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/3gppservices/v1/modify |
Operation Type |
PUT |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
modify3gppService |
M |
1 |
modify3gppService Object |
Content of modify3gppService object |
Modify3gppService Object
Attribute |
Content |
Description |
---|---|---|
name |
String |
Name of the service to modify |
serviceInstanceID |
String |
ID of the service to modify |
gloabalSubscriberId |
String |
Customer Id |
subscriptionServiceType |
String |
service Type for subscription |
networkType |
String |
Network Type |
additionalProperties |
Object |
Map of additional properties required for service modification |
Response:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
jobId |
M |
1 |
String |
Job ID to be used to identify the status of the job |
status |
M |
1 |
String |
Status of the job |
statusDescription |
M |
1 |
Object |
Description on status in case of erroneous response |
Activate a 3GPP service instance
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/3gppservices/v1/activate |
Operation Type |
POST |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
activate3gppService |
M |
1 |
activate3gppService Object |
Content of activate3gppService object |
Activate3gppService Object
Attribute |
Content |
Description |
---|---|---|
serviceInstanceID |
String |
ID of the service to be activated |
gloabalSubscriberId |
String |
Customer Id |
subscriptionServiceType |
String |
service Type for subscription |
networkType |
String |
Network Type |
additionalProperties |
Object |
Map of additional properties required for service activation |
Response:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
jobId |
M |
1 |
String |
Job ID to be used to identify the status of the job |
status |
M |
1 |
String |
Status of the job |
statusDescription |
M |
1 |
Object |
Description on status in case of erroneous response |
Deactivate a 3GPP service instance
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/3gppservices/v1/deActivate |
Operation Type |
POST |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
deActivate3gppService |
M |
1 |
deActivate3gppService Object |
Content of deActivate3gppService object |
DeActivate3gppService Object
Attribute |
Content |
Description |
---|---|---|
serviceInstanceID |
String |
ID of the service to be deactivated |
gloabalSubscriberId |
String |
Customer Id |
subscriptionServiceType |
String |
service Type for subscription |
networkType |
String |
Network Type |
additionalProperties |
Object |
Map of additional properties required for service deactivation |
Response:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
jobId |
M |
1 |
String |
Job ID to be used to identify the status of the job |
status |
M |
1 |
String |
Status of the job |
statusDescription |
M |
1 |
Object |
Description on status in case of erroneous response |
Query subnet capability based on subnet types
Interface Definition |
Description |
---|---|
URI |
/onap/so/infra/3gppservices/v1/subnetCapabilityQuery |
Operation Type |
GET |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
querySubnetCapability |
M |
1 |
QuerySubnetCapability Object |
Content of querySubnetCapability object |
QuerySubnetCapability Object
Attribute |
Content |
Description |
---|---|---|
SubnetTypes |
List of object |
This describes the subnet types info |
SubnetTypes Object
Attribute |
Content |
Description |
---|---|---|
SubnetTypes |
enum |
This describes the subnet types i.e., AN,AN_NF,CN,TN_FH,TN_MH,TN_BH |
Response:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
ResponseDetails |
M |
1 |
Object |
Successful operation with capabilities for the queried subnetTypes |
API consumed by SO

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
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
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
Interface Definition |
Description |
---|---|
URI |
http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/subnets/{subnet-id} |
Operation Type |
DELETE |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
subnet_id |
M |
1 |
String |
The ID of the subnet. |
Create Port
https://developer.openstack.org/api-ref/networking/v2/#create-port
Interface Definition |
Description |
---|---|
URI |
http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/ports |
Operation Type |
POST |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
port |
M |
1 |
object |
A port object. |
admin_state_up |
O |
1 |
boolean |
The administrative state of the resource. |
allowed_address_pairs |
O |
1 |
array |
A set of zero or more allowed address pairs. |
binding:host_id |
O |
1 |
string |
The ID of the host where the port resides. |
binding:profile |
O |
1 |
string |
A dictionary that enables the application running on the specific host |
binding:vnic_type |
O |
1 |
string |
The type of vNIC which this port should be attached to. |
description |
O |
1 |
string |
A human-readable description for the resource. |
device_id |
O |
1 |
string |
The ID of the device that uses this port. |
device_owner |
O |
1 |
string |
The entity type that uses this port. |
dns_domain |
O |
1 |
string |
A valid DNS domain. |
dns_name |
O |
1 |
string |
A valid DNS name. |
extra_dhcp_opts |
O |
1 |
array |
A set of zero or more extra DHCP option pairs. |
fixed_ips |
O |
1 |
array |
The IP addresses for the port. |
mac_address |
O |
1 |
string |
The MAC address of the port. |
name |
O |
1 |
string |
Human-readable name of the resource. |
network_id |
M |
1 |
string |
The ID of the attached network. |
port_security_enabled |
O |
1 |
boolean |
The port security status. |
project_id |
O |
1 |
string |
The ID of the project that owns the resource. |
qos_policy_id |
O |
1 |
string |
QoS policy associated with the port. |
security_groups |
O |
1 |
array |
The IDs of security groups applied to the port. |
tenant_id |
O |
1 |
string |
The ID of the project that owns the resource. |
Response:
Attribute |
Content |
Description |
---|---|---|
port |
object |
A port object. |
admin_state_up |
boolean |
The administrative state of the resource. |
allowed_address_pairs |
array |
A set of zero or more allowed address pairs. |
binding:host_id |
string |
The ID of the host where the port resides. |
binding:profile |
String |
A dictionary that enables the application running on the specific host |
binding:vif_details |
object |
A dictionary which contains additional information on the port. |
binding:vif_type |
String |
The type of which mechanism is used for the port. |
binding:vnic_type |
string |
The type of vNIC which this port should be attached to. |
created_at |
string |
Time at which port has been created. |
data_plane_status |
string |
Status of the underlying data plane of a port. |
description |
string |
A human-readable description for the resource. |
device_id |
string |
The ID of the device that uses this port. |
device_owner |
string |
The entity type that uses this port. |
dns_assignment |
object |
Data assigned to a port by the Networking internal DNS |
dns_domain |
string |
A valid DNS domain. |
dns_name |
string |
A valid DNS name. |
extra_dhcp_opts |
array |
A set of zero or more extra DHCP option pairs. |
fixed_ips |
array |
The IP addresses for the port. |
id |
string |
The ID of the resource. |
ip_allocation |
string |
Indicates when ports use either deferred, immediate or no IP allocation (none) |
mac_address |
string |
The MAC address of the port. |
name |
string |
Human-readable name of the resource. |
network_id |
string |
The ID of the attached network. |
port_security_enabled |
boolean |
The port security status. |
project_id |
string |
The ID of the project. |
revision_number |
integer |
The revision number of the resource. |
qos_policy_id |
string |
The ID of the QoS policy associated with the port. |
security_groups |
array |
The IDs of security groups applied to the port. |
status |
string |
The port status. Values are ACTIVE, DOWN, BUILD and ERROR. |
tenant_id |
string |
The ID of the project. |
updated_at |
string |
Time at which port has been updated. |
Delete Port
https://developer.openstack.org/api-ref/network/v2/#delete-port
Interface Definition |
Description |
---|---|
URI |
http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/ports/{port-id} |
Operation Type |
DELETE |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
port_id |
M |
1 |
String |
The ID of the port. |
Create Security Group
https://developer.openstack.org/api-ref/network/v2/#create-security-group
Interface Definition |
Description |
---|---|
URI |
http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/security-groups |
Operation Type |
POST |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
security_group |
M |
1 |
object |
A security_group object. |
tenant_id |
M |
1 |
string |
The ID of the project. |
project_id |
M |
1 |
string |
The ID of the project. |
description |
O |
1 |
string |
A human-readable description for the resource. |
name |
M |
1 |
string |
Human-readable name of the resource. |
Response:
Attribute |
Content |
Description |
---|---|---|
security_group |
object |
A security_group object. |
id |
string |
The ID of the security group. |
tenant_id |
string |
The ID of the project. |
project_id |
string |
The ID of the project. |
created_at |
string |
Time at which the resource has been created (in UTC ISO8601 format). |
updated_at |
string |
Time at which the resource has been updated (in UTC ISO8601 format). |
revision_number |
integer |
The revision number of the resource. |
name |
string |
Human-readable name of the resource. |
description |
string |
A human-readable description for the resource. |
security_group_rules |
array |
A list of security_group_rule objects. |
Delete security group
https://developer.openstack.org/api-ref/network/v2/#delete-security-group
Interface Definition |
Description |
---|---|
URI |
http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/security-groups/{security-group-id} |
Operation Type |
DELETE |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
security_group_id |
M |
1 |
String |
The ID of the security group. |
Create Security Group Rule
https://developer.openstack.org/api-ref/network/v2/#create-security-group-rule
Interface Definition |
Description |
---|---|
URI |
http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/security-group-rules |
Operation Type |
POST |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
security_group_rule |
M |
1 |
object |
A security_group_rule object. |
remote_group_id |
O |
1 |
string |
The remote group UUID to associate with this security group rule. |
direction |
M |
1 |
string |
Ingress or egress, which is the direction in which the metering rule is applied. |
protocol |
M |
1 |
string |
The IP protocol can be represented by a string, an integer, or null. |
ethertype |
O |
1 |
string |
Must be IPv4 or IPv6, and addresses represented in CIDR must match the ingress or egress rules. |
port_range_max |
O |
1 |
integer |
The maximum port number in the range that is matched by the security group rule. |
security_group_id |
M |
1 |
string |
The security group ID to associate with this security group rule. |
port_range_min |
O |
1 |
integer |
The minimum port number in the range that is matched by the security group rule. |
remote_ip_prefix |
M |
1 |
string |
The remote IP prefix to associate with this metering rule packet. |
description |
O |
1 |
string |
A human-readable description for the resource. Default is an empty string. |
Response:
Attribute |
Content |
Description |
---|---|---|
security_group_rule |
object |
A security_group_rule object. |
remote_group_id |
string |
The remote group UUID to associate with this security group rule. |
direction |
string |
Ingress or egress, which is the direction in which the metering rule is applied. |
protocol |
string |
The IP protocol can be represented by a string, an integer, or null. |
ethertype |
string |
Must be IPv4 or IPv6, and addresses represented in CIDR must match the ingress or egress rules. |
port_range_max |
integer |
The maximum port number in the range that is matched by the security group rule. |
security_group_id |
string |
The security group ID to associate with this security group rule. |
tenant_id |
string |
The ID of the project. |
project_id |
string |
The ID of the project. |
port_range_min |
integer |
The minimum port number in the range that is matched by the security group rule. |
remote_ip_prefix |
string |
The remote IP prefix to associate with this metering rule packet. |
revision_number |
integer |
The revision number of the resource. |
id |
string |
The ID of the security group rule. |
description |
string |
A human-readable description for the resource. |
Delete security group
https://developer.openstack.org/api-ref/networking/v2/#delete-security-group-rule
Interface Definition |
Description |
---|---|
URI |
http://msb.onap.org/api/multicloud/v0/{cloud-owner}_{cloud-region}/neutron/v2.0/security-group-rules/{security-group-rule-id} |
Operation Type |
DELETE |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
security_group_rule_id |
M |
1 |
String |
The ID of the security group rule. |
Policy API
Create a dictionary item
Interface Definition |
Description |
---|---|
URI |
/createDictionaryItem |
Operation Type |
PUT |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
dictionory |
M |
1 |
String |
|
dictionaryJson |
M |
1 |
String |
|
dictionaryType |
M |
1 |
String |
|
requestId |
M |
1 |
String |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Create Policy
Interface Definition |
Description |
---|---|
URI |
/createPolicy |
Operation Type |
PUT |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
attributes |
M |
1 |
Object |
set of attributes in key value pair |
configBody |
M |
1 |
String |
|
configBodyType |
M |
1 |
String |
|
configName |
M |
1 |
String |
|
ecompName |
M |
1 |
String |
|
policyClass |
M |
1 |
String |
|
policyConfigType |
M |
1 |
String |
|
policyDescription |
M |
1 |
String |
|
policyName |
M |
1 |
String |
|
requestID |
M |
1 |
String |
request ID |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Delete Policy
Interface Definition |
Description |
---|---|
URI |
/deletePolicy |
Operation Type |
DELETE |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
deleteCondition |
M |
1 |
String |
|
pdpGroup |
M |
1 |
String |
|
policyComponent |
M |
1 |
String |
|
policyName |
M |
1 |
String |
|
policyType |
M |
1 |
String |
|
requestID |
M |
1 |
String |
request ID |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Get Configuration
Interface Definition |
Description |
---|---|
URI |
/getConfig |
Operation Type |
POST |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
configAttributes |
M |
1 |
String |
|
configName |
M |
1 |
String |
|
ecompName |
M |
1 |
String |
|
policyName |
M |
1 |
String |
|
unique |
M |
1 |
Boolean |
|
requestID |
M |
1 |
String |
request ID |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Get Decision
Interface Definition |
Description |
---|---|
URI |
/getDecision |
Operation Type |
POST |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
decisionAttributes |
M |
1 |
Object |
|
ecompComponentName |
M |
1 |
String |
|
requestID |
M |
1 |
String |
request ID |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Response Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
decision |
N |
1 |
String |
|
details |
N |
1 |
String |
Get Dictionary Items
Interface Definition |
Description |
---|---|
URI |
/getDictionaryItems |
Operation Type |
POST |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
dictionary |
N |
1 |
String |
|
dictionaryJson |
N |
1 |
String |
|
dictionaryType |
N |
1 |
String |
|
requestID |
M |
1 |
String |
request ID |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Response Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
dictionaryData |
N |
1 |
Object |
|
dictionaryJson |
N |
1 |
Object |
|
responseCode |
N |
1 |
Integer |
|
responseMessage |
N |
1 |
Object |
Get Metrics
Interface Definition |
Description |
---|---|
URI |
/getMetrics |
Operation Type |
GET |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Response Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
metricsTotal |
N |
1 |
Integer |
|
papMetrics |
N |
1 |
Integer |
|
pdpMetrics |
N |
1 |
Integer |
|
responseCode |
N |
1 |
Object |
|
responseMessage |
N |
1 |
String |
Get Notification
Interface Definition |
Description |
---|---|
URI |
/getNotification |
Operation Type |
POST |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Response Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
metricsTotal |
N |
1 |
Integer |
|
papMetrics |
N |
1 |
Integer |
|
pdpMetrics |
N |
1 |
Integer |
|
responseCode |
N |
1 |
Object |
|
responseMessage |
N |
1 |
String |
List Configuration
Interface Definition |
Description |
---|---|
URI |
/listConfiguration |
Operation Type |
POST |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
configAttributes |
N |
1 |
Object |
|
configName |
N |
1 |
String |
|
ecompName |
N |
1 |
String |
|
policyName |
N |
1 |
String |
|
requestID |
N |
1 |
String |
|
unique |
N |
1 |
Boolean |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Import policy
Interface Definition |
Description |
---|---|
URI |
/policyEngineImport |
Operation Type |
POST |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
importParameterJson |
Y |
1 |
String |
|
file |
Y |
1 |
File |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Push Policy
Interface Definition |
Description |
---|---|
URI |
/pushPolicy |
Operation Type |
PUT |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
pdpGroup |
N |
1 |
String |
|
policyName |
N |
1 |
String |
|
policyType |
N |
1 |
String |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Send Event
Interface Definition |
Description |
---|---|
URI |
/sendEvent |
Operation Type |
POST |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
eventAttributes |
N |
1 |
Object |
|
requestID |
N |
1 |
String |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Send Heartbeat
Interface Definition |
Description |
---|---|
URI |
/sendEvent |
Operation Type |
POST |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
notificationTopic |
Y |
1 |
String |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Stop Notification
Interface Definition |
Description |
---|---|
URI |
/stopNotification |
Operation Type |
POST |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
notificationTopic |
Y |
1 |
String |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Update Dictionary
Interface Definition |
Description |
---|---|
URI |
/updateDictionaryItem |
Operation Type |
PUT |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
dictionary |
N |
1 |
String |
|
dictionaryJson |
N |
1 |
String |
|
dictionaryType |
N |
1 |
String |
|
requestID |
N |
1 |
String |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
Update Policy
Interface Definition |
Description |
---|---|
URI |
/updatePolicy |
Operation Type |
PUT |
Request Headers:
Header Name |
Qualifier |
Description |
---|---|---|
ClientAuth |
Y |
encoded client authentication details |
X-ECOMP-RequestID |
N |
Request ID to track the requests |
Environment |
Y |
execution environments |
Authorization |
Y |
Base64 encoded username:password |
Request Parameters:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
attributes |
N |
1 |
Object |
|
configBody |
N |
1 |
String |
|
configBodyType |
N |
1 |
String |
|
configName |
N |
1 |
String |
|
ecompName |
N |
1 |
String |
|
policyClass |
N |
1 |
String |
|
policyConfigType |
N |
1 |
String |
|
policyDescription |
N |
1 |
String |
|
policyName |
N |
1 |
String |
|
requestID |
N |
1 |
String |
HTTP Response Code:
HTTP CODE |
Description |
---|---|
200 |
successful |
400 |
Invalid Request |
401 |
Unauthorized |
500 |
Error |
OOF/HAS create update API
Interface Definition |
Description |
---|---|
URI |
/api/oof/v1/placement |
Operation Type |
POST |
Request Parameters:
Attribute |
Required |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestInfo |
Y |
1 |
Object |
The content of the RequestInfo object. |
placementInfo |
Y |
1 |
Object |
The Content of the PlacementInfo object. |
licenseInfo |
N |
1 |
Object |
The Content of the LicenseInfo object. |
serviceInfo |
Y |
1 |
Object |
The Content of the ServiceInfo object. |
Attribute |
Required |
Cardinality |
Content |
Description |
---|---|---|---|---|
transactionId |
Y |
1 |
String |
A unique ID to track an ONAP transaction. |
requestId |
Y |
1 |
String |
A unique ID to track multiple requests. |
callbackUrl |
Y |
1 |
String |
The end point of a callback service where recommendations are posted. |
callbackHeader |
N |
1 |
String |
The header information a client expecting in a async callback. |
sourceId |
Y |
1 |
String |
The unique ID of a client making an optimization call. |
requestType |
Y |
1 |
String |
The type of a request |
numSolutions |
N |
1 |
Integer |
Expected number of solutions. |
optimizers |
Y |
1..N |
List of Strings |
A list of optimization services. |
timeout |
N |
1 |
Integer |
A tolerance window (in secs) for expecting solutions. Default is 600 secs. |
PlacementInfo Object
Attribute |
Required |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestParameters |
C |
1 |
String |
A JSON object conaining service and customer-specific data. A client or service designer is required to specify the parameters of interest for a given service and their location in the JSON blob through optimization query policies. This attribute is only required if a request contains service or customer-specific information. |
placementDemands |
Y |
1..N |
List of PlacementDemand Object |
The resource information for a placement service. |
subscriberInfo |
N |
1 |
Object |
The information of a service subscriber. |
PlacementDemand Object
Attribute |
Required |
Cardinality |
Content |
Description |
---|---|---|---|---|
resourceModuleName |
Y |
1 |
String |
A resource name as defined in a service model. |
serviceResourceId |
Y |
1 |
String |
A unique resource Id with a local scope between client and OOF. |
tenantId |
N |
1 |
String |
A tenant Id as defined in the ordering system. |
resourceModelInfo |
Y |
1 |
Object |
Resource model information as defined in SDC. |
existingCandidates |
N |
1..N |
List of Candidates Objects |
The existing placement information of a resource. |
excludedCandidates |
N |
1..N |
List of Candidates Objects |
Candidates that need to be excluded from solutions. |
requiredCandidates |
N |
1..N |
List of Candidates Objects |
Candidates that must be included in solutions. |
SubscriberInfo Object
Attribute |
Required |
Cardinality |
Content |
Description |
---|---|---|---|---|
globalSubscriberId |
Y |
1 |
String |
An ID of a subscriber. |
subscriberName |
Y |
1.N |
String |
The name of a subscriber. If the name is not known, the value must be ‘unknown’. |
subscriberCommonSiteId |
N |
1 |
String |
Id representing a subscriber location. |
ModelMetaData Object
Attribute |
Required |
Cardinality |
Content |
Description |
---|---|---|---|---|
modelInvariantId |
Y |
1 |
String |
A model invariant Id as defined in a service model. |
modelVersionId |
Y |
1 |
String |
A unique model Id as defined in a service model. |
modelName |
N |
1 |
String |
A model name as defined in a service model. |
modelType |
N |
1 |
String |
A model type as defined in a service model. |
modelVersion |
N |
1 |
String |
A model version as defined in a service model. |
modelCustomizationName |
N |
1 |
String |
A model customization name as defined in a service model. |
Candidates Object
Attribute |
Required |
Cardinality |
Content |
Description |
---|---|---|---|---|
identifierType |
Y |
1 |
String |
The type of a candidate. |
identifiers |
Y |
1..N |
List |
A list of identifiers. |
cloudOwner |
C |
1 |
String |
The name of a cloud owner. Only required if identifierType is cloud_region_id. |
ServiceInfo Object
Attribute |
Required |
Cardinality |
Content |
Description |
---|---|---|---|---|
serviceInstanceId |
Y |
1 |
String |
A service instance id associated with a request. |
modelInfo |
Y |
1 |
ModelMetaData Object |
A list of identifiers. |
serviceName |
Y |
1 |
String |
The name of a service |
LicenseInfo Object
Attribute |
Required |
Cardinality |
Content |
Description |
---|---|---|---|---|
licenseDemands |
Y |
1..N |
List of LicenseDemands Object |
A list of resources for license selection. |
LicenseDemand Object
Attribute |
Required |
Cardinality |
Content |
Description |
---|---|---|---|---|
resourceModuleName |
Y |
1 |
String |
A resource name as defined in a service model. |
serviceResourceId |
Y |
1 |
String |
A unique resource Id with a local scope between client and OOF. |
resourceModelInfo |
Y |
1 |
ModelMetaData Object |
Resource model information as defined in a service model. |
existingLicenses |
N |
1 |
LicenseModel Object |
Existing license information assigned to a resource. |
LicenseModel Object
Attribute |
Required |
Cardinality |
Content |
Description |
---|---|---|---|---|
entitlementPoolUUID |
Y |
1..N |
List |
Entitlement pool UUIDs associated with a resource. |
licenseKeyGroupUUID |
Y |
1..N |
List |
License key groups associated with a resource. |
Response Body
Attribute |
Required |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestId |
Y |
1 |
String |
A unique Id for an ONAP transaction. |
transactionId |
Y |
1 |
String |
A unique ID to track multiple requests associated with a transaction. |
statusMessage |
N |
1 |
String |
Reasoning if a requestStatus is failed. |
requestStatus |
Y |
1 |
String |
The status of a request. |
ManagedObject3gppServiceInstances API
Create a ManagedObject3gppServiceInstances
Interface Definition |
Description |
---|---|
URI |
onap/so/infra/moi/api/rest/v1/NetworkSliceSubnet/$NSSID |
Operation Type |
PUT |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
ManagedObject3gppServiceInstances |
M |
1 |
allocateMOI |
Content of allocate3gppMOI object |
ManagedObject3gppServiceInstances Object
Attribute |
Content |
Description |
---|---|---|
attributes |
List |
List of Slice Profile Attribute |
SliceProfileList Object
Attribute |
Content |
Description |
---|---|---|
plmnInfoList |
List |
Contains plmnInfoList |
RANSliceSubnetProfile |
Object |
Contains RAN Attributes Object |
plmnInfoList Object
Attribute |
Content |
Description |
---|---|---|
plmnId |
Object |
Contains plmnData |
snssai |
Object |
Contains snssai data |
plmnId Object
Attribute |
Content |
Description |
---|---|---|
mcc |
integer |
Contains mcc value |
mnc |
integer |
Contains mcc value |
snssai Object
Attribute |
Content |
Description |
---|---|---|
sst |
string |
Contains sst |
sd |
string |
Contains sd |
RAN Attribute Object
Attribute |
Content |
Description |
---|---|---|
coverageAreaTAList |
integer |
Contains coverageAreaTAList |
latency |
integer |
desired latency of slice |
areaTrafficCapDL |
integer |
Contains areaTrafficCapDL |
resourceSharingLevel |
string |
describes slice sharing level |
serviceType |
string |
describes serviceType |
maxNumberofUEs |
integer |
describes maxNumberofUEs |
Response:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
|
---|---|---|---|---|---|
requestReferences |
M |
1 |
Response Object |
Content of Response object. |
Response Object
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestId |
M |
1 |
String |
Request Id. |
requestDetails |
M |
1 |
requestDetails Object |
Type of the request. |
instanceId |
M |
1 |
requestStatus Object |
Type of the request. |
Terminate/Deallocate a MOI
Interface Definition |
Description |
---|---|
URI |
onap/so/infra/moi/api/rest/v1/NetworkSliceSubnet/$NSSID |
Operation Type |
DELETE |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
ManagedObject3gppServiceInstances |
M |
1 |
deleteMOI |
Content of deleteMOI object |
ManagedObject3gppServiceInstances Object
Attribute |
Content |
Description |
---|---|---|
attributes |
List |
List of Slice Profile Attribute |
SliceProfileList Object
Attribute |
Content |
Description |
---|---|---|
sliceProfileId |
string |
slice profile id to be deleted |
Response
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestReferences |
M |
1 |
Response Object |
Content of Response object. |
Response Object
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestId |
M |
1 |
String |
Request Id. |
requestDetails |
M |
1 |
requestDetails Object |
Type of the request. |
instanceId |
M |
1 |
requestStatus Object |
Type of the request. |
Modify a 3GPP service instance
Interface Definition |
Description |
---|---|
URI |
onap/so/infra/moi/api/rest/v1/NetworkSliceSubnet/$NSSID |
Operation Type |
PATCH |
Content-Type |
application/json |
Request Body:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
ManagedObject3gppServiceInstances |
M |
1 |
modifyMOI |
Content of modifyMOI object |
ManagedObject3gppServiceInstances Object
Attribute |
Content |
Description |
---|---|---|
attributes |
List |
List of Slice Profile Attribute |
SliceProfileList Object
Attribute |
Content |
Description |
---|---|---|
sliceProfileId |
string |
slice profile id to be modify |
RANSliceSubnetProfile |
Object |
Contains RAN Attributes Object |
RAN Attribute Object
Attribute |
Content |
Description |
---|---|---|
coverageAreaTAList |
integer |
Contains coverageAreaTAList |
latency |
integer |
desired latency of slice |
areaTrafficCapDL |
integer |
Contains areaTrafficCapDL |
resourceSharingLevel |
string |
describes slice sharing level |
serviceType |
string |
describes serviceType |
maxNumberofUEs |
integer |
describes maxNumberofUEs |
Response:
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestReferences |
M |
1 |
Response Object |
Content of Response object. |
Response Object
Attribute |
Qualifier |
Cardinality |
Content |
Description |
---|---|---|---|---|
requestId |
M |
1 |
String |
Request Id. |
requestDetails |
M |
1 |
requestDetails Object |
Type of the request. |
instanceId |
M |
1 |
requestStatus Object |
Type of the request. |
SO Developer Information
Building SO
Build software with unit tests
cd $HOME/onap/workspace/SO/libs
$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install
cd $HOME/onap/workspace/SO/so
$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install
Build software without unit tests
cd $HOME/onap/workspace/SO/libs
$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml -DskipTests -Dmaven.test.skip=true clean install
cd $HOME/onap/workspace/SO/so
$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml -DskipTests -Dmaven.test.skip=true clean install
Build docker images
SO docker images are built using the “docker” maven profile.
During the build, the chef-repo and so-docker repositories are cloned from gerrit into the “so” directory structure. Extra definitions are required in the build environment to make this happen. You may need to adjust the definition of mso.chef.git.url.prefix to match the way you authenticate yourself when performing git clone –depth 1.
If you are behind a corporate firewall, you can specify proxy definitions for the constructed docker images.
Remove existing docker containers and images
docker stop $(docker ps -qa)
docker rm $(docker ps -aq)
docker rmi -f $(docker images -q)
Build docker images (without proxy definition):
cd $HOME/onap/workspace/SO/so/packages
$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install -P docker
-Dmso.chef.git.url.prefix=ssh://$USER@gerrit.onap.org:29418 -Dmso.chef.git.branchname=master
-Dmso.chef.git.url.suffix.chef.repo=so/chef-repo -Dmso.chef.git.url.suffix.chef.config=so/so-config
-Ddocker.buildArg.http_proxy=http://one.proxy.att.com:8080
-Ddocker.buildArg.https_proxy=http://one.proxy.att.com:8080
Build docker images (with proxy definition):
cd $HOME/onap/workspace/SO/so/packages
$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install -P docker
-Dmso.chef.git.url.prefix=ssh://$USER@gerrit.onap.org:29418 -Dmso.chef.git.branchname=master
-Dmso.chef.git.url.suffix.chef.repo=so/chef-repo -Dmso.chef.git.url.suffix.chef.config=so/so-config
-Ddocker.buildArg.http_proxy=http://proxyhost:port -Ddocker.buildArg.https_proxy=http://proxyhost:port
Build with Integration Tests
This is done exactly as described for building docker images, except that the maven profile to use is “with-integration-tests” instead of “docker”. Integration tests are executed inside docker containers constructed by the build.
Working with SO Docker
Verify that docker images are built
docker images
*Example Output:*
REPOSITORY TAG IMAGE ID CREATED SIZE
onap/so/so-monitoring 1.3.0-SNAPSHOT bb8f368a3ddb 7 seconds ago 206MB
onap/so/so-monitoring 1.3.0-SNAPSHOT-20190213T0846 bb8f368a3ddb 7 seconds ago 206MB
onap/so/so-monitoring 1.3.0-SNAPSHOT-latest bb8f368a3ddb 7 seconds ago 206MB
onap/so/so-monitoring latest bb8f368a3ddb 7 seconds ago 206MB
onap/so/api-handler-infra 1.3.0-SNAPSHOT 2573165483e9 21 seconds ago 246MB
onap/so/api-handler-infra 1.3.0-SNAPSHOT-20190213T0846 2573165483e9 21 seconds ago 246MB
onap/so/api-handler-infra 1.3.0-SNAPSHOT-latest 2573165483e9 21 seconds ago 246MB
onap/so/api-handler-infra latest 2573165483e9 21 seconds ago 246MB
onap/so/bpmn-infra 1.3.0-SNAPSHOT 8b1487665f2e 38 seconds ago 324MB
onap/so/bpmn-infra 1.3.0-SNAPSHOT-20190213T0846 8b1487665f2e 38 seconds ago 324MB
onap/so/bpmn-infra 1.3.0-SNAPSHOT-latest 8b1487665f2e 38 seconds ago 324MB
onap/so/bpmn-infra latest 8b1487665f2e 38 seconds ago 324MB
onap/so/sdc-controller 1.3.0-SNAPSHOT c663bb7d7c0d About a minute ago 241MB
onap/so/sdc-controller 1.3.0-SNAPSHOT-20190213T0846 c663bb7d7c0d About a minute ago 241MB
onap/so/sdc-controller 1.3.0-SNAPSHOT-latest c663bb7d7c0d About a minute ago 241MB
onap/so/sdc-controller latest c663bb7d7c0d About a minute ago 241MB
onap/so/vfc-adapter 1.3.0-SNAPSHOT dee0005ef18b About a minute ago 212MB
onap/so/vfc-adapter 1.3.0-SNAPSHOT-20190213T0846 dee0005ef18b About a minute ago 212MB
onap/so/vfc-adapter 1.3.0-SNAPSHOT-latest dee0005ef18b About a minute ago 212MB
onap/so/vfc-adapter latest dee0005ef18b About a minute ago 212MB
onap/so/openstack-adapter 1.3.0-SNAPSHOT fe9103aa9f36 About a minute ago 235MB
onap/so/openstack-adapter 1.3.0-SNAPSHOT-20190213T0846 fe9103aa9f36 About a minute ago 235MB
onap/so/openstack-adapter 1.3.0-SNAPSHOT-latest fe9103aa9f36 About a minute ago 235MB
onap/so/openstack-adapter latest fe9103aa9f36 About a minute ago 235MB
onap/so/sdnc-adapter 1.3.0-SNAPSHOT d02d42d92b06 2 minutes ago 231MB
onap/so/sdnc-adapter 1.3.0-SNAPSHOT-20190213T0846 d02d42d92b06 2 minutes ago 231MB
onap/so/sdnc-adapter 1.3.0-SNAPSHOT-latest d02d42d92b06 2 minutes ago 231MB
onap/so/sdnc-adapter latest d02d42d92b06 2 minutes ago 231MB
onap/so/request-db-adapter 1.3.0-SNAPSHOT 5e0136f2201b 2 minutes ago 215MB
onap/so/request-db-adapter 1.3.0-SNAPSHOT-20190213T0846 5e0136f2201b 2 minutes ago 215MB
onap/so/request-db-adapter 1.3.0-SNAPSHOT-latest 5e0136f2201b 2 minutes ago 215MB
onap/so/request-db-adapter latest 5e0136f2201b 2 minutes ago 215MB
onap/so/catalog-db-adapter 1.3.0-SNAPSHOT bf1c2fe49acb 2 minutes ago 218MB
onap/so/catalog-db-adapter 1.3.0-SNAPSHOT-20190213T0846 bf1c2fe49acb 2 minutes ago 218MB
onap/so/catalog-db-adapter 1.3.0-SNAPSHOT-latest bf1c2fe49acb 2 minutes ago 218MB
onap/so/catalog-db-adapter latest bf1c2fe49acb 2 minutes ago 218MB
onap/so/base-image 1.0 1685bba9831d 3 minutes ago 108MB
openjdk 8-jdk-alpine 792ff45a2a17 7 days ago 105MB
nexus3.onap.org:10001/openjdk 8-jdk-alpine 792ff45a2a17 7 days ago 105MB
Start the containers
cd $HOME/onap/workspace/SO/docker-config
./deploy.sh
This should also download & start the mariaDB docker.
Example Output:
Deploying with local images, not pulling them from Nexus.
docker command: local docker using unix socket
Removing network dockerconfig_default
Creating network "dockerconfig_default" with driver "bridge"
Pulling mariadb (mariadb:10.1.11)...
10.1.11: Pulling from library/mariadb
7268d8f794c4: Pull complete
a3ed95caeb02: Pull complete
e5a99361f38c: Pull complete
20b20853e29d: Pull complete
9dbc63cf121f: Pull complete
fdebb5c64c6c: Pull complete
3154860d3699: Pull complete
3cfa7ffec11c: Pull complete
943211713cac: Pull complete
d65a44f4573e: Pull complete
Digest: sha256:3821f92155bf4311a59b7ec6219b79cbf9a42c75805000a7c8fe5d9f3ad28276
Status: Downloaded newer image for mariadb:10.1.11
Creating dockerconfig_mariadb_1
Waiting for 'dockerconfig_mariadb_1' deployment to finish ...
Waiting for 'dockerconfig_mariadb_1' deployment to finish ...
Waiting for 'dockerconfig_mariadb_1' deployment to finish ...
Waiting for 'dockerconfig_mariadb_1' deployment to finish ...
Waiting for 'dockerconfig_mariadb_1' deployment to finish ...
Waiting for 'dockerconfig_mariadb_1' deployment to finish ...
dockerconfig_mariadb_1 is up-to-date
Creating dockerconfig_catalog-db-adapter_1
Creating dockerconfig_request-db-adapter_1
Creating dockerconfig_sdc-controller_1
Creating dockerconfig_vfc-adapter_1
Creating dockerconfig_openstack-adapter_1
Creating dockerconfig_sdnc-adapter_1
Creating dockerconfig_api-handler-infra_1
Creating dockerconfig_so-monitoring_1
Creating dockerconfig_bpmn-infra_1
Check containers are now up
docker ps
*Example Output:*
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
324ce4636285 onap/so/bpmn-infra "/app/wait-for.sh ..." 5 minutes ago Up 5 minutes 0.0.0.0:8081->8081/tcp dockerconfig_bpmn-infra_1
60986a742f6f onap/so/so-monitoring "/app/wait-for.sh ..." 5 minutes ago Up 5 minutes 0.0.0.0:8088->8088/tcp dockerconfig_so-monitoring_1
ea6e3e396166 onap/so/api-handler-infra "/app/wait-for.sh ..." 5 minutes ago Up 5 minutes 0.0.0.0:8080->8080/tcp dockerconfig_api-handler-infra_1
473ca2dc852c onap/so/sdnc-adapter "/app/wait-for.sh ..." 5 minutes ago Up 5 minutes 0.0.0.0:8086->8086/tcp dockerconfig_sdnc-adapter_1
7ae53b222a39 onap/so/vfc-adapter "/app/wait-for.sh ..." 5 minutes ago Up 5 minutes 0.0.0.0:8084->8084/tcp dockerconfig_vfc-adapter_1
8844999c9fc8 onap/so/openstack-adapter "/app/wait-for.sh ..." 5 minutes ago Up 5 minutes 0.0.0.0:8087->8087/tcp dockerconfig_openstack-adapter_1
d500c33665b6 onap/so/sdc-controller "/app/wait-for.sh ..." 5 minutes ago Up 5 minutes 0.0.0.0:8085->8085/tcp dockerconfig_sdc-controller_1
852483370df3 onap/so/request-db-adapter "/app/wait-for.sh ..." 5 minutes ago Up 5 minutes 0.0.0.0:8083->8083/tcp dockerconfig_request-db-adapter_1
cdfa29ee96cc onap/so/catalog-db-adapter "/app/wait-for.sh ..." 5 minutes ago Up 5 minutes 0.0.0.0:8082->8082/tcp dockerconfig_catalog-db-adapter_1
7c7116026c07 mariadb:10.1.11 "/docker-entrypoin..." 5 minutes ago Up 5 minutes 0.0.0.0:32770->3306/tcp dockerconfig_mariadb_1
Check SO health
curl http://localhost:8080/manage/health
*Example Output:*
{"status":"UP"}
Log into the mso container
docker exec -it dockerconfig_api-handler-infra_1 sh
Inspect a docker image
This command shows interesting information about the structure of the mso image. Note that an image is NOT a running container. It is the template that a container is created from.
docker inspect onap/so/api-handler-infra
Example Output:
[
{
"Id": "sha256:2573165483e9ac87826da9c08984a9d0e1d93a90c681b22d9b4f90ed579350dc",
"RepoTags": [
"onap/so/api-handler-infra:1.3.0-SNAPSHOT",
"onap/so/api-handler-infra:1.3.0-SNAPSHOT-20190213T0846",
"onap/so/api-handler-infra:1.3.0-SNAPSHOT-latest",
"onap/so/api-handler-infra:latest"
],
"RepoDigests": [],
"Parent": "sha256:66b508441811ab4ed9968f8702a0d0a697f517bbc10d8d9076e5b98ae4437344",
"Comment": "",
"Created": "2019-02-13T09:37:33.770342225Z",
"Container": "8be46c735d21935631130f9017c3747779aab26eab54a9149b1edde122f7576d",
"ContainerConfig": {
"Hostname": "ac4a12e21390",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin",
"LANG=C.UTF-8",
"JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk",
"JAVA_VERSION=8u191",
"JAVA_ALPINE_VERSION=8.191.12-r0",
"HTTP_PROXY=",
"HTTPS_PROXY=",
"http_proxy=",
"https_proxy="
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD [\"/app/start-app.sh\"]"
],
"ArgsEscaped": true,
"Image": "sha256:66b508441811ab4ed9968f8702a0d0a697f517bbc10d8d9076e5b98ae4437344",
"Volumes": {
"/app/ca-certificates": {},
"/app/config": {}
},
"WorkingDir": "/app",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"DockerVersion": "17.05.0-ce",
"Author": "",
"Config": {
"Hostname": "ac4a12e21390",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin",
"LANG=C.UTF-8",
"JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk",
"JAVA_VERSION=8u191",
"JAVA_ALPINE_VERSION=8.191.12-r0",
"HTTP_PROXY=",
"HTTPS_PROXY=",
"http_proxy=",
"https_proxy="
],
"Cmd": [
"/app/start-app.sh"
],
"ArgsEscaped": true,
"Image": "sha256:66b508441811ab4ed9968f8702a0d0a697f517bbc10d8d9076e5b98ae4437344",
"Volumes": {
"/app/ca-certificates": {},
"/app/config": {}
},
"WorkingDir": "/app",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 245926705,
"VirtualSize": 245926705,
"GraphDriver": {
"Data": null,
"Name": "aufs"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:503e53e365f34399c4d58d8f4e23c161106cfbce4400e3d0a0357967bad69390",
"sha256:744b4cd8cf79c70508aace3697b6c3b46bee2c14f1c14b6ff09fd0ba5735c6d4",
"sha256:4c6899b75fdbea2f44efe5a2f8d9f5319c1cf7e87151de0de1014aba6ce71244",
"sha256:2e076d24f6d1277456e33e58fc8adcfd69dfd9c025f61aa7b98d500e7195beb2",
"sha256:bb67f2d5f8196c22137a9e98dd4190339a65c839822d16954070eeb0b2a17aa2",
"sha256:afbbd0cc43999d5c5b0ff54dfd82365a3feb826e5c857d9b4a7cf378001cd4b3",
"sha256:1920a7ca0f8ae38a79a1339ce742aaf3d7a095922d96e37074df67cf031d5035",
"sha256:1261fbaef67c5be677dae1c0f50394587832ea9d8c7dc105df2f3db6dfb92a3a",
"sha256:a33d8ee5c18908807458ffe643184228c21d3c5d5c5df1251f0f7dfce512f7e8",
"sha256:80704fca12eddb4cc638cee105637266e04ab5706b4e285d4fc6cac990e96d63",
"sha256:55abe39073a47f29aedba790a92c351501f21b3628414fa49a073c010ee747d1",
"sha256:cc4136c2c52ad522bd492545d4dd18265676ca690aa755994adf64943b119b28",
"sha256:2163a1f989859fdb3af6e253b74094e92a0fc1ee59f5eb959971f94eb1f98094"
]
}
}
]
Working with SO Monitoring
Starting from Guilin release SO Monitoring uses https and NodePort service during communication with operator. Certificates used for communication are generated automatically using AAF and certInitializer, when SO Monitoring is deployed using OOM. For that reason, no additional tasks are needed in order to access the SO Monitoring ui, when the SO is fully deployed.
SO Monitoring contains also pre-installed certs which can be used in local development environment. They are for development purpose only!
1. Credentials to login and initial setup
Defalut credentials and certs of SO Monitoring, if you want to develop SO Monitoring out of ONAP cluster, are stored in the app. Credentials are as follows:
spring:
main:
allow-bean-definition-overriding: true
security:
usercredentials:
-
username: demo
password: '$2a$10$ndkDhATUid4a3g0JJVRv2esX4rtB.vzCn7iBhKyR1qZ/wDdvNzjTS'
role: GUI-Client
Username - demo. Password (demo123456!) is bcrypted.
This setup is overridden by the override.yaml file which is stored in the OOM project. Override.yaml file can be edited directly in case of local ONAP setup. This file is loaded into container through configmap.
Note
If you want to change config stored in override.yaml on working deployment, you have to edit k8s configmap. Due to insufficient permissions it is not possible directly in the container. After that pod have to be restarted.
kubectl -n onap edit configmap dev-so-monitoring-app-configmap

Special care needs to be given to the indentation. Spring needs to be inline with the mso already present and others added accordingly.
Warning
Attention! The default setup of the OOM makes SO Monitoring password is being automatically generated during ONAP deployment and injected through k8s secret
2. Setup, retrieve and edit default SO Monitoring password
Automatic generation of password for SO Monitoring during ONAP deployment can be overriden. In result, password can be set up manually. Such case requires to edit ONAP config file, template of which is stored in oom/kubernetes/onap/values.yaml file.

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

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

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

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

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

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

SO Admin Cockpit User Guide
Introduction
The SO-Admin-Cockpit component allows a user to have a detailed monitoring view of the Camunda BPMN workflows that have run, or are running, in SO. It provides a frontend UI that allows users to easily go through a workflow’s different calls and drill up/down through the call activities within the workflow. It also provides a search page for filtering specific results. It allows you to filter by start/end time/date, instance id, request id, service name or by the status of a workflow. The component is extremely useful for debugging and testing workflows of any kind, as it delivers an understandable and simple UI which is much easier to follow than large, cumbersome debug log files. Additionally the UI provides a statistics page, based on your current search parameters, that provides the percentages of complete, failed, in progress, pending and unlocked workflows.
(Previous to the Honolulu release of ONAP SO-Admin-Cockpit was named SO-Monitoring, an additional change in the controller is required to change the Host name to SO-Admin-Cockpit, as it remains as SO-Monitoring currently)
Using SO-Admin-Cockpit
In order to make use of SO-Admin-Cockpit currently, you will need to onboard the application in the ONAP portal or access the SO-Admin-Cockpit UI directly. This can be done using the host name “so-admin-cockpit”, and the port number, which by default is “30224”. First you need to make sure you can access the ONAP portal, this is done by adding the following to your “hosts” file:
<onapVmIp> portal.api.simpledemo.onap.org
Replacing <onapVmIp> with the IP of your device hosting your Portal pod within ONAP. Add this to a blank line in your hosts file, usually found in “C:WindowsSystem32driversetc” on Windows. Ensure you open the host file as an administrator in order to edit it.
Alternatively you can access SO-Admin-Cockpit directly by simply adding the following line to your “hosts” file:
<soAdminCockpitVmIp> so-monitoring
Where <soAdminCockpitVmIp> is replaced with the IP of the device hosting your SO-Admin-Cockpit pod. Then accessing the following link through your browser:
https://so-monitoring:30224/
Steps to add SO-Admin-Cockpit to the Portal
In Pre-Casablanca releases you will need to expose the so-monitoring service using a Loadbalancer in order to access it, this is simple until there is a NodePort assigned to SO-Monitoring. Use this command to expose the service:
kubectl expose services so-monitoring --type=LoadBalancer --port 9091 --target-port=9091 --name=so-monitoring-external -n onap
Log into your ONAP Portal as the super user
Login: demo
Password: demo123456!
Click “Application Onboarding”, then “Add App” in the top right. Fill out the required Application Details (Name, URL, REST API URL, Username, Password) as shown here:
Application Name: SO-Admin-Cockpit
Rest API URL: https://so-monitoring:30224
Username: demo
Password: <PASSWORD>
Namespace: SO-Admin-Cockpit
Please note, the <PASSWORD> can be retrieved by logging into the SO-Admin-Cockpit pod and retrieving the environment variables using the following command:
env | grep SO_COCKPIT
Now simply go to the “Application Catalog” tab on the left of the page, then tick your Monitoring app to enable it. (Whatever you set Application Name as should show up here.) Click the “Home” tab and you should be able to access the Admin Cockpit now.
Searching/Viewing BPMN Workflows

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

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

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

You can see a summary of the status of all of the workflows from one of your search results by clicking on the “Service Statistics” tab, found just above your list of results. Here you can find a percentile breakdown of each workflow’s, in the list of results you received, statuses.
Troubleshooting SO-Admin-Cockpit
The log files for SO-Admin-Cockpit can be found within the SO-Admin-Cockpit pod. They will be located in the “/app/logs/so-admin-cockpit” directory. You will find a debug, error, metric and audit log file here. They each contain differing information, except the debug log file which will contain all of the logging information. Alternatively you can get the logs from the SO-Admin-Cockpit pod itself when using Kubernetes. Using the following command:
kubectl -n <namespace> logs <soAdminCockpitPodName>
Replacing <namespace> with your environments namespace and <soAdminCockpitPodName> with the full name of your SO-Admin-Cockpit pod. This command will give you some detailed information from the execution of the pod.
CORS (Cross-Origin Resource Sharing) Error
Pre-Dublin SO-Monitoring Components may experience CORS issues.
To check for this error open up the console of the browser you are using. In Mozilla Firefox do this by pressing CTRL + SHIFT + C and then selecting the console. In Google Chrome this is done by CTRL + SHIFT + I and then selecting the console. If an exception relating to CORS is displayed, then this issue must be addressed.
This can be dealt with in two ways. Either using an extension or by disabling CORS in the browser.
If using Firefox then the CORS Everywhere extension should be used. While if using Chrome the Allow-Control-Allow-Origin should be used.
To disable the CORS in Chrome, follow this thread (https://stackoverflow.com/questions/3102819/disable-same-origin-policy-in-chrome).
Internal Service Error occurred for operation : GET please check backend service log. status code: 500

This can be checked by following the below steps:
Open the developers mode in your browser
Click on Console
Check to see if an error occurs similar to the following:
Error : No serializer found for class org.onap.so.bpmn.core.RollbackData and no properties discovered to create BeanSerializer
This issue could be associated with any one of the objects being used in the BPMN flows, when it’s declared as a java object but attempted to be serialized without marking/declaring it as serializable. So the issue must be fixed at the Object level, by ensuring any objects used by the particular BPMN Flow are made serializable.
SO Admin Cockpit App creates a Blank Tab
If when selecting SO Admin Cockpit from the portal a blank tab labeled “SO Admin Cockpit” is returned, then the issue may relate the URL you are using in portal by default.
A fix for this issue is to change “https” to “http” and change the port from “30224” to “30215”, within the browser URL.
For example, using this URL:
http://portal.api.simpledemo.onap.org:30215/ONAPPORTAL/applicationsHome
Instead of the default URL:
https://portal.api.simpledemo.onap.org:30225/ONAPPORTAL/applicationsHome
Camunda Cockpit Community Edition
On a deployed instance of SO, you can use the Camunda_Cockpit to view BPMN 2.0 workflow definitions in the deployment.
Unfortunately, the Community Edition of Camunda included with SO is not fully featured. It cannot be used to inspect running and completed process instances. For that, the Enterprise Edition is required.
Logging In
Because port 8080 on the docker host machine is forwarded to port 8080 in the SO docker container you can log into the cockpit by browsing to this URL:
http://dockerhost:8080/camunda/app/admin/default/#/login
Where dockerhost is the docker host system.
If you can use a browser on the docker host system, then use a localhost address:
The user is “admin” and the password is the same as the jboss admin password, which is not displayed here.

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

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

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

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.

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.

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

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.

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.

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

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

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

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

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

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:
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:
It reaches to the E2EServiceInstances.java file of API-Handeler infra project and Input json is mapped to the createE2EServiceInstance method
A unique request id is generated corresponding to every request and checked if request Id already exists in requestdb InfraActiveReqest table
http://request-db-adapter:8083/infraActiveRequests/requestID (GET), which will return a 404 if not exists
createInstance is set to the action variable
Running local validations on input json.
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.

CreateCommunicationService -> preProcessRequest()
Get Input Request will be logged as shown above
Get Request ID
Here ServiceInstanceId is null so serviceInstanceId is generated randomly.
Input productFamilyId is null
Now it will get the user input parameter from the request json.
CreateCommunicationService–> prepareInitOperationStatus
Generate a new operation based on serviceInstanceId and operationId
call to prepareUpdateOperationStatus() method
RequestDBUtil–> prepareUpdateOperationStatus()
This method will be called to update the operation status in the requestDB
Exit prepareUpdateOperationStatus()
Exit prepareInitOperationStatus()
Based on the bpmn structure DecomposeService class is called
This class takes input as
msoRequestId
isDebugLogEnabled
serviceInstanceId
serviceModelInfo
requestParameters
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}
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": []
}
}
CreateCommunicationService–> prepareDoComposeE2E()
To decompose the service based on serviceModelUuid
CreateCommunicationService–> parseCSParamsFromReq()
To parse the CreateCommunication parameter Request from the Request json
Now sending PUT request to AAI based on globalSubscriberId and serviceType
https://aai.onap:8443/aai/v19/business/customers/customer/{globalSubscriberId}/service-subscriptions/service- subscription/{seviceType}/service-instances/service-instance/{serviceInstanceId}
Customer can be got by GET request with https://aai.onap:8443/aai/v19/business/customers/customer/{globalSubscriberId}
Service-Subscription can be got by GET request with https://aai.onap:8443/aai/v19/business/customers/customer/{globalSubscriberId}/service-subscriptions/service- subscription/{seviceType}
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
Sending PUT request to the AAI for communication service profile
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
CreateCommunicationService–> sendSyncResponse()
Send a response to the API-Handler
Response Body:
{
"service": {
"serviceId":"8a95e3ac-32cd-4ffb-b9e3-5366b393a7a2",
"operationId":"a970a804-7ac5-4de9-b6db-17352afbc6fa"
}
}
CreateCommunicationService–> generateE2EServiceProfile()
It gets the E2E service templete Id and change communication profile to E2E service profile
Basically it generates the E2E service profile
CreateCommunicationService–> preRequestSend2NSMF()
It sets the payload to send to the other bpmn file
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.
CreateCommunicationService–> processNSMFResponse()
It processes the NSMF response code which was returned from other groovy file
CreateCommunicationService–> createCSAndSSRelationship()
It will create relationship between communication service and e2e service
CreateCommunicationService–> createRelationShipInAAI()
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
Request body:
{ “related-link”:”aai/v16/business/customers/customer/5GCustomer/service-subscriptions/service- subscription/5G/service-instances/service-instance/2e6c2d7f-85c0-4b1f-b7fd-5f2364c27ea7” }
CreateCommunicationService–> prepareUpdateOperationStatus()
prepare update operation status after create relationship in aai
RequestDBUtil–> prepareUpdateOperationStatus()
update operation status in requestDB
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

ConfigurePnfResource

Both included in CreateVcpeResCustService_simplified BPMN

Building Block based PNF PnP flows

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
AssignServiceInstanceBB
CreateNetworkCollectionBB
AssignNetworkBB
AssignVnfBB
AssignVolumeGroupBB
AssignVfModuleBB
AssignPnfBB
WaitForPnfReadyBB
ControllerExecutionBB (action: configAssign, scope: pnf)
ControllerExecutionBB (action: configDeploy, scope: pnf)
ActivatePnfBB
ConfigAssignVnfBB
CreateNetworkBB
ActivateNetworkBB
CreateVolumeGroupBB
ActivateVolumeGroupBB
CreateVfModuleBB
ActivateVfModuleBB
ConfigDeployVnfBB
ActivateVnfBB
ActivateNetworkCollectionBB
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.
Configurations:-
Every component has its own over-ride yaml file. We can over-ride the file according the Configurations and Dependencies required for Deploying.
Over-ride yaml for api-handler
Path:- /docker-config/volumes/so/config/api-handler-infra/onapheat/override.yaml
server:
port: 8080
tomcat:
max-threads: 50
ssl-enable: false
mso:
msoKey: 07a7159d3bf51a0e53be7a8f89699be7
logPath: logs
site-name: onapheat
adapters:
requestDb:
endpoint: http://request-db-adapter:8083
auth: Basic YnBlbDpwYXNzd29yZDEk
catalog:
db:
spring:
endpoint: http://catalog-db-adapter:8082
db:
auth: Basic YnBlbDpwYXNzd29yZDEk
config:
path: /src/main/resources/
infra:
default:
alacarte:
orchestrationUri: /mso/async/services/ALaCarteOrchestrator
recipeTimeout: 180
testApi: VNF_API
service:
macro:
default:
testApi: GR_API
camundaURL: http://bpmn-infra:8081
camundaAuth: AE2E9BE6EF9249085AF98689C4EE087736A5500629A72F35068FFB88813A023581DD6E765071F1C04075B36EA4213A
async:
core-pool-size: 50
max-pool-size: 50
queue-capacity: 500
sdc:
client:
auth: F3473596C526938329DF877495B494DC374D1C4198ED3AD305EA3ADCBBDA1862
activate:
instanceid: test
userid: cs0008
endpoint: http://c1.vm1.mso.simpledemo.onap.org:28090
tenant:
isolation:
retry:
count: 3
aai:
endpoint: https://aai.api.simpledemo.onap.org:8443
auth: 2630606608347B7124C244AB0FE34F6F
extApi:
endpoint: http://nbi.onap:8080/nbi/api/v3
so:
operational-environment:
dmaap:
username: testuser
password: VjR5NDcxSzA=
host: http://c1.vm1.mso.simpledemo.onap.org:28090
auth: 51EA5414022D7BE536E7516C4D1A6361416921849B72C0D6FC1C7F262FD9F2BBC2AD124190A332D9845A188AD80955567A4F975C84C221EEA8243BFD92FFE6896CDD1EA16ADD34E1E3D47D4A
publisher:
topic: com.att.ecomp.mso.operationalEnvironmentEvent
spring:
datasource:
hikari:
jdbcUrl: jdbc:mariadb://mariadb:3306/catalogdb
username: cataloguser
password: catalog123
driver-class-name: org.mariadb.jdbc.Driver
pool-name: catdb-pool
registerMbeans: true
jpa:
show-sql: true
hibernate:
dialect: org.hibernate.dialect.MySQL5Dialect
ddl-auto: validate
naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
enable-lazy-load-no-trans: true
jersey:
type: filter
security:
usercredentials:
-
username: sitecontrol
password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
role: SiteControl-Client
-
username: gui
password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
role: GUI-Client
-
username: infraportal
password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
role: InfraPortal-Client
-
username: InfraPortalClient
password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
role: InfraPortal-Client
-
username: bpel
password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
role: BPEL-Client
-
username: mso_admin
password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke'
role: ACTUATOR
request:
datasource:
hikari:
jdbcUrl: jdbc:mariadb://mariadb:3306/requestdb
username: requestuser
password: request123
driver-class-name: org.mariadb.jdbc.Driver
pool-name: reqdb-pool
registerMbeans: true
org:
onap:
so:
cloud-owner: CloudOwner
adapters:
network:
encryptionKey: 07a7159d3bf51a0e53be7a8f89699be7
Start the container
cd /home/root1/docker-config/
CMD:- ===
sudo docker-compose up -d
Example Output:
root1@slave-node:~/docker-config$ sudo docker-compose up -d docker-config_mariadb_1 is up-to-date Starting docker-config_catalog-db-adapter_1 … done Starting docker-config_request-db-adapter_1 … done Starting docker-config_bpmn-infra_1 … done Starting docker-config_vfc-adapter_1 … done Starting docker-config_sdc-controller_1 … done Starting docker-config_sdnc-adapter_1 … done Starting docker-config_openstack-adapter_1 … done Starting docker-config_api-handler-infra_1 … done Starting docker-config_so-monitoring_1 … done Starting docker-config_nssmf-adapter_1 … done
Example Output:
docker ps
Example Output:
root1@slave-node:~/docker-config$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d930caf28508 nexus3.onap.org:10001/onap/so/openstack-adapter “/app/wait-for.sh -q…” 5 weeks ago Up 30 seconds 0.0.0.0:8087->8087/tcp docker-config_openstack-adapter_1 599af283319e nexus3.onap.org:10001/onap/so/vfc-adapter “/app/wait-for.sh -q…” 5 weeks ago Up 30 seconds 0.0.0.0:8084->8084/tcp docker-config_vfc-adapter_1 5549305c8dd6 nexus3.onap.org:10001/onap/so/api-handler-infra “/app/wait-for.sh -q…” 5 weeks ago Up 27 seconds 0.0.0.0:8080->8080/tcp docker-config_api-handler-infra_1 59d3aa684ecb nexus3.onap.org:10001/onap/so/sdnc-adapter “/app/wait-for.sh -q…” 5 weeks ago Up 29 seconds 0.0.0.0:8086->8086/tcp docker-config_sdnc-adapter_1 ade4cef97bd3 nexus3.onap.org:10001/onap/so/bpmn-infra “/app/wait-for.sh -q…” 5 weeks ago Up 29 seconds 0.0.0.0:8081->8081/tcp docker-config_bpmn-infra_1 e9558560c4d7 nexus3.onap.org:10001/onap/so/sdc-controller “/app/wait-for.sh -q…” 5 weeks ago Up 25 seconds 0.0.0.0:8085->8085/tcp docker-config_sdc-controller_1 ae27ec2f8b04 nexus3.onap.org:10001/onap/so/so-monitoring “/app/wait-for.sh -q…” 5 weeks ago Up 26 seconds 0.0.0.0:8088->8088/tcp docker-config_so-monitoring_1 8d2c64d48f1a nexus3.onap.org:10001/onap/so/request-db-adapter “/app/wait-for.sh -q…” 5 weeks ago Up 32 seconds 0.0.0.0:8083->8083/tcp docker-config_request-db-adapter_1 a126dd29c540 nexus3.onap.org:10001/mariadb:10.1.11 “/docker-entrypoint.…” 5 weeks ago Up 17 minutes 0.0.0.0:32768->3306/tcp docker-config_mariadb_1
Inspect a docker image
This command shows interesting information about the structure of the mso image. Note that an image is NOT a running container. It is the template that a container is created from.
CMD:-
sudo docker inspect onap/so/api-handler-infra
Example Output:
[
{
"Id": "sha256:2573165483e9ac87826da9c08984a9d0e1d93a90c681b22d9b4f90ed579350dc",
"RepoTags": [
"onap/so/api-handler-infra:1.3.0-SNAPSHOT",
"onap/so/api-handler-infra:1.3.0-SNAPSHOT-20190213T0846",
"onap/so/api-handler-infra:1.3.0-SNAPSHOT-latest",
"onap/so/api-handler-infra:latest"
],
"RepoDigests": [],
"Parent": "sha256:66b508441811ab4ed9968f8702a0d0a697f517bbc10d8d9076e5b98ae4437344",
"Comment": "",
"Created": "2019-02-13T09:37:33.770342225Z",
"Container": "8be46c735d21935631130f9017c3747779aab26eab54a9149b1edde122f7576d",
"ContainerConfig": {
"Hostname": "ac4a12e21390",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin",
"LANG=C.UTF-8",
"JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk",
"JAVA_VERSION=8u191",
"JAVA_ALPINE_VERSION=8.191.12-r0",
"HTTP_PROXY=",
"HTTPS_PROXY=",
"http_proxy=",
"https_proxy="
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD [\"/app/start-app.sh\"]"
],
"ArgsEscaped": true,
"Image": "sha256:66b508441811ab4ed9968f8702a0d0a697f517bbc10d8d9076e5b98ae4437344",
"Volumes": {
"/app/ca-certificates": {},
"/app/config": {}
},
"WorkingDir": "/app",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"DockerVersion": "17.05.0-ce",
"Author": "",
"Config": {
"Hostname": "ac4a12e21390",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin",
"LANG=C.UTF-8",
"JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk",
"JAVA_VERSION=8u191",
"JAVA_ALPINE_VERSION=8.191.12-r0",
"HTTP_PROXY=",
"HTTPS_PROXY=",
"http_proxy=",
"https_proxy="
],
"Cmd": [
"/app/start-app.sh"
],
"ArgsEscaped": true,
"Image": "sha256:66b508441811ab4ed9968f8702a0d0a697f517bbc10d8d9076e5b98ae4437344",
"Volumes": {
"/app/ca-certificates": {},
"/app/config": {}
},
"WorkingDir": "/app",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 245926705,
"VirtualSize": 245926705,
"GraphDriver": {
"Data": null,
"Name": "aufs"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:503e53e365f34399c4d58d8f4e23c161106cfbce4400e3d0a0357967bad69390",
"sha256:744b4cd8cf79c70508aace3697b6c3b46bee2c14f1c14b6ff09fd0ba5735c6d4",
"sha256:4c6899b75fdbea2f44efe5a2f8d9f5319c1cf7e87151de0de1014aba6ce71244",
"sha256:2e076d24f6d1277456e33e58fc8adcfd69dfd9c025f61aa7b98d500e7195beb2",
"sha256:bb67f2d5f8196c22137a9e98dd4190339a65c839822d16954070eeb0b2a17aa2",
"sha256:afbbd0cc43999d5c5b0ff54dfd82365a3feb826e5c857d9b4a7cf378001cd4b3",
"sha256:1920a7ca0f8ae38a79a1339ce742aaf3d7a095922d96e37074df67cf031d5035",
"sha256:1261fbaef67c5be677dae1c0f50394587832ea9d8c7dc105df2f3db6dfb92a3a",
"sha256:a33d8ee5c18908807458ffe643184228c21d3c5d5c5df1251f0f7dfce512f7e8",
"sha256:80704fca12eddb4cc638cee105637266e04ab5706b4e285d4fc6cac990e96d63",
"sha256:55abe39073a47f29aedba790a92c351501f21b3628414fa49a073c010ee747d1",
"sha256:cc4136c2c52ad522bd492545d4dd18265676ca690aa755994adf64943b119b28",
"sha256:2163a1f989859fdb3af6e253b74094e92a0fc1ee59f5eb959971f94eb1f98094"
]
}
}
]
Mso-adapters-rest-interface

It mainly contains the payload that is provided to different rest calls in SO
Network
# 1. Network contain beans( classes with multiple attributes and thier setters and getters) and their corresponding mappers which will be used by the network adapter of SO. Contrail networking is used for cloud network automation
Beans
- # a. ContrailPolicyRefthis class has following attribute
private ContrailPolicyRefSeq seq;
Usage: adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java- while creating network in openstack, network stack is created depending on stackParams. So if pFqdns(FQDN address object is used in order to use DNS names in firewall policies) are there in the inputrequest to createNetwork, then mergePolicyRefs method is called, where for each input pFqdns, a new ContrailPolicyRef is created and appended to a list. Then this is added as value to stackParams with policy_refsdata as key.
- # b. ContrailPolicyRefSeqAttributes are
private String major;
private String minor ;
Usage: adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java- As this is an attribute to the ContrailPolicyRef explained above. So when a new ContrailPolicyRef() is created in mergePolicyRefs method, correspondingly a new ContrailPolicyRefSeq should be created.
- # c. ContrailSubnet – Its a subnetwork having attributes
private ContrailSubnetIp subnet = new ContrailSubnetIp();
private String defaultGateway;
private String subnetName;
private Boolean enableDhcp(dynamic host config);
private Boolean addrFromStart = true;
private List<ContrailSubnetPool> allocationPools = new ArrayList<>();
private ContrailSubnetHostRoutes hostRoutes = new ContrailSubnetHostRoutes();
Usage : adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java- While creating network mergeSubnetsAIC3 is called if a list of subnets are present. The subnets are mapped to ContrailSubnet using ContrailSubnetMapper, and then are added to the heat template and stackparams which are used for network creation in openstack.
- # d. ContrailSubnetHostRouteThis is an attribute defined in contrailsubnet and has following attributes
private String prefix;
private String nextHop;
Usage : This is an attribute of ContrailSubnetHostRoutes , which is used within the contrailSubnet and thus is used in network creation and updation.
# e. ContrailSubnetHostRoutes : This class is used to store an list of ContrailSubnetHostRoute
private List<ContrailSubnetHostRoute> hostRoutes = new ArrayList<>();
Usage : attribute of contrailSubnet
- # f. ContrailSubnetIpattributes are
private String ipPrefix;
private String ipPrefixLen;
This class is used to store the cidr value , which is used as a interrouting table, taking as ipaddress/total no . Eg : 10.0.0.0/24 means starting ip is 10.0.0.0, and total no of ip address possible here is 256 (2^(32-24)), the last address being 10.0.0.255.
Usage : important attribute of contrailSubnet
- # g. ContrailSubnetPoolattributes are starting and ending ip address of the subnet
private String start;
private String end;
Usage: a list of ContrailSubnetPool forms an important attribute of contrailSubnet
Mappers
- # a. ContrailSubnetMapperIt is used to map the inputsubnet to a contrailSubnet
- public ContrailSubnetMapper(Subnet inputSubnet) {
this.inputSubnet = inputSubnet;
}
The map method within is used for the mapping. Here first a contrailSubnet is created, and depending on whether the subnet has name or id, the contrailSubnet’s name is initialized, then if it has cidr , then a contrailSubnetIp is created, and is added into it, which is then added to contrailSubnet created before. Depending on whether input has allocationpool or hostroutes, these are casted into ContrailSubnetPool and ContrailSubnetHostRoute using ContrailSubnetPoolMapper and ContrailSubnetPoolMapper respectively.
Usage: adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java :The subnets are mapped to ContrailSubnet using ContrailSubnetMapper, and then are added to the heat template and stackparams which are used for network creation
# b. ContrailSubnetPoolMapper : It is used to map the pool within the subnets to contrailSubnetPool. Used within contrailSubnetMapper. Here, the particular pool is added only if it has both the start and end ip address.
# c. ContrailSubnetHostRoute : It is used to map the host routes within the subnets to contrailSubnetHostRoute. Used within contrailSubnetMapper. Here, the particular host route is added if either of the next hop or ip prefix is defined.
Network request
#2. Network request : It contains the payloads for different types of network requests
- # a. ContrailNetwork :
private String shared = “false”;
private String external = “false”;
private List<RouteTarget> routeTargets;
private List<String> policyFqdns;
private List<String> routeTableFqdns;
Usage: contrailNetwork is an important attribute of CreateNetworkRequest, So is to be used where all the request to createNetwork is required.
# 1. adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/StackService.java : Here the input to createNetwork requires contrailNetwork parameter, so here it checks whether contrailNetwork is already present, if not a new is created.
# 2.bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapper.java : Here in createNetworkRequestMapper, createNetworkRequest is formed where in buildContrailNetwork, a new contrailNetwork is created and initialized. This request is used to create a network and set the corresponding execution variable
# b. CreateNetworkError: It extends NetworkExceptionResponse. And is used when an error occurs during network creation
- # c. NetworkExceptionResponseit extends NetworkResponseCommon. Attributes are
private String message;
private MsoExceptionCategory category;
private Boolean rolledBack;
- # d. NetworkResponseCommon: Attribute is
private String messageId;
- # e. CreateNetworkRequest: extends NetworkRequestCommon
private String cloudSiteId;
private String tenantId;
private String networkId;
private String networkName;
private String networkType;
private String networkTypeVersion;
private String modelCustomizationUuid;
private String networkTechnology = “NEUTRON”;
private List<Subnet> subnets;
private ProviderVlanNetwork providerVlanNetwork;
private ContrailNetwork contrailNetwork;
private Boolean failIfExists = false;
private Boolean backout = true;
private Map<String, String> networkParams = new HashMap<>();
private MsoRequest msoRequest = new MsoRequest();
private boolean contrailRequest;
Usage : #1) bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIQueryTasks.java: Here in getNetworkVpnBinding, where VPN Binding data from AAI result is extracted. There in routeTargets is got, and is updated in the execution variable(“createNetworkRequest”).
#2)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterCreateTasks.java – Here in createnetwork returns a CreateNetworkRequest which is updated in execution variable(“networkAdapterRequest”)
#3)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/flowspecific/tasks/CreateNetwork.java - Here in createnetwork returns a CreateNetworkRequest which is updated in execution variable(“createNetworkRequest”)
#4) bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/NetworkAdapterClientImpl.java -Here createNetwork request is processed as a restclient post process with CreateNetworkRequest as input.
- # f. CreateNetworkResponseextends NetworkResponseCommon
private String networkId;
private String neutronNetworkId;
private String networkStackId;
private String networkFqdn;
private Boolean networkCreated;
private Map<String, String> subnetMap;
private NetworkRollback rollback = new NetworkRollback();
Usage: #1)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java :here after the network is created, the l3 network is updated with those parameters which come from execution variable(“createNetworkResponse”)
#2)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterCreateTasks.java – depending on variable networkCreated of response, networkAdapterCreateRollback is set to true.
#3)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/NetworkAdapterClientImpl.java -Here createNetwork request is processed as a restclient post process with CreateNetworkRequest as input and CreateNetworkResponse as output
# g.DeleteNetworkError : extends NetworkExceptionResponse
- # h. DeleteNetworkRequest:extends NetworkRequestCommon
private String cloudSiteId;
private String tenantId;
private String networkId;
private String networkStackId;
private String networkType;
private String modelCustomizationUuid;
private MsoRequest msoRequest = new MsoRequest();
Usage: #1)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/network/tasks/NetworkAdapterDeleteTasks.java – deleteNetworkRequestMapper returns a DeleteNetworkRequest, which is set to the execution variable(“networkAdapterRequest”)
#2)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/NetworkAdapterClientImpl.java - Here deleteNetwork request is processed as a restclient delete process with DeleteNetworkRequest as input.
#3)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapper.java – Here the deleteNetworkRequestMapper forms DeleteNetworkRequest object
Similarly others are also implemented and used

Sdnc request
#3. Sdnc request -These are required by the mso-sdnc-adapter
# a. RequestInformation – This is an important parameter of SDNCServiceRequest. Thud is used during the conversion of SDNCServiceRequest to XMLstring.
# b. ServiceInformation – This stores the important information like serviceId, servicetype and SubscriberName. Its parameter of SDNCServiceRequest.
# c. SDNCErrorCommon – it extends SDNCResponseCommon .
Usage : adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/sdncrest/SDNCServiceRequestConnector.java – catching exception if any happens during request creation and a new SDNCErrorCommon is created.
# d. SDNCRequestCommon – SDNCServiceRequest extends SDNCRequestCommon. It has some attributes like bpNotificationUrl(Endpoint on which BPMN can receive notifications from the SDNC adapter), bpTimeout ans sdncrequestId.
- # e. SDNCServiceRequest
Usage: adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/sdncrest/SDNCServiceRequestTask.java – Here the runRequest is happening, where we are posting this request using a restclient call with SDNCServiceRequest as input.
- # f. SDNCServiceResponse and SDNCServiceError
Usage:adapters/mso-sdnc-adapter/src/main/java/org/onap/so/adapters/sdnc/sdncrest/SDNCServiceRequestTask.java – Here if the above runRequest returns a 2xx response code then a corresponding SDNCServiceResponse is created and returned or else SDNCServiceError is created and returned
Tenant request
#4. These provide classes to be used by the so-adapters.tenant.
The operator of a cloud can present unchangeable networks to the users, or give users the option to create, delete, connect and generally manipulate networks. The latter type of networks is called “tenant networks”.
Used in adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tenant/TenantAdapterRest.java
The implementation and usage is similiar to the above classes

VDU
#5. Vdu – these are used for the deployment and management of (cloud-agnostic) VDU . The abstract classes for instantiation of vdu, query vdu, delete vdu, update vdu are defined in here.
These are implemented in adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/utils/MsoCloudifyUtils.java and adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatUtils.java
Vnfrest
#6. Vnfrest – These are used to manage vnfs and vgs. These are used in the project similiar to networkrest Foreg : Usage of DeleteVfModuleRequest:
1)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterDeleteTasks.java – Here in deleteVfModuleRequestMapper creates a new DeleteVfModuleRequest, and is set to the execution variable(“VNFREST_REQUEST” ) and “deleteVfModuleRequest” execution variable is set true
2)bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/VnfAdapterClientImpl.java - Here a delete rest request is send

OPENSTACK
Openstack is classified into beans, exceptions, and mappers
MAPPERS
# 1) JAXBContext: It is used to convert a object to xml(marshalling) and to convert xml to object (unmarshalling) . These marshalling and unmarshalling are overriden in the map adapters in mappers.
- # 2)NetworkInfoMapper – used to Capture the data from a Neutron Network object and cast it into a networkInfo( present in beans of openstack). Here in vlan information is located depending on network.getProviderNetworkType() , and if not then the segments within the network is iterated and is checked for the same.
Usage: It is used in adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoNeutronUtils.java , where on createNetwork, queryNetwork and updateNetwork , the network is mapped by NetworkInfoMapper into networkInfo and returned.
- # 3) StackInfoMapper – used to Capture the data from a Stack object and cast it into a stackInfo( present in beans of openstack).
Usage: It is used in adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils , where all createStack, queryStack, updateStack, deleteStack is done, a new instance of stackInfo is returned
Exceptions
These are set of msoexceptions provided, and would be used depending on what exception needs to be handled

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:

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:

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:

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:

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:

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:

Code Flow:
From external task getting openstackAdapterTaskRequest and adding to string(xmlRequest).
From xmlrequest we are getting requestType.
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.
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.
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.
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.
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.
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.
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.
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:

Code Flow:
Get openstackAdapterTaskRequest as xmlRequest from the the external task.
Get requestType from the xmlRequest.
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.
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.
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.
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.
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.
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.
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:

Code Flow:
Get openstackAdapterTaskRequest as xmlRequest from the the external task.
Get requestType from the xmlRequest.
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.
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.
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{"yyyy-MM-dd’T’HH:mm:ss.SSSXXX", UTC}”/>
<property name=”p_lvl” value=”%level”/>
<property name=”p_log” value=”%logger”/>
<property name=”p_mdc” value=”%replace(%replace(%mdc){’t’,’\\t’}){’n’, ‘\\n’}”/>
<property name=”p_msg” value=”%replace(%replace(%msg){’t’, ‘\\t’}){’n’,’\\n’}”/>
<property name=”p_exc” value=”%replace(%replace(%rootException){’t’, ‘\\t’}){’n’,’\\n’}”/>
<property name=”p_mak” value=”%replace(%replace(%marker){’t’, ‘\\t’}){’n’,’\\n’}”/>
<property name=”p_thr” value=”%thread”/>
<property name=”pattern” value=”%nopexception${p_tim}t${p_thr}t${p_lvl}t${p_log}t${p_mdc}t${p_msg}t${p_exc}t${p_mak}t%n”/>
<appender name=”STDOUT” class=”ch.qos.logback.core.ConsoleAppender”>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
- <appender name=”test”
class=”org.onap.so.utils.TestAppender” />
<logger name=”com.att.ecomp.audit” level=”info” additivity=”false”>
<appender-ref ref=”STDOUT” />
</logger>
<logger name=”com.att.eelf.metrics” level=”info” additivity=”false”>
<appender-ref ref=”STDOUT” />
</logger>
<logger name=”com.att.eelf.error” level=”WARN” additivity=”false”>
<appender-ref ref=”STDOUT” />
</logger>
- <logger name=”org.onap” level=”${so.log.level:-DEBUG}” additivity=”false”>
<appender-ref ref=”STDOUT” />
<appender-ref ref=”test” />
</logger>
<logger name=”org.flywaydb” level=”DEBUG” additivity=”false”> <appender-ref ref=”STDOUT” />
</logger>
- <logger name=”ch.vorburger” level=”WARN” additivity=”false”>
<appender-ref ref=”STDOUT” />
</logger>
- <root level=”WARN”>
<appender-ref ref=”STDOUT” /> <appender-ref ref=”test” />
</root>
</configuration>
Instantiate
The following guides are provided to describe tasks that a user of ONAP may need to perform when instantiating a service.
Instantiation includes the following topics:
Pre Service instantiation Operations
Several operations need to be performed after Service model distribution, but before instantiating a service.
Those operations are only available via REST API requests.
Various tools can be used to send REST API requests.
Here after are examples using “curl” command line tool that you can use in a Unix Terminal.
Declare owningEntity, lineOfBusiness, Platform and Project
At one point during Service Instantiation, the user need to select values for those 4 parameters
Owning Entity
Line Of Business
Platform
Project
Those parameters and values must be pre-declared in ONAP VID component using REST API
Those informations will be available to all service instantiation (you only need to declare them once in ONAP)
Example for “Owning Entity” named “Test”
curl -X POST \
http://vid.api.simpledemo.onap.org:30238/vid/maintenance/category_parameter/owningEntity \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache' \
-d '{
"options": ["Test"]
}'
Example for “platform” named “Test_Platform”
curl -X POST \
http://vid.api.simpledemo.onap.org:30238/vid/maintenance/category_parameter/platform \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache' \
-d '{
"options": [""Test_Platform"]
}'
Example for “line of business” named “Test_LOB”
curl -X POST \
http://vid.api.simpledemo.onap.org:30238/vid/maintenance/category_parameter/lineOfBusiness \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache' \
-d '{
"options": ["Test_LOB"]
}'
Example for “project” named “Test_project”
curl -X POST \
http://vid.api.simpledemo.onap.org:30238/vid/maintenance/category_parameter/project \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache' \
-d '{
"options": ["Test_project"]
}'
Declare a customer
Each time you have a new customer, you will need to perform those operations
This operation is using ONAP AAI REST API
Any service instance need to be linked to a customer
in the query path, you put the customer_name
in the query body you put the customer name again
Here after an example to declare a customer named “my_customer_name”
curl -X PUT \
https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/business/customers/customer/my_customer_name \
-H 'Accept: application/json' \
-H 'Authorization: Basic QUFJOkFBSQ==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: 808b54e3-e563-4144-a1b9-e24e2ed93d4f' \
-H 'cache-control: no-cache' \
-d '{
"global-customer-id": "my_customer_name",
"subscriber-name": "my_customer_name",
"subscriber-type": "INFRA"
}' -k
check customers in ONAP AAI (you should see if everything ok in the response)
curl -X GET \
https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/business/customers \
-H 'Accept: application/json' \
-H 'Authorization: Basic QUFJOkFBSQ==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: 808b54e3-e563-4144-a1b9-e24e2ed93d4f' \
-H 'cache-control: no-cache' -k
Associate Service Model to Customer
This operation is using ONAP AAI REST API
in the query path, you put the customer_name and the service model name
in the query body you put the service model UUID
curl -X PUT \
https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/business/customers/customer/my_customer_name/service-subscriptions/service-subscription/my_service_model_name \
-H 'Accept: application/json' \
-H 'Authorization: Basic QUFJOkFBSQ==' \
-H 'Content-Type: application/json' \
-H 'Postman-Token: d4bc4991-a518-4d75-8a87-674ba44bf13a' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: 808b54e3-e563-4144-a1b9-e24e2ed93d4f' \
-H 'cache-control: no-cache' \
-d '{
"service-id": "11265d8c-2cc2-40e5-95d8-57cad81c18da"
}' -k
Associate Cloud Site to Customer
in the query path, you put the customer_name and the service model name
in the query body you put the cloud owner name, the cloud site name, the tenant id and the tenant name
curl -X PUT \
https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/business/customers/customer/my_customer_name/service-subscriptions/service-subscription/my_service_model_name/relationship-list/relationship \
-H 'Accept: application/json' \
-H 'Authorization: Basic QUFJOkFBSQ==' \
-H 'Content-Type: application/json' \
-H 'Postman-Token: 11ea9a9e-0dc8-4d20-8a78-c75cd6928916' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: 808b54e3-e563-4144-a1b9-e24e2ed93d4f' \
-H 'cache-control: no-cache' \
-d '{
"related-to": "tenant",
"related-link": "/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/my_cloud_owner_name/my_cloud_site_name/tenants/tenant/234a9a2dc4b643be9812915b214cdbbb",
"relationship-data": [
{
"relationship-key": "cloud-region.cloud-owner",
"relationship-value": "my_cloud_owner_name"
},
{
"relationship-key": "cloud-region.cloud-region-id",
"relationship-value": "my_cloud_site_name"
},
{
"relationship-key": "tenant.tenant-id",
"relationship-value": "234a9a2dc4b643be9812915b214cdbbb"
}
],
"related-to-property": [
{
"property-key": "tenant.tenant-name",
"property-value": "my_tenant_name"
}
]
}' -k
check (you should see if everything ok in the response)
curl -X GET \
'https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/business/customers/customer/my_customer_name/service-subscriptions?depth=all' \
-H 'Accept: application/json' \
-H 'Authorization: Basic QUFJOkFBSQ==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: 808b54e3-e563-4144-a1b9-e24e2ed93d4f' \
-H 'cache-control: no-cache' -k
Service Instantiation methods
Declare PNF instances:
Declare PNF instances in ONAP
PNF instances can be declared in ONAP inventory (AAI) using REST API
An example:
curl -X PUT \
https://{{ONAP_LB_IP@}}:30233/aai/v16/network/pnfs/pnf/my_pnf_instance_001 \
-H 'Accept: application/json' \
-H 'Authorization: Basic QUFJOkFBSQ==' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-H 'Postman-Token: f5e2aae0-dc1c-4edb-b9e9-a93b05aee5e8' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: 999' \
-H 'depth: all' \
-d '{
"pnf-name":" my_pnf_instance_001",
"equip-type":" router",
"nf-role":"primary",
"p-interfaces": {
"p-interface": [
{
"interface-name": "ae1",
"port-description": "Link aggregate for trunk between switches"
},
{
"interface-name": "xe-0/0/6",
"port-description": "to PNF_instance_002 trunk1"
},
{
"interface-name": "xe-0/0/2",
"port-description": "to PNF_instance_003 trunk1"
},
{
"interface-name": "xe-0/0/10",
"port-description": "to PNF_instance_004 trunk1"
},
{
"interface-name": "xe-0/0/0",
"port-description": "firewall trunk"
},
{
"interface-name": "xe-0/0/14",
"port-description": "to PNF_instance_005 trunk1"
}
]
}
}' -k
It is possible to declare the location where is deployed the PNF (called a “complex” in ONAP AAI)
curl -X PUT \
https:// {{ONAP_LB_IP@}}:30233/aai/v11/cloud-infrastructure/complexes/complex/my_complex_name \
-H 'Accept: application/json' \
-H 'Authorization: Basic QUFJOkFBSQ==' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-H 'Postman-Token: 43523984-db01-449a-8a58-8888871110bc' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: 999' \
-H 'depth: all' \
-d '{
"physical-location-type":"PoP",
"physical-location-id":"my_complex_name",
"complex-name":"Name of my Complex",
"city":"LANNION",
"postal-code":"22300",
"country":"FRANCE",
"street1":"Avenue Pierre Marzin",
"region":"Europe"
}' -k
To indicate that a PNF instance is located in a complex, we create a relation
curl -X PUT \
https:// {{ONAP_LB_IP@}}:30233/aai/v14/network/pnfs/pnf/my_pnf_instance_001/relationship-list/relationship \
-H 'Accept: application/json' \
-H 'Authorization: Basic QUFJOkFBSQ==' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-H 'Postman-Token: 15315304-17c5-4e64-aada-bb149f1af915' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: 999' \
-H 'depth: all' \
-d '{
"related-to": "complex",
"related-link": "/aai/v11/cloud-infrastructure/complexes/complex/my_complex_name"
}' -k
Instantiate a Service:
e2eServiceInstance mode via ONAP UUI Portal
UUI documentation, see UUI for details.
Service Instantiation via ONAP NBI API (TM Forum)
ONAP NBI allow you to use a TM Forum standardized API (serviceOrder API)
Additional info NBI Guide
ONAP NBI will convert that request to ONAP SO request.
ServiceOrder management in NBI will support 2 modes:
E2E integration - NBI calls SO API to perform an End-To-end integration
Service-level only integration - NBI will trigger only SO request at serviceInstance level (not at VNF, not at Vf-module level and nothing will be created on cloud platform)
ONAP SO prerequisite: SO must be able to find a BPMN to process service fulfillment (integrate VNF, VNF activation in SDNC, VF module)
The choice of the mode is done by NBI depending on information retrieved in SDC. If the serviceSpecification is within a Category “E2E Service” , NBI will use E2E SO API, if not only API at service instance level will be used.
There is no difference or specific expectation in the service order API used by NBI user.
Example of serviceOrder to instantiate (=add) a service based on model with id=0d463b0c-e559-4def-8d7b-df64cfbd3159
curl -X POST \
http://nbi.api.simpledemo.onap.org:30274/nbi/api/v4/serviceOrder \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache' \
-d '{
"externalId": "BSS_order_001",
"priority": "1",
"description": "this is a service order to instantiate a service",
"category": "Consumer",
"requestedStartDate": "",
"requestedCompletionDate": "",
"relatedParty": [
{
"id": "JohnDoe",
"role": "ONAPcustomer",
"name": "JohnDoe"
}
],
"orderItem": [
{
"id": "1",
"action": "add",
"service": {
"name": "my_service_model_instance_01",
"serviceState": "active",
"serviceSpecification": {
"id": "0d463b0c-e559-4def-8d7b-df64cfbd3159"
}
}
}
]
}'
In the response, you will obtain the serviceOrderId value.
Then you have the possibility to check about the serviceorder (here after the serviceOrderId=5d06309da0e46400017b1123).
This will allow you to get the serviceOrder Status (completed, failed…)
curl -X GET \
http://nbi.api.simpledemo.onap.org:30274/nbi/api/v4/serviceOrder/5d06309da0e46400017b1123 \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache'
A La Carte mode Service Instantiation via ONAP SO API
Using ONAP SO API in “A La Carte” mode, you need to send several requests, depending on the service model composition.
For example, if your service model is composed of 2 VNF and a Network, you will have to build and send :
a request to SO to create the “service instance” object
a request to SO to create the VNF 1 instance object
a request to SDNC to declare VNF 1 instance parameters and values (SDNC preload)
a request to SO to create the Vf-module 1 instance object
a request to SO to create the VNF 2 instance object
a request to SDNC to declare VNF 2 instance parameters and values (SDNC preload)
a request to SO to create the Vf-module 2 instance object
a request to SO to create the Network instance object
Example to request a service instance directly to ONAP SO
TO BE COMPLETED
In the response, you will obtain the serviceOrderId value.
Then you have the possibility to check about the SO request (here after the requestId=e3ad8df6-ea0d-4384-be95-bcb7dd39bbde).
This will allow you to get the serviceOrder Status (completed, failed…)
curl -X GET \
http://so.api.simpledemo.onap.org:30277/onap/so/infra/orchestrationRequests/v6/e3ad8df6-ea0d-4384-be95-bcb7dd39bbde \
-H 'Accept: application/json' \
-H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: get_aai_subscr' \
-H 'cache-control: no-cache'
To instantiate a VNF, you need to build a complex request. All necessary parameters are available in the Tosca service template generated by SDC when you defined your service model.
curl -X POST \
http://so.api.simpledemo.onap.org:30277/onap/so/infra/serviceInstances/v6/95762b50-0244-4723-8fde-35f911db9263/vnfs \
-H 'Accept: application/json' \
-H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: get_aai_subscr' \
-H 'cache-control: no-cache' \
-d '{
"requestDetails": {
"requestInfo": {
"productFamilyId": "0d463b0c-e559-4def-8d7b-df64cfbd3159",
"instanceName": "my_service_vnf_instance_001",
"source": "VID",
"suppressRollback": false,
"requestorId": "test"
},
"modelInfo": {
"modelType": "vnf",
"modelInvariantId": "4e66bb92-c597-439e-822d-75aaa69b13d4",
"modelVersionId": "3b6ba59c-287c-449e-a1da-2db49984a087",
"modelName": "my_service_VF",
"modelVersion": "1.0",
"modelCustomizationId": "",
"modelCustomizationName": ""
},
"requestParameters": {
"userParams": [],
"aLaCarte": true,
"testApi": "VNF_API"
},
"cloudConfiguration": {
"lcpCloudRegionId": "my_cloud_site",
"tenantId": "5906b9b8fd9642df9ba1c9e290063439"
},
"lineOfBusiness": {
"lineOfBusinessName": "test_LOB"
},
"platform": {
"platformName": "test_platform"
},
"relatedInstanceList": [{
"relatedInstance": {
"instanceId": "95762b50-0244-4723-8fde-35f911db9263",
"modelInfo": {
"modelType": "service",
"modelName": "my-service-model",
"modelInvariantId": "11265d8c-2cc2-40e5-95d8-57cad81c18da",
"modelVersion": "1.0",
"modelVersionId": "0d463b0c-e559-4def-8d7b-df64cfbd3159"
}
}
}]
}
}'
To instantiate a VF module, you need to build two complex requests All necessary parameters are available in the Tosca service template generated by SDC when you defined your service model.
1st request is called a “SDNC-preload” for a VNF object and is used to store in SDNC some VNF parameters values that will be needed for the instantiation
curl -X POST \
http://sdnc.api.simpledemo.onap.org:30202/restconf/operations/VNF-API:preload-vnf-topology-operation \
-H 'Accept: application/json' \
-H 'Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: API client' \
-H 'X-TransactionId: 0a3f6713-ba96-4971-a6f8-c2da85a3176e' \
-H 'cache-control: no-cache' \
-d '{
"input": {
"request-information": {
"notification-url": "onap.org",
"order-number": "1",
"order-version": "1",
"request-action": "PreloadVNFRequest",
"request-id": "test"
},
"sdnc-request-header": {
"svc-action": "reserve",
"svc-notification-url": "http:\/\/onap.org:8080\/adapters\/rest\/SDNCNotify",
"svc-request-id": "test"
},
"vnf-topology-information": {
"vnf-assignments": {
"availability-zones": [],
"vnf-networks": [],
"vnf-vms": []
},
"vnf-parameters": [],
"vnf-topology-identifier": {
"generic-vnf-name": "my_service_vnf_instance_001",
"generic-vnf-type": "",
"service-type": "95762b50-0244-4723-8fde-35f911db9263",
"vnf-name": "my_service_vfmodule_001",
"vnf-type": ""
}
}
}
}'
The 2nd request is to instantiate the VF module via ONAP SO (instance name must be identical in both requests)
curl -X POST \
http://so.api.simpledemo.onap.org:30277/onap/so/infra/serviceInstances/v6/95762b50-0244-4723-8fde-35f911db9263/vnfs/vfModules \
-H 'Accept: application/json' \
-H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: get_aai_subscr' \
-H 'cache-control: no-cache' \
-d '{
"requestDetails": {
"requestInfo": {
"instanceName": "my_vfmodule_001",
"source": "VID",
"suppressRollback": false,
"requestorId": "test"
},
"modelInfo": {
"modelType": "vfModule",
"modelInvariantId": "",
"modelVersionId": "",
"modelName": "",
"modelVersion": "1",
"modelCustomizationId": "",
"modelCustomizationName": ""
},
"requestParameters": {
"userParams": [],
"testApi": "VNF_API",
"usePreload": true
},
"cloudConfiguration": {
"lcpCloudRegionId": "my_cloud_site",
"tenantId": "5906b9b8fd9642df9ba1c9e290063439"
},
"relatedInstanceList": [{
"relatedInstance": {
"instanceId": "95762b50-0244-4723-8fde-35f911db9263",
"modelInfo": {
"modelType": "service",
"modelName": "my-service-model",
"modelInvariantId": "11265d8c-2cc2-40e5-95d8-57cad81c18da",
"modelVersion": "1.0",
"modelVersionId": "0d463b0c-e559-4def-8d7b-df64cfbd3159"
}
}
},
{
"relatedInstance": {
"instanceId": "",
"modelInfo": {
"modelType": "vnf",
"modelName": "my_service_model_VF",
"modelInvariantId": "4e66bb92-c597-439e-822d-75aaa69b13d4",
"modelVersion": "1.0",
"modelVersionId": "3b6ba59c-287c-449e-a1da-2db49984a087",
"modelCustomizationId": "",
"modelCustomizationName": ""
}
}
}]
}
}'
To instantiate a Neutron Network, you need to build two complex request. All necessary parameters are available in the Tosca service template generated by SDC when you defined your service model.
1st request is the “SDNC-preload” for a network object:
curl -X POST \
http://sdnc.api.simpledemo.onap.org:30202/restconf/operations/VNF-API:preload-network-topology-operation \
-H 'Accept: application/json' \
-H 'Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: API client' \
-H 'X-TransactionId: 0a3f6713-ba96-4971-a6f8-c2da85a3176e' \
-H 'cache-control: no-cache' \
-d '{
"input": {
"request-information": {
"request-id": "postman001",
"notification-url": "http://so.onap.org",
"order-number": "postman001",
"request-sub-action": "SUPP",
"request-action": "PreloadNetworkRequest",
"source": "postman",
"order-version": "1.0"
},
"network-topology-information": {
"network-policy": [],
"route-table-reference": [],
"vpn-bindings": [],
"network-topology-identifier": {
"network-role": "integration_test_net",
"network-technology": "neutron",
"service-type": "my-service-2",
"network-name": "my_network_01",
"network-type": "Generic NeutronNet"
},
"provider-network-information": {
"is-external-network": "false",
"is-provider-network": "false",
"is-shared-network": "false"
},
"subnets": [
{
"subnet-name": "my_subnet_01",
"subnet-role": "OAM",
"start-address": "192.168.90.0",
"cidr-mask": "24",
"ip-version": "4",
"dhcp-enabled": "Y",
"dhcp-start-address": "",
"dhcp-end-address": "",
"gateway-address": "192.168.90.1",
"host-routes":[]
}
]
},
"sdnc-request-header": {
"svc-action": "reserve",
"svc-notification-url": "http://so.onap.org",
"svc-request-id": "postman001"
}
}
}'
2nd request is to instantiate the network via ONAP SO (instance name must be identical in both requests)
curl -X POST \
http://so.api.simpledemo.onap.org:30277/onap/so/infra/serviceInstances/v6/95762b50-0244-4723-8fde-35f911db9263/networks \
-H 'Accept: application/json' \
-H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: get_aai_subscr' \
-H 'cache-control: no-cache' \
-d '{
"requestDetails": {
"requestInfo": {
"instanceName": "my_network_01",
"source": "VID",
"suppressRollback": false,
"requestorId": "demo",
"productFamilyId": "b9ac88f7-0e1b-462d-84ac-74c3c533217c"
},
"modelInfo": {
"modelType": "network",
"modelInvariantId": "0070b65c-48cb-4985-b4df-7c67ca99cd95",
"modelVersionId": "4f738bed-e804-4765-8d22-07bb4d11f14b",
"modelName": "Generic NeutronNet",
"modelVersion": "1.0",
"modelCustomizationId": "95534a95-dc8d-4ffb-89c7-091e2c49b55d",
"modelCustomizationName": "Generic NeutronNet 0"
},
"requestParameters": {
"userParams": [],
"aLaCarte": true,
"testApi": "VNF_API"
},
"cloudConfiguration": {
"lcpCloudRegionId": "my_cloud_site",
"tenantId": "5906b9b8fd9642df9ba1c9e290063439"
},
"lineOfBusiness": {
"lineOfBusinessName": "Test_LOB"
},
"platform": {
"platformName": "Test_platform"
},
"relatedInstanceList": [{
"relatedInstance": {
"instanceId": "95762b50-0244-4723-8fde-35f911db9263",
"modelInfo": {
"modelType": "service",
"modelName": "my_service_model_name",
"modelInvariantId": "11265d8c-2cc2-40e5-95d8-57cad81c18da",
"modelVersion": "1.0",
"modelVersionId": "0d463b0c-e559-4def-8d7b-df64cfbd3159"
}
}
}]
}
}'
Macro mode Service Instantiation via ONAP SO API
Using Macro mode, you have to build and send only one request to ONAP SO
In that request you need to indicate all object instances that you want to be instantiated.
Reminder : ONAP SO in Macro mode will perform the VNF parameters/values assignment based on CDS Blueprint templates that are supposed to be defined during Design and Onboard steps. That means ONAP has all information to be able to get all necessary values by itself (there is no longer need for an Operator to provide “SDNC preload”).
Additional info in:
CDS Documentation
CDS vDNS E2E Automation <https://wiki.onap.org/display/DW/vDNS+CDS+Dublin>
Request Example :
curl -X POST \
'http://{{k8s}}:30277/onap/so/infra/serviceInstantiation/v7/serviceInstances' \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache' \
-d '{
"requestDetails": {
"subscriberInfo": {
"globalSubscriberId": "Demonstration"
},
"requestInfo": {
"suppressRollback": false,
"productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
"requestorId": "adt",
"instanceName": "{{cds-instance-name}}",
"source": "VID"
},
"cloudConfiguration": {
"lcpCloudRegionId": "fr1",
"tenantId": "6270eaa820934710960682c506115453"
},
"requestParameters": {
"subscriptionServiceType": "vFW",
"userParams": [
{
"Homing_Solution": "none"
},
{
"service": {
"instanceParams": [
],
"instanceName": "{{cds-instance-name}}",
"resources": {
"vnfs": [
{
"modelInfo": {
"modelName": "{{vnf-modelinfo-modelname}}",
"modelVersionId": "{{vnf-modelinfo-modeluuid}}",
"modelInvariantUuid": "{{vnf-modelinfo-modelinvariantuuid}}",
"modelVersion": "1.0",
"modelCustomizationId": "{{vnf-modelinfo-modelcustomizationuuid}}",
"modelInstanceName": "{{vnf-modelinfo-modelinstancename}}"
},
"cloudConfiguration": {
"lcpCloudRegionId": "fr1",
"tenantId": "6270eaa820934710960682c506115453"
},
"platform": {
"platformName": "test"
},
"lineOfBusiness": {
"lineOfBusinessName": "someValue"
},
"productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
"instanceName": "{{vnf-modelinfo-modelinstancename}}",
"instanceParams": [
{
"onap_private_net_id": "olc-private",
"onap_private_subnet_id": "olc-private",
"pub_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwj7uJMyKiP1ogEsZv5kKDFw9mFNhxI+woR3Tuv8vjfNnqdB1GfSnvTFyNbdpyNdR8BlljkiZ1SlwJLEkvPk0HpOoSVVek/QmBeGC7mxyRcpMB2cNQwjXGfsVrforddXOnOkj+zx1aNdVGMc52Js3pex8B/L00H68kOcwP26BI1o77Uh+AxjOkIEGs+wlWNUmXabLDCH8l8IJk9mCTruKEN9KNj4NRZcaNC+XOz42SyHV9RT3N6efp31FqKzo8Ko63QirvKEEBSOAf9VlJ7mFMrGIGH37AP3JJfFYEHDdOA3N64ZpJLa39y25EWwGZNlWpO/GW5bNjTME04dl4eRyd",
"image_name": "Ubuntu 14.04",
"flavor_name":"s1.cw.small-1"
}
],
"vfModules": [
{
"modelInfo": {
"modelName": "{{vnf-vfmodule-0-modelinfo-modelname}}",
"modelVersionId": "{{vnf-vfmodule-0-modelinfo-modeluuid}}",
"modelInvariantUuid": "{{vnf-vfmodule-0-modelinfo-modelinvariantuuid}}",
"modelVersion": "1",
"modelCustomizationId": "{{vnf-vfmodule-0-modelinfo-modelcustomizationuuid}}"
},
"instanceName": "{{vnf-vfmodule-0-modelinfo-modelname}}",
"instanceParams": [
{
"sec_group": "olc-open",
"public_net_id": "olc-net"
}
]
},
{
"modelInfo": {
"modelName": "{{vnf-vfmodule-1-modelinfo-modelname}}",
"modelVersionId": "{{vnf-vfmodule-1-modelinfo-modeluuid}}",
"modelInvariantUuid": "{{vnf-vfmodule-1-modelinfo-modelinvariantuuid}}",
"modelVersion": "1",
"modelCustomizationId": "{{vnf-vfmodule-1-modelinfo-modelcustomizationuuid}}"
},
"instanceName": "{{vnf-vfmodule-1-modelinfo-modelname}}",
"instanceParams": [
{
"sec_group": "olc-open",
"public_net_id": "olc-net"
}
]
},
{
"modelInfo": {
"modelName": "{{vnf-vfmodule-2-modelinfo-modelname}}",
"modelVersionId": "{{vnf-vfmodule-2-modelinfo-modeluuid}}",
"modelInvariantUuid": "{{vnf-vfmodule-2-modelinfo-modelinvariantuuid}}",
"modelVersion": "1",
"modelCustomizationId": "{{vnf-vfmodule-2-modelinfo-modelcustomizationuuid}}"
},
"instanceName": "{{vnf-vfmodule-2-modelinfo-modelname}}",
"instanceParams": [
{
"sec_group": "olc-open",
"public_net_id": "olc-net"
}
]
},
{
"modelInfo": {
"modelName": "{{vnf-vfmodule-3-modelinfo-modelname}}",
"modelVersionId": "{{vnf-vfmodule-3-modelinfo-modeluuid}}",
"modelInvariantUuid": "{{vnf-vfmodule-3-modelinfo-modelinvariantuuid}}",
"modelVersion": "1",
"modelCustomizationId": "{{vnf-vfmodule-3-modelinfo-modelcustomizationuuid}}"
},
"instanceName": "{{vnf-vfmodule-3-modelinfo-modelname}}",
"instanceParams": [
{
"sec_group": "olc-open",
"public_net_id": "olc-net"
}
]
}
]
}
]
},
"modelInfo": {
"modelVersion": "1.0",
"modelVersionId": "{{service-uuid}}",
"modelInvariantId": "{{service-invariantUUID}}",
"modelName": "{{service-name}}",
"modelType": "service"
}
}
}
],
"aLaCarte": false
},
"project": {
"projectName": "Project-Demonstration"
},
"owningEntity": {
"owningEntityId": "24ef5425-bec4-4fa3-ab03-c0ecf4eaac96",
"owningEntityName": "OE-Demonstration"
},
"modelInfo": {
"modelVersion": "1.0",
"modelVersionId": "{{service-uuid}}",
"modelInvariantId": "{{service-invariantUUID}}",
"modelName": "{{service-name}}",
"modelType": "service"
}
}
}'
e2eServiceInstance method is a hard-coded approach with dedicated/specific service BPMN workflow. That means it is linked to ONAP source code and lifecycle.
A La Carte method requires the Operations actor to build and send a lot of operations. To build those requests, Operator actor needs to define/collect by himself all VNF parameters/values.
Macro method required the Operations actor to build and send only one request and, thanks to CDS Blueprint templates, ONAP will collect and assign all required parameters/values by itself.
E2E Network Slicing
The objective of this use case is to realize End-to-End 5G Network Slicing using ONAP. An End-to-End Network Slice consists of RAN (Radio Access Network), Transport Network (TN) and Core Network (CN) slice sub-nets. This use case intends to demonstrate the modeling, orchestration (life cycle and resources) and assurance of a network slice which are implemented in alignment with relevant standards.
Overall High level view for ONAP-based Slice Management
Architecture Choice
3GPP(TS 28.801) defines three layer slice management functions which include:
CSMF(Communication Service Management Function):
Responsible for translating the communication service related requirement to network slice related requirements.
Communicate with Network Slice Management Function (NSMF).
NSMF(Network Slice Management Function):
Responsible for management and orchestration of NSI.
Derive network slice subnet related requirements from network slice related requirements.
Communicate with the Network Slice Subnet Management Function (NSSMF) and Communication Service Management Function.
NSSMF(Network Slice Subnet Management Function):
Responsible for management and orchestration of NSSI.
Communicate with the NSMF.

To realize the three layers of the slice management function, we need to decide whether to implement CSMF, NSMF or NSMF within ONAP, or use the external CSMF, NSMF or NSSMF. This implies that for ONAP-based network slice management, we have different choices from an architectural perspective:
Implement CSMF, NSMF, NSSMF all within ONAP;
Connect an external CSMF from the Northbound, Implement NSMF and NSSMF within ONAP;
Connect an external CSMF from the Northbound, Implement NSMF within ONAP, Connect a 3rd party NSSMF from the Southbound;
Implement CSMF, NSMF within ONAP, Connect a 3rd party NSSMF from then Southbound.
Use external CSMF and NSMF, only implement NSSMF within ONAP.

Slice Management Functions - Realization in SO
CSMF and NSMF is realized within ONAP (enhancement in Frankfurt functionality), and the NB interfaces is standardized using ExtAPI.
All 3 NSSMFs shall be realized within ONAP (From Guilin).
ONAP acting as NSMF shall also interact with external RAN and Transport NSSMF using 3GPP APIs
CSMF reliazed within SO receives service requirements from EXT-API, which translates service requirements to slice profile(NST selection) and sends request to NSMF for slice allocation.
NSMF reliazed within SO receives request for slice allocation (slice profile, S-NSSAI, NST) and determines slice instantiation/modification (with OOF) to fulfil the slice allocation request.
NSSMF reliazed within SO receive information from NSMF & trigger RAN/Core/Transport NSSMF for orchestration actions.
Network Slice Instance (NSI) Life Cycle View
Design and pre-provision: Creation of necessary slice/slice sub-net templates. Creation, activation, deactivation and termination of NSI, including its constituent slice sub-nets (RAN, Core and Transport)
3GPP Specification (3GPP TS 28.530) describes management aspects of a Network Slice Instance, which can be described by the four phases:
Preparation: The preparation phase includes network slice design, network slice capacity planning, on-boarding and evaluation of the network functions, preparing the network environment and other necessary preparations required to be done before the creation of an NSI
Commisioning: NSI provisioning in the commissioning phase includes creation of the NSI. During NSI creation all needed resources are allocated and configured to satisfy the network slice requirements. The creation of an NSI can include creation and/or modification of the NSI constituents
Operation: The Operation phase includes the activation, supervision, performance reporting (e.g. for KPI monitoring), resource capacity planning, modification,and de-activation of an NSI.
Decommissioning: Network slice instance provisioning in the decommissioning phase includes decommissioning of non-shared constituents if required and removing the NSI specific configuration from the shared constituents. After the decommissioning phase, the NSI is terminated and does not exist anymore. The ONAP-based NSI lifecycle management will finally provide the demonstration of all these phases.
The ONAP-based NSI lifecycle management will finally provide the demonstration of all these phases.

Support for Option1 &Option2 in E2E Network Slicing
ONAP E2E Network Slicing option 1 and 2 differs on the RAN and FH/BH relationship.
In option 1, RAN NSSMF will decide FH/MH requirements and send to TN side, so RAN NSST will nest FH/MH NSST, and slice profile requirements will contain not only RAN side requirements but also FH/MH.
Template design for option 1: https://wiki.onap.org/display/DW/Template+Design+for+Option+1

In option 2, FH and MH are independent requirments when doing E2E requirements decomposition. Detailed background of option 1 and 2, please see E2E Network Slicing Use Case in R7 Guilin.
Template design for option 2: https://wiki.onap.org/display/DW/Template+Design+for+Option2

3 domain combination solution -Endpoint
In order to enable 3 subnet connectivity, making end-to-end forwarding and control plane interacting, in slicing services, we need slicing interworking identifier and information to tell how RAN and Core connect with TN. Slicing interworking identifier(in ONAP is vlan Id, allocated by NSMF) is used to isolate differerent service datas, and identify the unique slicing service across RAN, TN and Core, 1 S-NSSAI will need to be assigned with 1 slicing interworking identifier(vlan Id). The slicing interworking information is used as bridges to connect RAN/Core and TN,it should be RAN/Core side outgress and TN ingress, like port, ipAddress, next hops and etc.
SO ETSI CSIT (NFVO and VNFM)
This guide will go through the CSIT of the ETSI NFVO and VNFM.
Ensure you have a healthy ONAP Deployment running. The following components will be required/used as part of this guide:
SO
SDC
AAI
DMAAP
Modeling
What is ETSI?
The European Telecommunications Standards Institute (ETSI) produces globally-applicable standards for Information and Communications Technologies. ETSI set out standards covering the functionalities of the interfaces specified on the reference points, which use the acronym NFV-SOL (standing for “NFV Solutions”). As of ONAPs Dublin release the SO SVNFM adapter supports SOL003 standards for Create, Instantiate, Terminate and Delete operations with Granting, Subscription and Notification. As of ONAP Honolulu release, the SO ETSI NFVO sub-component supports SOL005 (NBI) and SOL003 (SBI) standards for Create, Instantiate, Terminate and Delete NS and VNF (through the SOL003 Adapter) operations.
How to Run CSIT Tests
The follow steps are to install and run on an Ubuntu 18.04 (desktop) installation. Later versions of Ubuntu and Java may work for the tests.
First pull the CSIT repo from Gerrit, either with or without the hooks
git clone "https://gerrit.onap.org/r/integration/csit"
or
git clone "https://gerrit.onap.org/r/integration/csit" && (cd "csit" && mkdir -p .git/hooks && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg https://gerrit.onap.org/r/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg)
Once this is downloaded a few more installations are required.
Install pip (if required)
sudo apt install python-pip
Install Robot Framework through pip
pip install robotframework
Run Script
Once all of this is done, then the tests should be run by calling the run-csit.sh script and giving it the location of our test folder (csit/plans/so/integration-etsi-testing). From the csit projects root folder run the following command:
./run-csit.sh plans/so/integration-etsi-testing
This should successfully run the ETSI CSIT suite
How to run tests againt specific SO versions
It is possible to run the ETSI CSIT suite against local docker images although it is not the default. Through this method specific versions of SO can be tested. There are two changes required to make this work. The env file, located at [containing folder]/csit/plans/so/integration-etsi-testing/config/env, first needs to be changed. The DOCKER_ENVIROMENT needs to be changed from “remote” to “local”. Also the TAG value might need to be changed. This Tag relates to the version of images being used.
Secondly all of the required docker images must be present on system.
This should be enough to run the ETSI CSIT test suite locally.
ETSI NFVO Automated CSIT Tests High Level Scenarios
Step 1:
Perform Configuration / Setup Steps prior to running tests
Step 2:
Onboard SOL004 Package and SOL007 directly into ETSI Catalog using ROBOT framework
Step 3:
ETSI Catalog Gets Package from SDC Simulator (New: ETSI Catalog and Modeling ETSI Catalog DB will need to be set up and spun up for CSIT. May be some impact on SDC Simulator here)
Step 4:
ETSI Catalog Stores Package in its Modeling ETSI Catalog DB
Step 5:
ROBOT framework used to trigger NS LCM requests, e.g., INSTANTIATE NS
Step 6:
ETSI NFVO NS LCM gets required data from ETSI Catalog, e.g., Get and Parse NSD
Step 7:
If e.g., a CREATE NS task, ETSI NFVO NS LCM checks to see if already exists in ETSI NFVO DB
Step 8:
Create Generic VNF and connect to Service Instance in A&AI Simulator (May be some impact on A&AI Simulator here)
Step 9:
Instantiate VNF through SOL003 Adapter
Step 10:
SOL003 Adapter processes requests through A&AI and (May be some impact on A&AI Simulator here)
Step 11:
SOL003 Adapter processes requests through ETSI-Catalog
Step 12:
SOL003 Adapter sends notification to SOL003 NBI, etc.
What are the tests doing?
There are three tests currently being run “Distribute Service Template”, “Invoke Service Instantiation”, “Invoke NS Instantiation”, “Delete NS Instance”, “Invoke VNF Instantiation”, “Delete VNF Instance” and “Delete Service Instance”.
Distribute Service Template
As the name would suggest the aim for the “Distribute Service Template” test is to distribute a service template within the SDC controller pod. Once a http session of the SDC controller is created a post request can be made to it. This post requests sends binary data from “distributeServiceTemplate.json”. This json file contains resources and artifacts required to distribute a service. Once this post request is sent, the response status code is checked to see if it is 200. If the code is not equal to 200 then the test is thought to be a failure.
Invoke Service Instantiation
The aim of the “Invoke Service Instantiation” test is to invoke the service distributed to the sdc controller in the previous test. A http session of the api handler pod is created. This session is sent a post request containing “serviceInstantiationRequest.json”. Once this request is made the response is checked if it a valid code is returned. A for loop is used to continually make calls to check the orchestration request, to check the status of service instantiation. Only once this orchestration returns either a fail or success, will we break out of the for loop.Once outside the for loop a final statement is used to check if service has been successfully instantiated.
Invoke NS Instance
The aim of “Invoke NS Instantiation” test is to now instantiate the NS that relates to service in the previous test. This test requires the ID of the service instance created in the previous test. If this is not provided then the test will fail from the get go. Once again a http session of the api handler pod is created. Similarly a post request using the json data within “nsInstantiationRequest.json”. Once this request is made if it returns a success code then the test moves on to a for loop. Within this for a loop an orchestration request is made each time, when this request signals that either the instantiation request has failed or fully succeeded then the loop is escaped. The test will either be a pass or fail depending on this final orchestration request.
Delete NS Instance
This test will delete the NS Instance created in the previous test. Both the ID of the NS instance created in the previous test and the service instance created in the test before that. If either of these values is not provided then the test will fail. This test once again makes use of a session of the api handler pod. A post request is made using the data from “nsDeleteRequest.json”. Once this request is made if it returns a success code then the test moves on to a for loop. Within this for a loop an orchestration request is made each time, when this request signals that either the instantiation request has failed or fully succeeded then the loop is escaped. The test will either be a pass or fail depending on this final orchestration request.
Invoke VNF Instance
The aim of “Invoke VNF Instantiation” test is to now instantiate the VNF that relates to service in the previous test. This test requires the ID of the service instance created in the previous test. If this is not provided then the test will fail from the get go. Once again a http session of the api handler pod is created. Similarly a post request using the json data within “vnfInstantiationRequest.json”. Once this request is made if it returns a success code then the test moves on to a for loop. Within this for a loop an orchestration request is made each time, when this request signals that either the instantiation request has failed or fully succeeded then the loop is escaped. The test will either be a pass or fail depending on this final orchestration request.
Delete VNF Instance
This test will delete the VNF Instance created in the previous test. Both the ID of the vnf instance created in the previous test and the service instance created in the test before that. If either of these values is not provided then the test will fail. This test once again makes use of a session of the api handler pod. A post request is made using the data from “vnfDeleteRequest.json”. Once this request is made if it returns a success code then the test moves on to a for loop. Within this for a loop an orchestration request is made each time, when this request signals that either the instantiation request has failed or fully succeeded then the loop is escaped. The test will either be a pass or fail depending on this final orchestration request.
Delete Service Instance
- This test will delete the service instance created in earlier test. To delete the service the ID of previously
created Service Instance is required, if this is not supplied then the test will fail before starting. A post request is then made to the API handler containing data from “serviceDeleteRquest.json”. Once this request is made if it returns a success code then the test moves on to a for loop. Within this for a loop an orchestration request is made each time, when this request signals that either the instantiation request has failed or fully succeeded then the loop is escaped. The test will either be a pass or fail depending on this final orchestration request.
Troubleshooting
There are a number of simple issues relating from Python and its libraries
A correct installation of the robot framework to run our tests requiring python and the following pip libraries.
robotframework
robotframework-extendedselenium2library
robotframework-httplibrary
robotframework-onap
robotframework-requests
robotframework-selenium2library
To make sure each of the previous libraries is installed run the following command
pip -list
ETSI NFVO Network Service LCM Setup & Functionality
This guide will go through the setup required and the use of the ETSI NFVO NS LCM Functionality: Create, Instantiate, Terminate and Delete a Network Service
Ensure you have a healthy ONAP Deployment running. The following components will be required/used as part of this guide:
SO
SDC
AAI
DMAAP
Modeling
UUI
Add Entries to ESR System Info List and ESR VNFM Lists
This first section of the guide will involve adding values to AAI under the following 3 paths:
/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/<cloud-owner>/<cloud-region-id>/esr-system-info-list/esr-system-info/<yourVnfmId>
/aai/v15/external-system/esr-vnfm-list/esr-vnfm/<yourVnfmId>
/aai/v15/external-system/esr-vnfm-list/esr-vnfm/<yourVnfmId>/esr-system-info-list/esr-system-info/
For the purposes of this guide, the VNFM Simulator will be used as the VNFM throughout. You will need to edit the below CURLs in order to match your specific VNFM’s requirements, if using one other than the VNFM Simulator.
Step 1:
Exec into any pod within your ONAP deployment that is connected to the primary ONAP network. This will give you access to using the internal service hostnames.
Step 2:
Send the following CURL to add the AAI Cloud Infrastructure ESR System Info List Entry. Ensuring you alter the values to match your deployment’s AAI Data:
AAI Cloud Infrastructure ESR System Info List Entry
curl -X PUT -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/regionOne/esr-system-info-list/esr-system-info/vnfmSimulator -d '{"name": "vnfmSimulatorName", "system-type": "simulator", "vimId": "myCloud", "vendor": "EST", "version": "V1.0", "certificateUrl": "", "url": "http://so-vnfm-simulator.onap:9093/vnflcm/v1/", "user-name": "vnfm", "password": "password1$"}' -k
Step 3:
Next you will need to send the following 2 CURLs in order to add entries into the AAI External System ESR VNFM List:
AAI External System ESR VNFM List
curl -X PUT -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/external-system/esr-vnfm-list/esr-vnfm/vnfmSimulator -d '{"vnfmId": "vnfmSimulator", "name": "vnfmSimulatorName", "type": "simulator", "vendor": "est"}'
AAI External System ESR VNFM System Info List
curl -X PUT -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/external-system/esr-vnfm-list/esr-vnfm/vnfmSimulator/esr-system-info-list/esr-system-info/vnfmSimulatorId -d '{"esr-system-info-id": "vnfmSimulatorId", "type": "simulator", "user-name": "vnfm", "password": "password1$", "system-type": "simulator", "service-url": "http://so-vnfm-simulator.onap:9093/vnflcm/v1"}'
Step 4:
Take note of the “system-type” and “type” values you have added with these CURLs. This will be used at a later stage when creating your VF in SDC.
Onboard a VNF package along with a Network Service CSAR into SDC
A video demonstration of this process “Onboarding ETSI Based NS” can be found here: SO NFVO NS Onboarding and LCM Demonstrations It is recommended that you view this video before/alongside this section of the guide.
Step 1:
Login to the ONAP Portal. (Link: https://portal.api.simpledemo.onap.org:30225/ONAPPORTAL/login.htm (where “portal.api.simpledemo.onap.org” is set as the IP of your VM/host of your Portal component.)
Login: cs0008 Password: demo123456!
Step 2:
Select the SDC App. It is possible that your browser will block the scripts run by the Portal, you will need to enable them if it does.
Step 3:
Follow the onboarding guide below:
Onboarding your VNF:
1: Click the “ONBOARD” tab near the top of the window.
2: Create a “VLM” if you have not created a “VLM” before.
From the “ONBOARD” page, click create VLM.
Enter name and description, then select create.
Click on the plus button beside Entitlement Pool.
Add Name and Manufacturing Reference Number, then click save.
Click on the plus button beside License Key Groups.
Add Name and select type, then click save.
Click on the plus button beside Feature Groups.
In the general tab, add name, Description and Part Number. Move to the Entitlements Pools tab, select the entitlement pool you just created and click the rightward arrow. Move to the License Key Group tab, select the license key group you just created and click the rightward arrow. Once these three things are done, click save.
Click on the plus button beside License Agreement.
Add Name and select License Term. Next move to the Feature Groups tab, select the Feature Group you just created and click the rightward arrow. Lastly click save.
On the overview page, select submit in the top right corner of the screen.
Enter a commit comment and click Commit & Submit.
3: Create a Virtual Service Product (VSP)
Click the “ONBOARD” tab near the top of the window.
Click “CREATE NEW VSP” and fill in the required information. Make sure to select “Network Package” for the “ONBOARDING PROCEDURE” section. Then click “CREATE”.
Click where it shows “! Missing” underneath “License Agreement”. Simply select a “Licensing Version” and “License Agreement/Feature Group” from the drop downs.
Click the “Overview” tab on the left hand side. Then press “Select File” in the “SOFTWARE PRODUCT ATTACHMENTS” section and select your prepared VNF Package. If you are onboarding a supported zip, then click “PROCEED TO VALIDATION” once you can see your added files. You can safely ignore any warnings that come up at this step, but not any errors. (Note: The package validation does not support CSARs currently, they will still work however, providing they meet SDC requirements.)
Now click “Submit”.
4: Then click “ONBOARD” in the top left. Hover your mouse over the small grey triangle that is just to the right of the “ONBOARD” tab and select “HOME”.
5: Hover over the “IMPORT” square and select “Import VSP”. Find your VSP, click the drop-down arrow beside it and then press the “Import VSP” icon at the far right of the line that drops down.
6: You will now be brought to the draft page of your VF. Follow the instructions below in order to certify it.
First, give your VF a name you will remember, as we will be using this in the following section, then click “Create” in the top-right hand corner.
You will need to edit the properties of the VF in order to add a property value, that will be required at a later point.
Go to the “Properties Assignment” tab on the left-hand side, then select your VF on the right-hand side.
Now go to the “Inputs” tab within the “Properties Assignment”.
Find the “nf_type” input and enter a value matching the value you entered for “system-type” and “type” in the previous ESR Entries section.
Click “Save” in the top-right of the “Properties Assignment” tab and then you can Certify your VF, by clicking “Certify” in the top-right of the VF Page.
Creating/Configuring your SDC Service
1: In the “HOME” tab of the SDC ONAP Portal, hover over the “ADD” square and select “ADD SERVICE”. Fill in the required fields, select the “Category” “Network Service” and press “Create” in the top right-hand corner.
2: You will be brought to the draft page of your Service. Go to the “Composition” tab on the left-hand side and drag/drop the VF, that you just created, into this service (you can search for the VF by name in the top left).
3: Now you will need to add the Network Service CSAR package to this service. You can do this by clicking in the blank whitespace of the composition, then on the right hand side of the page select the 2nd tab in order to add a deployment artifact. Click “ADD ARTIFACT” here, give an “Artifact Label” of “ns”, any description value and ensure you choose a “Type” of “OTHER”. Then click “DONE”.
4: Finally you can click “Certify” in the top right hand corner, followed by “Distribute”. Your Service will now distributed across ONAP.
Onboarding your Network Service to ETSI Catalog through UUI
This next small section (Onboarding your NS through UUI) can also been seen in the “Onboarding ETSI Based NS” video mentioned earlier.
Step 1:
Go to the following link, in order to access the UUI Portal: https://msb.api.simpledemo.onap.org:30283/iui/usecaseui/#/home (where “msb.api.simpledemo.onap.org” is set as the IP of your VM/host of your UUI component.)
Step 2:
Click “Package Management”, you will be brought to the “NS” tab, you should see your Service name in the list. Simply click the “Operation button” on the right hand side of your Service in order to onboard it into the ETSI Catalog.
Step 3:
Wait for the confirmation that your Network Service has been Onboarded Successfully.
Triggering the ETSI NFVO NS LCM Functionality
The next section of this guide will go through the actual triggering of the ETSI NFVO NS LCM Functionalities in the following order: Create, Instantiate, Terminate and then Delete.
This section of this guide can be seen in video format at the following link: https://wiki.onap.org/display/DW/SO+NFVO+NS+Onboarding+and+LCM+Demonstrations
It is recommended that you view the “ETSI Based NS Orchestration Demo” video before/alongside this section of the guide.
Create NS
Step 1:
First you will need to retrieve the NSD ID from the ETSI Catalog Database in order to populate the Create Network Service CURL. The ETSI Catalog Database will be found within the Modeling DB container.
Log into the ETSI Catalog Database and retrieve the data from the “catalog_nspackage” table. The value under the column “NSPACKAGEID” will be the NSD ID required as part of the Create Network Service CURL.
Step 2:
Exec into any pod within your ONAP deployment that is connected to the primary ONAP network. This will give you access to using the internal service hostnames.
Step 3:
Send the following Create Network Service CURL Command, ensuring your deployment’s Global Customer ID (from AAI) and your NSDID (from ETSI Catalog Database) replace the values within the <>:
Create NS Curl
curl -k -X POST -H "accept:application/json" -H "Content-Type:application/json" -H "HTTP_GLOBALCUSTOMERID: <GLOBALCUSTOMERID>" -d '{"nsdId": "<NSDID>", "nsName": "demo", "nsDescription": "demo"}' -v http://so-etsi-nfvo-ns-lcm.onap:9095/so/so-etsi-nfvo-ns-lcm/v1/api/nslcm/v1/ns_instances -H "Authorization: Basic c28tZXRzaS1uZnZvLW5zLWxjbTpEdXJnMSREYWxhWG95ZA=="
You should receive a synchronous response back with a 201 Create HTTP Response. This response will contain the NS Instance ID of the NS Instance we just created, take note of this as it will be needed in the following steps.
After this step has been completed you should log into the Marie-Db-Galera-0 Pod on your ONAP deployment, then connect to the “NFVO” database. Retrieving all data from the “ns_inst” table will show that your initial NS has been created.
Instantiate NS
Step 1:
Next you will need to create a JSON file on the pod, which you are exec’ed into, named “Payload.json” in the following example.
Payload.json
{
"nsFlavourId": "default",
"locationConstraints": [{
"vnfProfileId": "b1bb0ce7-2222-4fa7-95ed-4840d70a1177"
}],
"additionalParamsForVnf": [{
"vnfProfileId": "b1bb0ce7-2222-4fa7-95ed-4840d70a1177",
"vnfInstanceName": "vgwVnf1",
"vnfInstanceDescription": "test",
"additionalParams": {
"vim_id": "<cloud-owner>_<cloud-region-id>_<tenant_id>"
}
}]
}
In the above Payload.json, you must ensure that the “vnfProfileId” matches the VNF Descriptor ID found in the VNF CSAR which you onboarded as part of the VNF Onboarding section of this guide. The “vnfInstanceName” must match your VNF’s name, and finally the “vim_id” must be replaced with your AAI Data values for your deployment’s Cloud-Owner, Cloud-Region-Id and Tenant-Id respectively.
Step 2:
Next you will need to send the following CURL command in order to trigger the instantiation of the Network Service. Ensure that you add the NS Instance ID received in the Create NS response to the URL Path (replacing <NS_INSTANCE_ID>), and match the Global Customer ID as before:
Instantiate NS Curl
curl -k -X POST -H "Authorization: Basic c28tZXRzaS1uZnZvLW5zLWxjbTpEdXJnMSREYWxhWG95ZA==" -H "accept: application/json" -H "Content-Type:application/json" -H "HTTP_GLOBALCUSTOMERID: ADemoCustomerInXcloud" -d @Payload.json -v http://so-etsi-nfvo-ns-lcm.onap:9095/so/so-etsi-nfvo-ns-lcm/v1/api/nslcm/v1/ns_instances/<NS_INSTANCE_ID>/instantiate
This will trigger the Asynchronous Instantiate NS Functionality. You will receive a response confirming that the process has begun with a 202 Accepted HTTP Response Header. You can view the debug.log files on the following pods in order to view the progress:
SO-ETSI-NFVO-NS-LCM
SO-ETSI-SOL003-ADAPTER
SO-VNFM-SIMULATOR (If making use of the VNFM-Simulator, alternatively the logs of the VNFM you are using)
Once the full instantiation has been completed, reconnect to the “NFVO” database, within the Marie-Db-Galera-0 pod on your ONAP deployment. Retrieving all data from the “ns_inst” table again, you should see that the “STATUS” field for your NS has changed to “INSTANTIATED”.
Terminate NS
Step 1:
Send the following CURL command in order to trigger the Termination of the Network Service. Ensure that you add the NS Instance ID received in the Create NS response to the URL Path (replacing <NS_INSTANCE_ID>):
Terminate NS Curl
curl -k -X POST -H "Authorization: Basic c28tZXRzaS1uZnZvLW5zLWxjbTpEdXJnMSREYWxhWG95ZA==" -H "accept: application/json" -H "Content-Type: application/json" -v http://so-etsi-nfvo-ns-lcm.onap:9095/so/so-etsi-nfvo-ns-lcm/v1/api/nslcm/v1/ns_instances/<NS_INSTANCE_ID>/terminate
Similar to the Instantiate functionality, this is an asynchronous call, so you will receive a response confirming that the process has begun with a 202 Accepted HTTP Response Header. As above, view the specified debug.log files in order to view the progress.
Once the full termination has been completed, reconnect to the “NFVO” database, within the Marie-Db-Galera-0 pod on your ONAP deployment. Retrieving all data from the “ns_inst” table again, you should see that the “STATUS” field for your NS has changed back to “NOT_INSTANTIATED”.
Delete NS
Step 1:
Finally send the following CURL command in order to trigger the Deletion of the Network Service. Ensure that you add the NS Instance ID received in the Create NS response to the URL Path (replacing <NS_INSTANCE_ID>):
Delete NS Curl
curl -k -X DELETE -H "Authorization: Basic c28tZXRzaS1uZnZvLW5zLWxjbTpEdXJnMSREYWxhWG95ZA==" -H "accept: application/json" -H "Content-Type: application/json" -v http://so-etsi-nfvo-ns-lcm.onap:9095/so/so-etsi-nfvo-ns-lcm/v1/api/nslcm/v1/ns_instances/<NS_INSTANCE_ID>
Similar to the Create functionality, this is a synchronous call and as such you will receive a 204 No Content Http Response to your CURL command.
Once the full deletion has been completed, reconnect to the “NFVO” database, within the Marie-Db-Galera-0 pod on your ONAP deployment. Retrieving all data from the “ns_inst” table again, you should no longer be able to see the NS Instance in the NS_INST table.
SO ETSI VNF LCM Setup & Functionality
Introduction
This guide will describe the steps required to execute the ETSI “Instantiate VNF” and “Terminate VNF” workflows using ONAP. The initial requirements you need for this guide are as follows:
A stable ONAP Deployment
ESR component enabled in ONAP installation.
SO-ETSI-SOL003-Adapter component enabled ONAP in installation.
A VNFM that is aligned to the Sol003 Interface (https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/02.03.01_60/gs_NFV-SOL003v020301p.pdf)
A Sol004 Aligned VNF package (https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/004/02.03.01_60/gs_nfv-sol004v020301p.pdf)
Initial Configurations
The following configurations need to be completed in order to execute the ETSI workflows and instantiate through the SO-ETSI-SOL003-Adapter.
Log into the MariaDB Database
Find your Mariadb pod:
kubectl -n onap get pods | grep maria
Exec into a Mariadb-Galera pod (replace <PODNAME> with the Mariadb pod name):
kubectl -n onap -it exec <PODNAME> bash
Log into the SQL database and connect to the “catalogdb” database. Follow the next steps in order to configure your ONAP’s Mariadb database.
Enable the ETSI “Instantiate/Create” & “Terminate/Delete” building blocks.
Firstly, you will need to add the ETSI Create & Delete building blocks, this is done by inserting them into the “building_block_detail” table in the Mariadb’s “catalogdb” database.
Insert the ETSI Create Building Block:
insert into building_block_detail(building_block_name, resource_type, target_action) values (“EtsiVnfInstantiateBB”, “VNF”, “ACTIVATE”);
Insert ETSI Delete Building Block:
insert into building_block_detail(building_block_name, resource_type, target_action) values (“EtsiVnfDeleteBB”, “VNF”, “DEACTIVATE”);
View the “building_block_detail” table:
select * from building_block_detail;
You should now have the entries in your “building_block_detail” table.
Update the orchestration_flow_reference table
Note: Standard VNF instantiation is unlikely to work once this step has been completed.
The next step is to set which building blocks are triggered on a VNF instantiate request. We will also be setting the correct sequence for these building blocks.
View the VNF Create/Delete sequences from the “orchestration_flow_reference” table:
select * from orchestration_flow_reference where COMPOSITE_ACTION="VNF-Create";
select * from orchestration_flow_reference where COMPOSITE_ACTION="VNF-Delete";
Remove/Update current entries for “VNF-Create” & “VNF-Delete”:
Retrieve “ID” from “northbound_request_ref_lookup” table. Take note of the “ID” value for “VNF-Create” and “VNF-Delete”:
select * from northbound_request_ref_lookup where REQUEST_SCOPE='Vnf' and IS_ALACARTE is true;
Remove current VNF-Insert and insert ETSI VNF-Create, replace <ID> with the corresponding value retrieved from the “northbound_request_ref_lookup” table:
delete from orchestration_flow_reference where COMPOSITE_ACTION = "VNF-Create";
insert into orchestration_flow_reference (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) values ("VNF-Create",1,"AssignVnfBB",1,<ID>);
insert into orchestration_flow_reference (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) values ("VNF-Create",2,"EtsiVnfInstantiateBB",1,<ID>);
insert into orchestration_flow_reference (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) values ("VNF-Create",3,"ActivateVnfBB",1,<ID>);
Remove current VNF-Delete and insert ETSI VNF-Delete, replace <ID> with the corresponding value retrieved from the “northbound_request_ref_lookup” table:
delete from orchestration_flow_reference where COMPOSITE_ACTION = "VNF-Delete";
insert into orchestration_flow_reference (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) values ("VNF-Delete",1,"EtsiVnfDeleteBB",1,<ID>);
insert into orchestration_flow_reference (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) values ("VNF-Delete",2,"UnassignVnfBB",1,<ID>);
You have now enabled the ETSI building blocks and configured the sequence of building blocks to execute.
Update the “orchestration_status_state_transition_directive” table
The last step that needs to take in the MariaDB, is to update the state transition table, in order to allow our ETSI Create building blocks to correctly change the operation status of a VNF. If the operation status is not allowed to change correctly, then our ETSI building block will be skipped and will not be executed.
View the current “orchestration_status_state_transition_directive” setup.
select * from orchestration_status_state_transition_directive where RESOURCE_TYPE='VNF' and ORCHESTRATION_STATUS='Created';
Update the row that decides when a “VNF” with an orchestration status of “CREATED” has a target action of “ACTIVATE” to “CONTINUE” instead of “FAIL” using the following command:
update orchestration_status_state_transition_directive set FLOW_DIRECTIVE='CONTINUE' where RESOURCE_TYPE='VNF' and ORCHESTRATION_STATUS='CREATED' and TARGET_ACTION='ACTIVATE' and FLOW_DIRECTIVE='FAIL';
The transition directive is now set up correctly, allowing all of your ETSI building blocks to be executed correctly.
Adding your VNFM to ONAP ESR
Now you will need to send a curl command to A&AI, in order to add the VNFM to ESR/A&AI.
Please ensure you have ESR added to your ONAP installation before attempting this step. Next, you will need to populate the ESR VNFM List with information relating to the VNFM that you want to instantiate your VNFs through.
Adding your VNFM to ONAP ESR using CURL:
In order to use the curl command method, you will need to log into an ONAP pod, that is within your ONAP network. (This prevents us needing to go and get the AAI service IP and external port.)
You can log into one of your pods with the following command (this example will use the BPMN-INFRA pod):
kubectl -n onap get pods | grep bpmn
Then take the full pod name and put it into this command instead of <PODNAME>:
kubectl -n onap exec -it <PODNAME> sh
Once Exec’ed into the pod you can run the following command which creates a VNFM, in ESR, with ID “ExampleVnfm”. (Edit this curl command to your needs before using it)
curl -X PUT -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/external-system/esr-vnfm-list/esr-vnfm/ExampleVnfm -d '{"vnfmId": "ExampleVnfm", "name": "ExampleVnfmName", "type": "ExampleVnfmType", "vendor": "est"}'
One important thing to note in this curl command is the type: “ExampleVnfmType”. This will be used in a later step for specifying which VNFM you want to instantiate through, take note of this.
Once you have entered the previous information you need to add the “service-url” to your “esr-system-info” section of this VNFM you just added. Please note, that the “service-url” in the following curl command was designed to work with the “so-vnfm-simulator”, you will need to change this to match your specific VNFM’s “service-url”.
You will need to put this data into the “external-system” and “cloud-infrastructure” API paths listed below. This is done with the following curl commands:
AAI Cloud-Infrastructure
curl -X PUT -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/<CLOUD_OWNER>/<CLOUD_REGION_ID>/esr-system-info-list/esr-system-info/ExampleVnfm -d '{"name": "ExampleVnfm", "system-type": "ExampleVnfmType", "vimId": "myCloud", "vendor": "EST", "version": "V1.0", "certificateUrl": "", "url": "http://so-vnfm-simulator.onap:9095/vnflcm/v1/", "user-name": "testUser", "password": ""}'
Please note you will need to replace <CLOUD_OWNER> and <CLOUD_REGION_ID> with their respective values in your ONAP deployment.
AAI External-System
curl -X PUT -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/external-system/esr-vnfm-list/esr-vnfm/ExampleVnfm/esr-system-info-list/esr-system-info/ExampleEsrSystemInfo -d '{"esr-system-info-id": "ExampleEsrSystemInfo", "type": "ExampleVnfmType", "user-name": "user", "password": "password", "system-type": "VNFM", "service-url": "http://so-vnfm-simulator.onap:9095/vnflcm/v1"}'
You have now entered your VNFM into the ESR/AAI components.
Here are the equivalent GET commands for checking what is currently in your ESR/AAI list (change the IDs to match the IDs you used earlier):
curl -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/external-system/esr-vnfm-list/
curl -H 'Accept: application/json' -H 'Authorization: Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==' -H 'Content-Type: application/json' -H 'X-FromAppId:12' -H 'X-TransactionId: 12' https://aai.onap:8443/aai/v15/external-system/esr-vnfm-list/esr-vnfm/ExampleVnfmId/esr-system-info-list/esr-system-info
Upload VNF Image to VNFM
Currently, there is no implementation of the package management interface in the SO-ETSI-SOL003-Adapter, this means that the VNF image needs to be onboarded to your VNFM before instantiation. The VNF image will then be selected by using the VNF descriptor, found in one of the artifacts within the SDC onboarding package, mentioned later in this guide (“descriptor.yaml”).
This is an important step, which unfortunately can be drastically different depending on the specific vendor’s VNFM.
Onboarding a Virtual Software Product (VSP) with an ETSI HEAT Template.
Onboard a VNF package along with a Network Service CSAR into SDC. A video demonstration of this process “Onboarding ETSI Based NS” can be found under SO NFVO NS Onboarding and LCM Demonstrations It is recommended that you view this video before/alongside this section of the guide.
Step 1:
Login to the ONAP Portal. (Link: https://portal.api.simpledemo.onap.org:30225/ONAPPORTAL/login.htm (where “portal.api.simpledemo.onap.org” is set as the IP of your VM/host of your Portal component.)
Login: cs0008 Password: demo123456!
Step 2:
Select the SDC App. It is possible that your browser will block the scripts run by the Portal, you will need to enable them if it does.
Step 3:
Onboarding your VNF: 1: Click the “ONBOARD” tab near the top of the window. 2: Create a “VLM” if you have not created a “VLM” before.
From the “ONBOARD” page, click create VLM.
Enter name and description, then select create.
Click on the plus button beside Entitlement Pool.
Add Name and Manufacturing Reference Number, then click save.
Click on the plus button beside License Key Groups.
Add Name and select type, then click save.
Click on the plus button beside Feature Groups.
In the general tab, add name, Description and Part Number. Move to the Entitlements Pools tab, select the entitlement pool you just created and click the rightward arrow. Move to the License Key Group tab, select the license key group you just created and click the rightward arrow. Once these three things are done, click save.
Click on the plus button beside License Agreement.
Add Name and select License Term. Next move to the Feature Groups tab, select the Feature Group you just created and click the rightward arrow. Lastly click save.
On the overview page, select submit in the top right corner of the screen.
Enter a commit comment and click Commit & Submit.
3: Create a Virtual Service Product (VSP)
Click the “ONBOARD” tab near the top of the window.
Click “CREATE NEW VSP” and fill in the required information. Make sure to select “Network Package” for the “ONBOARDING PROCEDURE” section. Then click “CREATE”.
Click where it shows “! Missing” underneath “License Agreement”. Simply select a “Licensing Version” and “License Agreement/Feature Group” from the drop downs.
Click the “Overview” tab on the left hand side. Then press “Select File” in the “SOFTWARE PRODUCT ATTACHMENTS” section and select your prepared VNF Package. If you are onboarding a supported zip, then click “PROCEED TO VALIDATION” once you can see your added files. You can safely ignore any warnings that come up at this step, but not any errors. (Note: The package validation does not support CSARs currently, they will still work however, providing they meet SDC requirements.)
Now click “Submit”.
4: Then click “ONBOARD” in the top left. Hover your mouse over the small grey triangle that is just to the right of the “ONBOARD” tab and select “HOME”.
5: Hover over the “IMPORT” square and select “Import VSP”. Find your VSP, click the drop-down arrow beside it and then press the “Import VSP” icon at the far right of the line that drops down.
6: You will now be brought to the draft page of your VF. You can now Certify your VF, by clicking “Certify” in the top-right of the VF Page.
Creating/Configuring your SDC Service:
Step 1:
In the “HOME” tab of the SDC ONAP Portal, hover over the “ADD” square and select “ADD SERVICE”. Fill in the required fields, select the “Category” “Network Service” and press “Create” in the top right-hand corner.
Step 2:
You will be brought to the draft page of your Service. Go to the “Composition” tab on the left-hand side and drag/drop the VF, that you just created, into this service (you can search for the VF by name in the top left).
Step 3:
Now you will need to add the Network Service CSAR package to this service. You can do this by clicking in the blank whitespace of the composition, then on the right hand side of the page select the 2nd tab in order to add a deployment artifact. Click “ADD ARTIFACT” here, give an “Artifact Label” of “ns”, any description value and ensure you choose a “Type” of “OTHER”. Then click “DONE”.
Step 4:
Finally you can click “Certify” in the top right hand corner, followed by “Distribute”. Your Service will now distributed across ONAP.
Preloading SDNC (Optional)
This next step is optional, and is only required if a user needs to add “addiional-params” or “virtual-link” information. You will need to preload SDNC with the required attributes for your VNF. You will need to access the SDNC OpenDaylight RestConf API Documentation in order to add these attributes.
You will then be required to sign in once you access this site, the credentials are as follows, but may change in the future:
Username: admin
Password: Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
Next click on VNF-API.
Then use the following endpoint to post the preload JSON, found below.
Endpoint: restconf/operations/VNF-API:vnf-topology-operation
The following section of code is an example of the JSON that needs to be uploaded to the SDNC OpenDaylight RestConf API Documentation site.
Please note that you will need to set the attributes “generic-vnf-name” and “vnf-name” to the exact name that you will use when instantiating the VNF through VID. The attributes “generic-vnf-type” and “vnf-type” need to have the exact same name as the VSP that you imported to SDC, to create the VF.
Preload for SDNC:
{
"input": {
"request-information": {
"notification-url": "openecomp.org",
"order-number": "1",
"order-version": "1",
"request-action": "PreloadVNFRequest",
"request-id": "robot21"
},
"sdnc-request-header": {
"svc-action": "reserve",
"svc-notification-url": "http://openecomp.org:8080/adapters/rest/SDNCNotify",
"svc-request-id": "robot21"
},
"vnf-topology-information": {
"vnf-assignments": {
"availability-zones": [],
"vnf-networks": [],
"vnf-vms": []
},
"vnf-parameters": [{
"vnf-parameter-name": "additionalParams",
"vnf-parameter-value": "{\"key_1\": \"value_1\"}"
}, {
"vnf-parameter-name": "extVirtualLinks",
"vnf-parameter-value": "{}"
}],
"vnf-topology-identifier": {
"generic-vnf-name": "VnfInstantiateName",
"generic-vnf-type": "VspPackageName",
"service-type": "vCPE",
"vnf-name": "VnfInstantiateName",
"vnf-type": "VspPackageName"
}
}
}
}
The datatype of “additionalParams” and “extVirtualLinks” can be found in the Sol003 Specifications.
The data must be JSON and contain only escaped strings. Here are examples of both:
Example of additionalParameters parameter:
{\"enableRollback\": \"false\"}
Example of extVirtualLinks Parameter:
[{\"id\":\"3b94d0be-6e37-4a01-920f-512e96803fc9\",\"tenant\":{\"cloudOwner\":\"CloudOwner\",\"regionName\":\"RegionOne\",\"tenantId\":\"f3d66580-7eff-4da5-8d27-91f984ad0c0b\"},\"resourceId\":\"e6e1a04d-c599-4b09-bc16-688834d0ac50\",\"extCps\":[{\"cpdId\":\"a83f86e0-7e9b-4514-9198-2d9eba91bd8e\",\"cpConfig\":[{\"cpInstanceId\":\"f966673d-fb96-41d4-8e5c-659f1c8c6bcc\",\"linkPortId\":null,\"cpProtocolData\":null}]}],\"extLinkPorts\":null}]
Using VID to send Instantiate Request
In order to access the VID (Virtual Infrastructure Deployment) component through the portal, you will need to login with the id “demo”. Once logged in to VID, first ensure that the GR-API is set. First we will need to instantiate the service, once this is done we can then instantiate the VNF. This will be when the ETSI Workflows are run.
Deploy SDC Service
You will need to select “Deploy an SDC Service” on the left-hand side of the GUI. You should see your distributed service in the list of services shown here. (Note: if you cannot see your services here then you will need to go back to SDC, to check the status of the distribution.)
Press “Deploy” on the left-hand side of the service you have distributed.
Fill out the required fields and press “Confirm”.
Wait for the Service to be instantiated.
Press “Close” at bottom of pop-up window.
Now you should be brought to the “View/Edit Service Instance” page, focused on the service you just instantiated.
Instantiate VNF:
Press “Add node instance” and select your VNF.
Fill out the required fields and press “Confirm”.
Leave this VID page open, as this step can take quite some time, depending on a number of factors.
Monitor the VNF instantiation through your VNFM GUI and back through the SO-ETSI-SOL003-Adapter logs and finally the BPMN logs.
Upon success, your VNF should be instantiated correctly.
Delete VNF:
Travel back to the service instance that you instantiated your VNF through.
Simply select the red X on the right-hand side of the VNF instance.
The VNF should begin terminating now, it may take quite some time, depending on a number of factors.
Monitor the VNFM GUI and other logs until success.
Monitoring Logs (BPMN, SO-ETSI-SOL003-ADAPTER and VNFM)
There are 3 stages of logs to monitor throughout the process of instantiating your service, and sending your request through the SO-ETSI-SOL003-Adapter, to your VNFM.
The initial service instantiation request will be recorded in the BPMN-INFRA pod’s logs. Logging into this pod will enable you to view them through the “debug.log” file.
The VNF instantiation request will appear first in the BPMN-INFRA pod’s logs, then once the ETSI Building Block is being executed you will see entries going through the SO-ETSI-SOL003-Adapter pod’s logs. Followed finally by the VNFM itself receiving a request from the SO-ETSI-SOL003-Adapter. This should all be recorded throughout the “debug.logs” on each of the mentioned pods.
The other areas to monitor would be your VNFM’s GUI (if applicable), your Openstack Tenant’s logs as well as it’s server list and the SO-Admin-Cockpit tool (in order to see the BPMN flow’s progress).
Example Zip VNF Package
Please follow the structure laid out below for creating your onboarding package.
Structure:
5 files (2 .yaml, 1 .meta, 1 .json, 1 .env)
base.yaml
descriptor.yaml
base.env
MANIFEST.json
TOSCA.meta
Compressed in a Zip folder.
No directories. (Flat structure)
Files:
base.yaml - This file will be a very simple HEAT template, as it is just required in order to be able to instantiate the Service once its distributed.
descriptor.yaml - This file will contain the VNFD (Virtual Network Function Descriptor). It must be structured to match what the SO-ETSI-SOL003-Adapter searches for.
base.env - This file simply contains some environment variables for the base.yaml.
MANIFEST.json - This file lists all of the other files contained within it’s package.
TOSCA.meta - This important file contains the path of the VNFD, which will be used by the SO-ETSI-SOL003-Adapter.
Please find example versions of the files below:
base.yaml
heat_template_version: 2013-05-23
description: Simple template to deploy a single compute instance
parameters:
simple_name_0:
type: string
label: Key Name
description: Name of key-pair to be used for compute instance
simple_key:
type: string
label: Key Name
description: Name of key-pair to be used for compute instance
simple_image_name:
type: string
label: Image ID
description: Image to be used for compute instance
simple_flavor_name:
type: string
label: Instance Type
description: Type of instance (flavor) to be used
vnf_id:
type: string
label: VNF ID
description: The VNF ID is provided by ONAP
vf_module_id:
type: string
label: vFirewall module ID
description: The vFirewall Module ID is provided by ONAP
simple_netid:
type: string
label: Netid
description: netid
public_net_id:
type: string
label: Netid
description: public NetId
ves_ip:
type: string
label: Netid
description: public ves_ip
node_ip:
type: string
label: Netid
description: public ves_ip
resources:
simple_0_private_port:
type: OS::Neutron::Port
properties:
network: { get_param: simple_netid }
fixed_ips:
- ip_address: { get_param: node_ip }
simple_0:
type: OS::Nova::Server
properties:
availability_zone: nova
key_name: { get_param: simple_key }
image: { get_param: simple_image_name }
flavor: { get_param: simple_flavor_name }
name: { get_param: simple_name_0 }
metadata: {vnf_id: { get_param: vnf_id }, vf_module_id: { get_param: vf_module_id }}
networks:
- port: { get_resource: simple_0_private_port }
user_data_format: RAW
user_data:
str_replace:
params:
__ves_ip__: { get_param: ves_ip }
__vnfId__: { get_param: vnf_id }
template: |
#!/bin/bash
echo "the value we got for vndID was : __vnfId__" >> /tmp/vnfid.log
outputs:
oam_management_v4_address:
description: The IP address of the oam_management_v4_address
value: { get_param: node_ip }
descriptor.yaml
tosca_definitions_version: tosca_simple_yaml_1_1
imports:
- etsi_nfv_sol001_vnfd_0_10_0_type.yaml
node_types:
Wiki.Demo.VnfmImageId:
derived_from: tosca.nodes.nfv.VNF
properties:
descriptor_id:
type: string
constraints: [ valid_values: [ VnfmImageId ] ]
default: VnfmImageId
The “descriptor.yaml” is the most important file within the package, as it provides the ID/Name of the VNF package for the VNFM to use when instantiating. It must follow the structure above, or the SO-ETSI-SOL003-Adapter will not be able to locate the VNFD.
Don’t forget to replace “VnfmImageId” with the ID of your VNF package.
base.env
parameters:
simple_image_name: UBUNTU16
simple_flavor_name: m1.small
simple_name_0: SIMPLEUBU
simple_key: demo-key
vnf_id: VESMED
vf_module_id: vfModuleId
simple_netid: onap_vip
public_net_id: nova_floating
ves_ip: 172.55.10.10
node_ip: 172.55.10.10
MANIFEST.json
{
"name": "MMEPackage",
"description": "Test",
"version": "0.0",
"data": [{
"isBase": true,
"file": "base.yaml",
"type": "HEAT",
"data": [{
"file": "base.env",
"type": "HEAT_ENV"
}]
},
{
"file": "descriptor.yaml",
"type": "OTHER"
},
{
"file": "TOSCA.meta",
"type": "OTHER"
}]
}
TOSCA.meta
TOSCA-Meta-File-Version: 1.0
CSAR-Version: 1.1
Created-by: Demo
Entry-Definitions: Artifacts/Deployment/OTHER/descriptor.yaml
The MANIFEST.json and TOSCA.meta are extremely important, if either are incorrectly formatted it will either fail to onboard or fail to distribute when you get to that step.
Ensure that the file names all match and your indentation/quotes are all correct, as it will save you a lot of time.
ASD Architecture
ASD Overview
Application Service Descriptor (ASD) is a deployment descriptor for cloud native application/functions. It seeks to provide deployment using the minimum information needed by the orchestrator. The CSAR package adheres to ETSI SOL004. ASD minimizes duplication whilst leveraging the management capabilities of the Kubernets platfor. It provides a clear separation between high level orchestration and cloud native application deployment.
ASD Architecture Overview
The following diagram depicts the ASD high-level architecture:
CreateVfModuleVolumeInfraV1 is a main process flow.

ASD Onboarding
The following diagram depicts the ASD onboarding to ONAP SDC:

ASD Orchestration by ONAP SO
The following diagram depicts the ASD Orchestration by ONAP SO:

SO CNFM
The following diagram depicts the SO CNFM, an SO Plug-in component:

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;
MariaDB [catalogdb]> select * from identity_services;
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
-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).
http://request-db-adapter:8083/infraActiveRequests/requestid (GET), which will return a 404 if not exists.
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.
A new InfraActiveRequests object is created. And all the necessary information from the input is set to it.
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.
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.
serviceInstanceName is derived from requestInfo.instanceName and is set.
Request json is also set as RequestBody of InfraActiveRequests.
# 5. Checks fro whether duplicate name exists.
version v[integer] is converted to the particular integer and stored.
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.
Checks whether the service already exists in catalogdb http://catalog-db-adapter:8082/service/{modelNameVersionId} (GET).
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.
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.
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.
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
bpmnRequest - formed from input request.
vfModuleId, pnfCorrelationId, networkId, configurationId, vfModuleType, serviceInstanceId , serviceType are updated if present in the input json or else set to empty string.
apiVersion , requestId, aLaCarte = false (def), recipeTimeout = 180(def) ,requestAction= createInstance are all updated accordingly.
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

# 10.1. RetrieveBBExecutionList - implemented in selectExecutionList in WorkflowAction.java
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)?)] .
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.
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.
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.
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
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.
![]()
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.
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.
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.
Depending on the current sequence , the building block is selected from the flows to execute.
Execution variable, that is passed between the different building blocks as the payload is amended as: execution.setVariable(“buildingBlock”, buildingblockselected).
current sequence is incremented by 1, and updated in execution variable.
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
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.
Percentage progress is got from the total no of bbs
These are ammended to the already present request in the request db
# 10.6. Execute BB - calls the ExecuteBuildingBlock.bpmn
Hits ExecuteBuildingBlock.bpmn

# 10.6.1. BBInputSetup - implemented in execute in BBInputSetup
Here a generalbuildingblock is formed from executingbuildingblock after certain updations and validations.
lookupKeyMap is formed from the input , and a map is formed with serviceInstanceId, networkID, vnfID, pnfID, vfmoduleID, volumegroupID, configurationID, instancegroupID as the keys.
Depending on whether a la carte or macro , different flows are called. getGBBMacro is called in here.
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
project and owningEntity is updated from the input
service is got from the catalog db either by ModelVersionId or by ModelVersion and ModelInvariantId.
ServiceInstance is created from the above parameters, and this ServiceInstance is used in the preparation of general building block.
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)
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
orchestrationStatus is obtained after checking the resource type. We had updated the orchestrationStatus in the above step when a new service instance was created.
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
orchestrationStatusValidationResult parameter is set to executionvariable from the OrchestrationStatusStateTransitionDirective.getFlowDirective() “flowDirective” : “CONTINUE”
# 10.6.3. Prevalidate the gBuildingBlockExecution
# 10.6.4. BB To Execute: Depending on which building block is to be executed, that particular bpmn is called .In this case, AssignServiceInstanceBB is called
# 10.6.4.1. AAI create service subscription - implemented in createServiceSubscription of createAAITasks
This method is used for creating and subscribing the service in A&AI
Customer is got from the general building block that was updated above
Here a serviceSubscriptionURI is formed by taking in the globalSubscriberId and the serviceType
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
Customer is got from the general building block that was updated above
A serviceInstanceURI is formed by taking in the globalSubscriberId, the serviceType and the service instance id
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
OwningEntityId and OwningEntityName is extracted from the OwningEntity given in the input json
If both of them are null, then an exception is raised.
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
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
Here first the requestContext, serviceInstance, customer are obtained from the general building block
Then a payload for the assignServiceInstance of the sdnc is formed by passing in the above parameters to the assignServiceInstance in sdncSIResources.
A new sdnc request is formed with the above thing as payload
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
Setup callback variables - Here mainly the correlator variable and the sdnc timeout variable is set
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
Here first the request is got from the requestDbclient http://request-db-adapter:8083/infraActiveRequests/requestid
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
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”);
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 )
AssignVolumeGroupBB :
genericvnfid and volumegroupid is obtained from the execution block.
volumegroup orchestrationstatus is set to assigned
a volume group of the above details is created in aai
connect volumegroup to this genericvnf
cloud configuration is got, and then the volumegroup is linked to tenant
createVolumeGroupBB :
get the vf details according to Vf module id from sdnc.
vfmodulequeriedfromsdnc is set to the executionvariable.
createVolumeGroupRequest is formed with getCloudRegion, serviceinstance, genericVnf, volumegroup, sdncVfModuleQueryResponse.
calls vnfadapter, which in turn calls openstackadaptertask.
update heattask in the volumegroup and which is ammended in the aai.
orchestrationstatus for the volume group is set to created.
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.
![]()
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

Once Error handling subprocess has set handlingCode to retry value, the main process retries to execute previous failing BB (green arrow).

If a new failure occurred a new retry is performed (green arrow in Error handling subprocess)

Until max retry count is reached, this time secondary policy will be queried.

HandlingCode is now set with secondary policy value from rainy_day_handler_macro table (rollback, abort…)

# 2. In case of rollback handling code
Policy in rainy_day_handler_macro table for current BB failure is set to Rollback (or RollbackToXXX)
In case of Rollback the main process follows green arrows
![]()
HandlingCode set previously in Error handling subprocess to Rollback (or RollbackToXXX) drives to RollBack Execution Path in main process
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
and 4. Loop on step 3 and step 4, BB are executed one after one in order to rollback previous flow execution.
RollBack completed.
# 3. In case of Abort handling code
Policy in rainy_day_handler_macro table for current BB failure is Abort

Suppress Rollback
Request can disable rollback with suppressRollback parameter
if suppressRollback is set to false value, QueryRainyDayTable task will directly return abort without querying policy in table rainy_day_handler_macro
curl --location --request POST 'http://master2:30277/onap/so/infra/serviceInstantiation/v7/serviceInstances' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic abcdef' \
--header 'X-ONAP-PartnerName: NBI' \
--data-raw '{
"requestDetails": {
"subscriberInfo": {
"globalSubscriberId": "ones"
},
"requestInfo": {
"suppressRollback": false,
"productFamilyId": "Useless_But_Mandatory",
How to Build software without unit tests
cd $HOME/onap/workspace/SO/libs
$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml -DskipTests -Dmaven.test.skip=true clean install
cd $HOME/onap/workspace/SO/so
$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml -DskipTests -Dmaven.test.skip=true clean install
How to Build docker images
SO docker images are built using the “docker” maven profile.
During the build, the chef-repo and so-docker repositories are cloned from gerrit into the “so” directory structure. Extra definitions are required in the build environment to make this happen. You may need to adjust the definition of mso.chef.git.url.prefix to match the way you authenticate yourself when performing git clone –depth 1.
If you are behind a corporate firewall, you can specify proxy definitions for the constructed docker images.
Remove existing docker containers and images
docker stop $(docker ps -qa)
docker rm $(docker ps -aq)
docker rmi -f $(docker images -q)
Build docker images (without proxy definition):
cd $HOME/onap/workspace/SO/so/packages
$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install -P docker
-Dmso.chef.git.url.prefix=ssh://$USER@gerrit.onap.org:29418 -Dmso.chef.git.branchname=master
-Dmso.chef.git.url.suffix.chef.repo=so/chef-repo -Dmso.chef.git.url.suffix.chef.config=so/so-config
-Ddocker.buildArg.http_proxy=http://one.proxy.att.com:8080
-Ddocker.buildArg.https_proxy=http://one.proxy.att.com:8080
Build docker images (with proxy definition):
cd $HOME/onap/workspace/SO/so/packages
$HOME/onap/apache-maven-3.3.9/bin/mvn -s $HOME/onap/.m2/settings.xml clean install -P docker
-Dmso.chef.git.url.prefix=ssh://$USER@gerrit.onap.org:29418 -Dmso.chef.git.branchname=master
-Dmso.chef.git.url.suffix.chef.repo=so/chef-repo -Dmso.chef.git.url.suffix.chef.config=so/so-config
-Ddocker.buildArg.http_proxy=http://proxyhost:port -Ddocker.buildArg.https_proxy=http://proxyhost:port
How to Build with Integration Tests
This is done exactly as described for building docker images, except that the maven profile to use is “with-integration-tests” instead of “docker”. Integration tests are executed inside docker containers constructed by the build.
Service Orchestrator Release Notes
The SO provides the highest level of service orchestration in the ONAP architecture.
Version: 1.11.0
- Release Date:
2022-09-08
SO Release Image Versions
so-bpmn-infra 1.11.0
so-catalog-db-adapter 1.11.0
so-admin-cockpit 1.8.3
so-nssmf-adapter 1.9.1
so-openstack-adapter 1.11.0
so-request-db-adapter 1.11.0
so-sdc-controller 1.11.0
so-sdnc-adapter 1.11.0
so-sol003-adapter 1.8.2
so-api-handler 1.11.0
so-etsi-nfvo-ns-lcm 1.8.2
so-oof-adapter 1.8.3
so-cnf-adapter 1.11.0
Release Purpose
SO Kohn Release. The key deliverable for this release is refactoring SO for better internal architecture.
Epics
REQ-890 - ONAP CNF orchestration - Kohn Enhancements
REQ-1041 - VNF LCM Support in SO
SO-3802 - Global Requirements Approval
SO-3826 - SO impacts for E2E Network Slicing in Kohn Release
Stories
The full list of implemented tasks is available on JIRA Kohn STORY
Tasks
The full list of implemented tasks is available on JIRA Kohn TASKS
Bug Fixes
The full list of fixed bugs is available on JIRA Kohn BUGS
Security Notes
Fixed Security Issues
Quick Links:
Known Issues
Upgrade Notes
N/A
Deprecation Notes
SO modules Ve-Vnfm-adapter and appc-orchestrator are deprectaed since istanbul release.
Other
N/A
Version: 1.10.0
- Release Date:
2022-04-08
SO Release Image Versions
so-bpmn-infra 1.10.0
so-catalog-db-adapter 1.10.0
so-admin-cockpit 1.8.3
so-nssmf-adapter 1.9.1
so-openstack-adapter 1.10.0
so-request-db-adapter 1.10.0
so-sdc-controller 1.10.0
so-sdnc-adapter 1.10.0
so-sol003-adapter 1.8.2
so-api-handler 1.10.0
so-etsi-nfvo-ns-lcm 1.8.2
so-oof-adapter 1.8.3
so-cnf-adapter 1.10.0
Release Purpose
SO Jakarta Release. The key deliverable for this release is refactoring SO for better internal architecture.
Epics
REQ-890 - ONAP CNF orchestration - Jakarta Enhancements
REQ-1041 - VNF LCM Support in SO
SO-3802 - Global Requirements Approval
SO-3826 - SO impacts for E2E Network Slicing in Jakarta Release
Stories
The full list of implemented tasks is available on JIRA Jakarta STORY
Tasks
The full list of implemented tasks is available on JIRA Jakarta TASKS
Bug Fixes
The full list of fixed bugs is available on JIRA Jakarta BUGS
Security Notes
Fixed Security Issues
Quick Links:
Known Issues
Upgrade Notes
N/A
Deprecation Notes
SO modules Ve-Vnfm-adapter and appc-orchestrator are deprectaed since istanbul release.
Other
N/A
Version: 1.9.2
- Release Date:
2021-10-14
SO Release Image Versions
so-bpmn-infra 1.9.2
so-catalog-db-adapter 1.9.2
so-admin-cockpit 1.8.3
so-nssmf-adapter 1.9.1
so-openstack-adapter 1.9.2
so-request-db-adapter 1.9.2
so-sdc-controller 1.9.2
so-sdnc-adapter 1.9.2
so-sol003-adapter 1.8.2
so-api-handler-infra 1.9.2
so-etsi-nfvo-ns-lcm 1.8.2
so-oof-adapter 1.8.3
so-cnf-adapter 1.9.1
Release Purpose
SO Istanbul Release. The key deliverable for this release is refactoring SO for better internal architecture.
Epics
REQ-627 - ONAP CNF orchestration - Istanbul Enhancements
SO-3649 - SO impacts for E2E Network Slicing in Istanbul Release
SO-3637 - Global Requirements Approval
SO-3473 - Refactor SO to enhance the usability
Stories
The full list of implemented tasks is available on JIRA Istanbul STORY
Tasks
The full list of implemented tasks is available on JIRA Istanbul TASKS
Bug Fixes
The full list of fixed bugs is available on JIRA Istanbul BUGS
Security Notes
Fixed Security Issues
Quick Links:
Known Issues
SO-3237 - Exposed HTTP port.
Upgrade Notes
N/A
Deprecation Notes
SO modules Ve-Vnfm-adapter and appc-orchestrator are deprectaed for the Istanbul release.
Other
N/A
Version: 1.8.3
- Release Date:
2021-09-15
SO Release Image Versions
so-bpmn-infra 1.8.3
so-catalog-db-adapter 1.8.3
so-nssmf-adapter 1.8.3
so-openstack-adapter 1.8.3
so-request-db-adapter 1.8.3
so-sdc-controller 1.8.3
so-sdnc-adapter 1.8.3
so-api-handler-infra 1.8.3
Release Purpose
SO Honolulu Maintence Release. The key delivereable for this release is fixing the known issues of H release of SO and sync up with the latest CDS client version.
Epics
N/A
Stories
N/A
Tasks
N/A
Bug Fixes
SO-3626 - SO does not requests CDS for skipPostInstantiation flag set to False.
SO-3628 - SO cannot send CDS request due to grpc schema problem.
SO-3703 - Changes in Modify and Deallocate Core NSST flows
SO-3721 - Fix some attribute issues
SO-3260 - Wrong additional parameter for OOF’s terminateNxiRequest
Security Notes
Fixed Security Issues
Known Security Issues
Known Vulnerabilities in Used Modules
Quick Links:
Known Issues
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: 8.0.0
- Release Date:
2021-04-19
SO Release Image Versions
so-bpmn-infra 1.8.2
so-catalog-db-adapter 1.8.2
so-admin-cockpit 1.8.2
so-nssmf-adapter 1.8.3
so-openstack-adapter 1.8.2
so-request-db-adapter 1.8.2
so-sdc-controller 1.8.2
so-sdnc-adapter 1.8.2
so-sol003-adapter 1.8.2
so-api-handler-infra 1.8.2
so-etsi-nfvo-ns-lcm 1.8.2
so-oof-adapter 1.8.3
so-cnf-adapter 1.9.1
Release Purpose
SO Honolulu Release. The key delivereable for this release is refactoring SO for better internal architecture.
Epics
SO-3473 - Refactor SO to enhance the usability
SO-3381 - SO Impacts for E2E Network Slicing in Honolulu
SO-3206 - Support for NS LCM and Workflows Management
SO-3493 - Java 11 and Python 3 upgrades
Stories
The full list of implemented tasks is available on JIRA Honolulu STORY Listed below are key functional jira stories handled in the Honolulu release:
Tasks
The full list of implemented tasks is available on JIRA Honolulu TASKS
Bug Fixes
The full list of fixed bugs is available on JIRA Honolulu BUGS
Security Notes
Fixed Security Issues
Known Security Issues
Known Vulnerabilities in Used Modules
Quick Links:
Known Issues * SO-3628 - SO cannot send CDS request due to grpc schema problem. * SO-3626 - SO does not requests CDS for skipPostInstantiation flag set to False. * SO-3237 - Exposed HTTP port.
Upgrade Notes
N/A
Deprecation Notes
SO modules Ve-Vnfm-adapter and appc-orchestrator are deprectaed for the Honolulu release.
Other
N/A
Version: 1.7.10
- Release Date:
2020-11-19
SO Release Image Versions
so-bpmn-infra 1.7.10
so-catalog-db-adapter 1.7.10
so-monitoring 1.7.10
so-nssmf-adapter 1.7.10
so-openstack-adapter 1.7.10
so-request-db-adapter 1.7.10
so-sdc-controller 1.7.10
so-sdnc-adapter 1.7.10
so-vnfm-adapter 1.7.10
so-api-handler-infra 1.7.10
so-api-handler-infra 1.7.10
so-so-etsi-nfvo-ns-lcm 1.7.7
so-so-oof-adapter 1.7.6
so-cnf-adapter 1.7.10
Release Purpose
SO Guilin Release
Epics
SO-3167 - Design ETSI SOL007 compliant Network Service Descriptor packages
SO-3208 - SOL003 Adapter maintenance Enhancements
SO-3036 - SO impacts for E2E Network Slicing use case in Guilin
SO-2936 - PNF PnP: SO macro flow - use existing PNF instance in a Service Instance
SO-2843 - Support NS LCM and Workflows Management
SO-2842 - Support for SOL005 NBI API Handler
SO-2841 - Support SO NFVO Microservice Plugin Capabilities
SO-2840 - Support for ETSI NFV NFVO Orchestrator in ONAP SO (ONAP SO ETSI-Aligned Hierarchical Orchestration)
SO-2681 - SO direct Catalog Management Support - Guilin
SO-2046 - support Java 11 upgrade
Stories
The full list of implemented tasks is available on JIRA GUILIN STORY Listed below are key functional jira stories handled in the Guilin release:
SO-2950 - Asynchronous service activation response handling support in MDONS
SO-3028 - SO supports the OVP 2.0 test platform
SO-2930 - Service level workflow execution API
SO-2929 - Service level workflow retrieving API
SO-2928 - Service model retrieving API
SO-2927 - Generic service level upgrade workflow
SO-2926 - New Service Level postCheck building block
SO-2925 - New Service Level Upgrade building block
SO-2924 - New Service Level Preparation building block
SO-2981 - PNF Plug & Play in R7 - SO Building Block Work
SO-3026 - Adapter for the SO to interact with the K8S plugin
SO-3025 - SO should support CNFO
SO-3039 - Containers must crash properly when a failure occurs
SO-3040 - ONAP container repository (nexus) must not contain upstream docker images
SO-3029 - SO support Multi Tenancy
SO-3077 - ONAP shall use STDOUT for logs collection - REQ-374
Tasks
The full list of implemented tasks is available on JIRA GUILIN TASKS Listed below are highest and high piority jira tasks handled in the Guilin release:
SO-3205 - E2E Network Slicing: Improvements for NST/NSI Selection callback
SO-3120 - Create swagger api for software upgrade in SO
SO-2915 - Upgrade Vulnerable Direct Dependencies
Bug Fixes
The full list of fixed bugs is available on JIRA GUILIN BUGS Listed below are highest and high piority jira tasks handled in the Guilin release:
SO-3375 - FlowManipulatorListenerRunner does not invoke for controller execution config-deploy
SO-3369 - Fix basic vm test case in onap
SO-3364 - SO sends rest request to cds twice per one operation
SO-3360 - SO-OpenStack-Adapter attempts to create wrong vserver-to-vnfc relation in AAI
SO-3357 - ControllerExecutionBB is triggered, when running a`la carte DeleteVFModule
SO-3352 - Exception in org.onap.so.bpmn.infrastructure.workflow.tasks.OrchestrationStatusValidator.validateOrchestrationStatus Orchestration Status Validation failed
SO-3351 - Staging image is present in OOM master branch
SO-3346 - vFW CNF AssignVfModuleBB has failed
SO-3342 - VnfAdapter is configured by default to v1 version whereas v2 version is more complete
SO-3341 - Exception of Writing NSSI to AAI for ExternalNssmfManager
SO-3339 - Transport Slicing integration: network-policy is missing under allotted-resource
SO-3326 - Transport Slicing integration: AAI Exception in DeAllocate TN NSSI WF
SO-3322 - PNF service instantiation using building blocks fails during ActivateServiceInstanceBB building block execution
SO-3321 - Transport Slicing integration: SO sets wrong subscription-service-type in SDNC payload
SO-3313 - SO getting disto error while SDC distribution
SO-3310 - Transport Slicing Integration: null pointer exception in saving SDNC rollback data
SO-3309 - Transport Slicing integration: unable to get prefix environment variable from execution in TnNssmfUntils
SO-3308 - Transport Slicing integration: MSOWorkflowException: mso-request-id not provided
SO-3304 - Exception in org.onap.so.bpmn.infrastructure.aai.tasks.AAICreateTasks.createServiceInstance ModelMapper configuration errors
SO-3296 - SO has python 2.7 pods
SO-3294 - Parameters exception of Deallocating NSSI
SO-3293 - Allocate TN NSSI fails to create relationship between allotted-resource and logical-links
SO-3290 - SO-VNFM certificates expired
SO-3284 - Exceptions in Allocate TN NSSI work flow
SO-3275 - Fix 3gppservices URI path in API-Handler
SO-3274 - Parameters exception of Allocating NSSI
SO-3271 - SO/BB PNF - skip_post_instantiation_configuration is not processed properly.
SO-3270 - BB workflow failing sporadically during post instantiation
SO-3266 - BPMN config assign bb - NullPointerException in ControllerExecution
SO-3261 - Encountering NullPointerException, WorkFlow failure after Java 11 upgrade Code refactorig on SO-bpmn-infra code base.
SO-3243 - SO-bpmn-infra Container after Java 11 upgrade encountering SunCertPathBuilder Exception: unable to find valid certification path to requested target in CSIT
SO-3236 - SO has java 8 pods
SO-3216 - Integration E2E VNF test fails due to missing EdgeRule in AAI call
SO-3196 - [SO] so-sdc-controller fails to connect to aai due to cert issue
SO-3193 - Macro Workflow fails in AssignVnfBB in step HomingBB
SO-2941 - Docker are not built anymore
SO-2939 - Master branch uses SNAPSHOT version that are not available anymore
SO-2809 - SO build is failing due to unable to download org.onap.appc.client:client-lib:jar:1.7.1-SNAPSHOT
SO-2797 - BB workflow with post instantiation is not working
Security Notes
Fixed Security Issues
Known Security Issues
Known Vulnerabilities in Used Modules
Quick Links:
Known Issues * SO-3403 - The functionality of the SO cnf-adapter will be tested further and will be delivered by the Guilin Maintenance Release as a 1.7.11 patch. * SO-3237 - Exposed HTTP port. * SO-3414 - Search Query does not contain get model data for vFW closed loop.
Upgrade Notes
N/A
Deprecation Notes
SO modules Ve-Vnfm-adapter and appc-orchestrator are deprectaed for the Guilin release.
Other
N/A
Version: 1.6.4
- Release Date:
13th July 2020
SO Release Image Versions
onap-so-api-handler-infra
onap-so-bpmn-infra
onap-so-catalog-db-adapter
onap-so-openstack-adapter
onap-so-request-db-adapter
onap-so-sdc-controller
onap-so-sdnc-adapter
onap-so-so-monitoring
onap-so-vfc-adapter
onap-so-vnfm-adapter
onap-so-ve-vnfm-adapter
onap-so-nssmf-adapter
onap-so-appc-orchestrator
Release Purpose
The main goal of the Frankfurt maintenance release was to:
Appc Orchestraor changes were merged in SO and OOM as part of the release. This also used for the inplace software update flows.
MDONS had an issue in its delete flow that was addressed.
Vnfm-Adapter was unable to communicate with ETSI-Catalog through MSB, as the MSB cert is changed during the RC2 and this impacted the SO and ETSI Catalog DB connectivity.
New Features –N/A– Epics –N/A– Stories –N/A– Key Issues Addressed
[SO-2903] - Include so-appc-orchestrator with SO OOM.
[SO-2967] - Error in Delete MDONS service flow which causes No such property error.
[SO-2982] - Vnfm-Adapter unable to communicate with ETSI-Catalog through MSB.
[SO-3022] - Use BB-based VNF-InPlaceUpdate flow for inPlaceSoftwareUpdate requests.
Security Notes
Quick Links:
Known Issues
OJSI Issues
N/A
Upgrade Notes
N/A
Deprecation Notes
N/A
Other
N/A
Version: 1.6.3
- Release Date:
SO Release Image Versions
onap-so-api-handler-infra
onap-so-bpmn-infra
onap-so-catalog-db-adapter
onap-so-openstack-adapter
onap-so-request-db-adapter
onap-so-sdc-controller
onap-so-sdnc-adapter
onap-so-so-monitoring
onap-so-vfc-adapter
onap-so-vnfm-adapter
onap-so-ve-vnfm-adapter
onap-so-nssmf-adapter
Release Purpose
- The main goal of the Frankfurt release was to:
- ETSI alignment improvements - CMCC, Ericcson, Huawei, Samsung, Verizon, ZTE.
SOL005 adaptation
SOL003 adaptation
SOL002 adaptation
SOL004 Package support by ETSI Catalog Manager and SOL003 Adapter
- PNF orchestration Enhancements - Ericcson, Huawei, Nokia
PNF software upgrade
PNF PNP enhancement
- CCVPN Enhancement
MDONS support - Fujitsu
Eline support - Bell, Huawei, CMCC
5G Slicing - ATT, Amdocs, CMCC, Huawei, Wipro
CDS integration enhancement - ATT, Bell, Tech Mahindra
(SO Multi Cloud plugin improvements - Intel)
HPA - Intel (Testing effort)
New Features
Features Being considered for F release (As per the resource availability):
SOL005 Adapter supports communication security |
SOL005 Adapter supports NS LCM |
Multi-domain Optical Network Service Orchestration Support in SO |
SOL002 Adapter - supports EM-triggered VNF/VNFC Management |
SO Catalog Management Support |
Frankfurt release planning milestone |
Initiate/ Terminate slice service; Activate/deactivate Slice service |
SO support of Network Slicing Demo in Frankfurt |
ETSI Alignment Support - SOL003 Adapter Enhancement for Frankfurt |
AAI update for VNF improvements |
SO Multicloud plugin to Multicloud improvements |
SO to CDS Enhancement for Generic Implementation |
S3P improvement Requirements |
Upgrade the APIs to Policy |
Epics - [SO-2524] - Functionality and API Freeze - [SO-2519] - TSC must have for Frankfurt - [SO-2432] - Multi-domain Optical Network Service Orchestration Support in SO - [SO-2427] - SOL002 Adapter - supports EM-triggered VNF/VNFC Management - [SO-2404] - SO Catalog Management Support - [SO-2383] - Frankfurt release planning milestone - [SO-2368] - Support 5G slice orchestration - [SO-2281] - SO support of Network Slicing Demo in Frankfurt - [SO-2156] - ETSI Alignment Support - SOL003 Adapter Enhancement for Frankfurt - [SO-2087] - AAI update for VNF improvements - [SO-2086] - SO Multicloud plugin to Multicloud improvements - [SO-2046] - support Java 11 upgrade - [SO-1579] - SO supports ETSI SOL005 Alignment of its interfaces with NFVO
Stories - [SO-2774] - simplify fabric into add/delete steps - [SO-2772] - Add validations to prevent out of order deletes - [SO-2770] - Added support for volume group request to - [SO-2768] - mso vnf configuration update composite flow - [SO-2767] - convert openstack to external tasks - [SO-2763] - Ingest and Process Service Function - [SO-2762] - Update Subprocess to use COMPLETE status - [SO-2761] - Use setVariablesLocal for setting task variables - [SO-2753] - mso to add support for creating the cloud region - [SO-2744] - reworked dsl client code to check for outputs - [SO-2743] - split single and plural graph inventory uris - [SO-2735] - update poms to be compatible with eclipse IDE - [SO-2726] - Added check to prevent camunda history lookup on - [SO-2717] - Added git attributes to convert line endings to - [SO-2715] - Enhance startTime filtering for OrchestrationRequests - [SO-2713] - create custom spring aop annotation for logging - [SO-2700] - mso to store the heat template timeout minutes and - [SO-2697] - Added simpleNotTaskInfo format modifier - [SO-2683] - Enhance CSIT for ETSI package management - [SO-2680] - enhance openstack library - [SO-2675] - Rename migration script - [SO-2674] - mso to add tenant name and product family name to - [SO-2662] - Updated pom to release version of logging library - [SO-2660] - SO API extension to retrieve all PNF workflow - [SO-2657] - mso to add support for creating the cloud region - [SO-2655] - added in graceful shutdown to spring boot - [SO-2653] - Initial commit to check client alive - [SO-2651] - Remove unused param - [SO-2647] - Create ConfigDeployPnfBB - [SO-2646] - Create ConfigAssignPnfBB - [SO-2644] - WaitForPnfReadyBB - set orchestration status to Register and then Registered - [SO-2642] - AssignPnfBB - set orchestration status to Assigned after successful assignment - [SO-2641] - Include AssignPnfBB, WaitForPnfReadyBB, ActivatePnfBB in Service-Macro-Create flow - [SO-2640] - AssignPnfBB - store model related PNF parameters in AAI - [SO-2637] - modifications to create network to add lob - [SO-2623] - Remove Valet from openstack adapter - [SO-2620] - Include stack Status Reason when rollback is - [SO-2616] - add manual handling to rainy day handling for bbs - [SO-2615] - convert bbinputsetup populate methods to use - [SO-2614] - Add Neutron Port and Nova Server to Proxy - [SO-2607] - Create ActivatePnfBB - [SO-2606] - Create WaitForPnfReadyBB - [SO-2605] - AssignPnfBB should make a link in AAI between PNF and service instance - [SO-2603] - Replaced annotation with RepositoryRestResource - [SO-2601] - Use the timeout from the heat template instead of - [SO-2597] - removed powermock dependecy and added it to - [SO-2596] - 1911 create appc adapter micro service - [SO-2591] - mso stores vnf application id from macro create - [SO-2590] - configurable aaf user expires - [SO-2584] - consolidated security configuration - [SO-2577] - Support for volume groups on replace VF Module. - [SO-2572] - Remove references to AIC - [SO-2571] - update so to use 1.6.3 snapshot from the logging - [SO-2570] - Add simple query format, to limit response content - [SO-2568] - Create AssignPnfBB - [SO-2566] - Updated simulator test files - [SO-2565] - Include service-instance-id and - [SO-2564] - Refactor WorkflowAction.valiadteResourceIdInAAI - - [SO-2561] - add application id support to so - [SO-2555] - refactor fallouthandler - [SO-2548] - Terminate Slice Instance - [SO-2547] - Deactivate Slice Instance - [SO-2546] - Activate Slice Instance - [SO-2545] - Instantiate Slice Service - [SO-2540] - SO API extension to retrieve PNF workflow - [SO-2523] - vnf and vf module replace requests to make - [SO-2516] - remove unused columns infra active requests - [SO-2515] - Create E2E workflow for software upgrade (PNF) - [SO-2514] - Create dispatcher class for PNF Software upgrade. - [SO-2511] - Updated to include getEntity extract - [SO-2510] - Updated to use getEntity API for ServiceProxy - [SO-2509] - Updated logging library version to 1.6.2-SNAPSHOT - [SO-2499] - Skip requestId lookup when uri is - [SO-2493] - update so to use most recent update of logging - [SO-2490] - add new query for requestdb - [SO-2488] - refactor repeated duplicate check code to RequestHandlerUtils - [SO-2463] - Add so-simulator project - [SO-2460] - MDONS: L1 Service Termination - [SO-2459] - MDONS: L1 Service Creation - [SO-2444] - update scheduled tasks to have mdc setup - [SO-2442] - Add column to catalog db - [SO-2439] - Authentication and Authorization support between SOL005 Adapter and NFVO - [SO-2438] - Secured communication support between SOL005 Adapter and NFVO - [SO-2428] - SOL002 Adapter subscribes and consumes VNF LCM notifications from VNFM (Frankfurt) - [SO-2426] - feature request to so to save name on deletes - [SO-2412] - SOL003 Adapter Package Management by leveraging ONAP-ETSI Catalog Manager - [SO-2406] - Enhance SO SDC Controller to invoke ONAP-ETSI Catalog APIs - [SO-2399] - Update PNF instance attributes in AAI during instantiation (PnP) workflow - [SO-2398] - Converted tests to use LATEST - [SO-2372] - Validate SO Multicloud plugin adapter with Macro call / gr-api - [SO-2339] - Refactor SO/DMaaP client - move BBS functionality to a workflow Task - [SO-2316] - SO to support CDS Actor for ScaleoutBB - [SO-2312] - SO to CDS Enhancement for Generic Implementation - [SO-2293] - vf-module details in SDNC-Directives to pass through GR-API with v2 - [SO-2208] - Load proper instanceParams of the object being processed to CDS properties - [SO-2165] - Add Config deploy to service-macro-delete and CDS transition directives for vnf - [SO-2091] - Create new SO building blocks - activateNESw - [SO-2090] - SO-CDS PNF Building Blocks back-end impl - [SO-2089] - Create a new SO building block - preCheck - [SO-2073] - Create a new SO building blocks - postCheck - [SO-2072] - Support PNF CM workflow execution - [SO-2071] - SO API extension to support PNF Upgrade - [SO-2070] - a generic decision points for API - [SO-2063] - AAF integration - [SO-1657] - Automated testing for the SO Monitoring component - [SO-1635] - Preload using user_param (without UI changes) - [SO-1420] - SO should be able to decompose a composite service - [SO-1277] - Adapt PNF PnP flow to support updated AAI PNF model - [SO-994] - Sonar Issue: Replace duplicate strings with Constants in ServiceInstances - [SO-929] - Removing Sonar reported Vulnerability in AAIObjectMapper file - [SO-2] - MSO should mount vnfs in appc that appc has to manage
Key Issues Addressed
Security Notes
Quick Links:
Known Issues
[SO-2903] - Include so-appc-orchestrator with SO OOM
OJSI Issues
N/A
Upgrade Notes
N/A
Deprecation Notes
N/A
Other
N/A
Version: 5.0.1
- Release Date:
2019-10-11
SO Release Image Versions
onap-so-api-handler-infra,1.5.3
onap-so-bpmn-infra,1.5.3
onap-so-catalog-db-adapter,1.5.3
onap-so-openstack-adapter,1.5.3
onap-so-request-db-adapter,1.5.3
onap-so-sdc-controller,1.5.3
onap-so-sdnc-adapter,1.5.3
onap-so-so-monitoring,1.5.3
onap-so-vfc-adapter,1.5.3
onap-so-vnfm-adapter,1.5.3
onap-so-vnfm-simulator,1.5.3
Release Purpose
The R5 El Alto release of ONAP is a maintenance release, focusing on deployability, technical debt, and auto test case improvements.
New Features
The main goal of the El-Alto release was to improve documentation, UT improvement for various kinds of resources.
Epics - [SO-1756] - Enhance SO VNFM Adapter
Stories - [SO-2376] - Improve fall out case handling - [SO-2363] - Update Resume Logic and Add Workflow Listeners - [SO-2353] - update logging to match onap logging library - [SO-2352] - Improvements to relationship handling in VNFM adapter - [SO-2332] - Remove unused table requestdb.active_requests. - [SO-2306] - getentity csar logging - [SO-2301] - Integrate Logging Library - [SO-2297] - updated all sql files including in tests to use - [SO-2291] - Created external task utils in a common location - [SO-2283] - Convert NetworkCollection to use GetEntity API. - [SO-2282] - Convert to use the GetEntity API - [SO-2259] - Added default value for when ErrorCode is null in mdc - [SO-2244] - Updated VNF and VfModules to use the getEntity API. - [SO-2233] - fixed dsl builder to correctly add output - [SO-2232] - Initial commit of validation framework to APIH - [SO-2231] - asdc controller treat distributionid as requestid in mdc - [SO-2224] - Updated vnfc instance groups to use the getEntity API. - [SO-2216] - health check now entirely config based - [SO-2205] - add rainy day handling with SERVICE_ROLE and type - [SO-2202] - Updated cvnfc’s to use the getEntity API - [SO-2190] - VNFM adapter support two way TLS - [SO-2180] - Support oauth for calls from VNFM to VNFM adapter - [SO-2169] - Add oauth for calls from VNFM adapter to VNFM - [SO-2157] - Upgrade springboot.version from 2.0.5 to 2.1.5 - [SO-2147] - Converted NetworkResource to use the parser getEntity method - [SO-2143] - Implement TLS for calls into VNFM adapter - [SO-2142] - mso to enhance get orchestration request to include workflow step - [SO-2122] - Added servicename to MDC so that it gets logged and added enter and exit markers - [SO-2121] - Removing the application-local.yaml files from the projects to fix CSO pen test issues - [SO-2116] - Implement TLS for calls from VNFM adapter to VNFM - [SO-2114] - We need to expand column request_status on table archived_infra_requests as well - [SO-2111] - add query stack data and populate table step - [SO-2097] - Global JJB Migration of SO - [SO-2093] - mso will support new requeststate values - [SO-2092] - update bpmn to save extsystemerrorsource - [SO-2080] - support new query param format - [SO-2068] - improved logging when no exception data is found - [SO-2066] - SO API Security Matrix - [SO-2064] - Alpine porting check - [SO-2057] - Update failsafe dependency to 2.0.1 - [SO-2055] - enhance workflowaction to handle resume func - [SO-2054] - add rollback ext system error source - [SO-2052] - Javadoc and logging improvement - [SO-2048] - Building individual repos for reducing compilation time - [SO-2043] - Security updates for maven dependencies - [SO-2035] - update apih to accept new uri parameter - [SO-2032] - support no payload for alacarte deletes - [SO-2024] - Validate ServiceInstance name using createNodesUri. - [SO-2023] - add is_data_internal column to request processing data - [SO-2022] - Validate name for InstanceGroup, Configuration and Network. - [SO-2021] - update multi stage code to accurately skip bbs if true - [SO-2020] - mso to validate the name uniqueness during object creation in a ai - [SO-2018] - Changes related to eviction of connections from connection pool - [SO-2017] - use count format and limit one for exists - [SO-2015] - support async operation for vf module operations with sdnc - [SO-2001] - Added ext_system_error_source column to requestdb - [SO-1999] - replaced String.repeat with static final strings - [SO-1990] - resume request copying request body rewrite requestorid - [SO-1976] - Enhance naming service support - [SO-1975] - Accommodate WAN Networking - [SO-1963] - apih resume request handling more generic - [SO-1960] - apih to populate original request id - [SO-1914] - Renamed NF fields in catalog db pojo - [SO-1902] - Added script for adding original_request_id column - [SO-1898] - Audit service enhancements - [SO-1897] - fix keypair conflict issue in openstack adapter - [SO-1893] - Initial checkin of updates for vf module replace - [SO-1867] - store openstack request status in requestdb - [SO-1866] - Update Rainy day handling to be more robust - [SO-1847] - Added inProgress request check to resume - [SO-1831] - Resume APIH Functionality - [SO-1807] - Store Cloud Request in Database, add to request service - [SO-1697] - Support State transition for configuration building blocks - [SO-1538] - Integration Test for SO VNFM Adapter - Perform the functional test to validate VNFM Adapter NBI and SOL003-based SBI - [SO-1447] - Refine multicloud use of SO cloudsites and identify DB - [SO-1446] - Multicloud API updates for generic clouds
Key Issues Addressed - [SO-2400] - vCPE Create Res Cust Service Error : Execption in create execution list - [SO-2382] - SO ConfigAssign Java Exception - [SO-2378] - Java lang exception in Homing - [SO-2375] - vCPE instantiate gmux fails due to API Handler error - [SO-2357] - Distribution of K8S service fails - [SO-2354] - vCPE model_customization_id not found on create vfmodule - [SO-2351] - SO Distribution Error on Allotted Resource - duplicate primary - [SO-2349] - Exception in DMAAP Client when PNF_READY event arrives from PRH - [SO-2337] - git clone –depth 1 not working for CSIT filename too long - [SO-2289] - CreateVcpeResCustService_simplified workflow used in PnP PNF registration workflow returns an exception in Dmaap listener - [SO-2229] - sdc adapter and openstack container in crash loopback - [SO-2228] - SDC Handler crash loopback - [SO-2222] - SO 1.5.0-STAGING-latest containers fail liveness probe - [SO-2221] - SO 1.5.0-STAGING-latest container fails to start - [SO-2082] - Delete Network does not work correctly - [SO-2038] - Fix build and harkari-cp version, Get LF to add dependency - [SO-2003] - No workflow assigned to ‘Dissociate’ button in VID - [SO-1934] - ETSI Building Block Fails to Execute - Due to variables not being mapped correctly in the workflow - [SO-1892] - CatalogDbClent - sql query error - [SO-1809] - ‘DoDeleteE2EServiceInstance’ calls ‘AAI GenericGetService’ sub-process which is deleted from SO common-bpmn - [SO-1644] - SO doesn’t keep the proxy settings within the containers - [SO-1605] - SO fails on updating Camunda table when DoCreateVfModule for vCPE infra service
Security Notes
Quick Links:
Known Issues
[SO-2063] - AAF integration
[SO-2403] - Not Displaying correct Workflow Name
[SO-2430] - vCPE Create VFmodule Fails on Query to SDNC
[SO-2433] - Not providing user options during Pause For Manual Task
[SO-2434] - Displaying Un-needed Mandatory User Inputs for Workflow with Pause
[SO-1754] - SO-Mariadb: ‘VNF_RESOURCE_CUSTOMIZATION’ DB update bug when service is distributed.
[SO-2447] - Openstack Adatper fails to find Stack Name and creates duplicate stack with address conflict
OJSI Issues
[OJSI-110] - so-monitor exposes plain text HTTP endpoint using port 30224
[OJSI-138] - so exposes plain text HTTP endpoint using port 30277
[OJSI-169] - Port 30224 exposes unprotected service outside of cluster
[OJSI-203] - SO exposes unprotected APIs/UIs (CVE-2019-12128
Upgrade Notes
N/A
Deprecation Notes
N/A
Other
N/A
Version: 1.4.4
- Release Date:
2019-06-13
SO Release Image Versions
onap-so-api-handler-infra,1.4.4
onap-so-bpmn-infra,1.4.4
onap-so-catalog-db-adapter,1.4.4
onap-so-openstack-adapter,1.4.4
onap-so-request-db-adapter,1.4.4
onap-so-sdc-controller,1.4.4
onap-so-sdnc-adapter,1.4.4
onap-so-so-monitoring,1.4.4
onap-so-vfc-adapter,1.4.4
onap-so-vnfm-adapter,1.4.4
Release Purpose
New Features
- The main goal of the Dublin release was to:
Support CCVPN extension
Support BroadBand Service Usecase
SO SOL003 plugin support
Improve PNF PnP
Improve SO internal modularity
Epics
[SO-1508] - ETSI Alignment - SO SOL003 plugin support to connect to external VNFMs
[SO-1468] - Hardening of HPA in SO and extension of HPA capabilities to existing use-cases
[SO-1394] - Extended and enhance the SO generic building block to support pre and post instantiation.
[SO-1393] - Support the CCVPN Extension
[SO-1392] - Support the BroadBand Service Usecase
[SO-1353] - SO to be made independent of Cloud technologies
[SO-1273] - PNF PnP Dublin updates & improvements
[SO-1271] - PNF PnP Casablanca MR updates
[SO-677] - Improve the issues and findings of the SO Casablanca Release
Stories
[SO-1974] - Turn off OpenStack heat stack audit
[SO-1924] - Add VnfConfigUpdate to the list of native CM workflows returned to VID
[SO-1820] - Add Model Version Query
[SO-1806] - Fix issue where null variable causes task to not
[SO-1793] - add status for delete
[SO-1792] - add status message requirement for create vf module event audit
[SO-1791] - Moved base client to new location
[SO-1790] - Enhanced sniro BB to account for sole service proxies to support 1908.
[SO-1765] - Convert Tabs to Spaces
[SO-1760] - Add Query param to pull back nested stack information
[SO-1758] - Fix POM to allow HTTP long polling to work on camunda
[SO-1749] - re add openstack audit of delete functions after refactor
[SO-1748] - Add support to parse cdl inside LOB and platform
[SO-1737] - if audit fails write sub interface data to a ai
[SO-1729] - Monitor Job Status-Delete
[SO-1687] - removed unused test classes and methods
[SO-1678] - removed extra argument from extractByKey method
[SO-1676] - replace all fixed wiremock ports
[SO-1671] - skip_post_instantiation_configuration schema and tosca ingestion
[SO-1657] - Automated testing for the SO Monitoring component
[SO-1648] - Increasing the test coverage of SO-Monitoring UI
[SO-1634] - Notification Handling - Terminate
[SO-1633] - Terminate VNF (with SVNFM interaction)
[SO-1632] - Handle VNF delete and termination (without SVNFM integration)
[SO-1630] - Monitor Job Status-Create
[SO-1629] - Notification Handling - Instantiate
[SO-1628] - Handle Notification Subscription
[SO-1627] - Create relationship between esr-vnfm and generic-vnf in AAI
[SO-1626] - Monitor Node Status
[SO-1625] - Handle Grant Request (Without Homing/OOF)
[SO-1624] - Instantiate VNF (with SVNFM Interaction)
[SO-1623] - Handle Create VNF request in VNFM adapter
[SO-1622] - Check for existing VNF (with SVNFM Interaction)
[SO-1621] - Create placeholder implementation for create VNF (without SVNFM interaction)
[SO-1620] - Create Shell Adapter
[SO-1619] - Create SO VNFM Adapter Northbound Interface using Swagger
[SO-1618] - SVNFM Simulator
[SO-1616] - Add instance group support to SO
[SO-1604] - SO Catalog Enhancement to support CDS Meta Data for VNF/PNF and PNF Tosca Ingestion
[SO-1598] - add equals and hashcode support to dslquerybuilder
[SO-1597] - improvements to audit inventory feature
[SO-1596] - query clients now have more useable result methods
[SO-1590] - skip cloud region validation for 1906
[SO-1589] - flow validators can now be skipped via an annotation
[SO-1582] - vnf spin up gr api vnf s base module fails
[SO-1573] - Abstract for CDS Implementation
[SO-1569] - do not attempt to commit empty transactions
[SO-1538] - Integration Test for SO VNFM Adapter - Perform the functional test to validate VNFM Adapter NBI and SOL003-based SBI
[SO-1534] - Create Pre Building Block validator to check if cloud-region orchestration-disabled is true
[SO-1533] - flowvaldiator will allow more flexible filtering
[SO-1512] - Added Camunda migration scripts and updated camunda springboot version
[SO-1506] - E2E Automation - Extend PNF workflow with post-instantiation configuration
[SO-1501] - add new functionality to aai client
[SO-1495] - made max retries configurable via mso config repo
[SO-1493] - restructure a&ai client
[SO-1487] - added license headers to various java files
[SO-1485] - add DSL endpoint support to A&AI Client
[SO-1483] - SO to support a new GRPC client for container to container communication
[SO-1482] - SO Generic Building Block to support config deploy action for CONFIGURE Step
[SO-1481] - Generic Bulding block for assign shall trigger controller for config assign action
[SO-1477] - AAF support for SO
[SO-1476] - Do not process vf module being created when building an index
[SO-1475] - store raw distribution notification in db
[SO-1474] - Test Issue
[SO-1469] - Refactor OOF Homing to Java
[SO-1462] - Clean up AT&T Acronyms from Unit tests for audit
[SO-1459] - add maven build properties to spring actuator
[SO-1456] - prototype fetching resources from openstack and compare to a ai
[SO-1452] - added list of flows to execution for cockpit
[SO-1451] - Updated the SDC API call with the ECOMP OE from AAI
[SO-1450] - support for secure communications between SO and Multicloud
[SO-1447] - Refine multicloud use of SO cloudsites and identify DB
[SO-1446] - Multicloud API updates for generic clouds
[SO-1445] - Multicloud support for volume groups and networks
[SO-1444] - AAI update after vfmodule creation
[SO-1443] - Prepare user_directives for multicloud API
[SO-1442] - Prepare sdnc_directives for multicloud API
[SO-1441] - Handle distribution of service with generic cloud artifacts
[SO-1436] - removed unnecessary repository from pom.xml
[SO-1432] - duplicate add custom object support to a ai client
[SO-1431] - Test issue 1
[SO-1429] - add custom object support to a ai client
[SO-1427] - Fix to include alloc pool from dhcpStart/end on reqs
[SO-1426] - Upgraded tosca parser to version 1.4.8 and updated imports
[SO-1425] - Re-Factor DMAAP Credentials to use encrypted auth
[SO-1421] - Support for SO->ExtAPI interface/API
[SO-1414] - update all inprogress checks in apih handler
[SO-1413] - replaced org.mockito.Matchers with ArgumentMatchers
[SO-1411] - Test Issue
[SO-1409] - added in validation for number of keys provided
[SO-1405] - apih infra shall ensure data for si matches on macro requests
[SO-1404] - covert sync calls for create and delete network to async
[SO-1395] - E2E Automation - PreInstatition and PostInstatition use cases
[SO-1389] - added mso-request-id when calling SDNCHandler subflow
[SO-1388] - descriptive messages now returned by validator
[SO-1387] - naming ms client fixes
[SO-1385] - removed retired A&AI versions from codebase
[SO-1384] - sdnc handler was not sending workflow exception upwards
[SO-1383] - refactored validator to be more generic
[SO-1381] - Quality of Life logging improvements
[SO-1380] - Service Proxy Consolidation
[SO-1379] - Add validation for vnfs before WorkflowAction starts
[SO-1378] - get subnet sequence number from A&AI
[SO-1377] - Re-enable Actuator for Springboot 2.0
[SO-1376] - Created sniro request pojos for homingV2 flow
[SO-1370] - Preparation for next scale-out after successful instantiation of the current scale-out operation
[SO-1369] - Processing of configuration parameters during instantiation and scale-out
[SO-1368] - VNF Health check during scale-out to be made as a separate workflow
[SO-1367] - Invoke the APP-C service configuration API after E2E Service instantiation
[SO-1366] - SO Workflow need to call configure API during instantiation
[SO-1362] - Changed the MDC sourcing from LoggingInterceptor to JaxRsFilterLogging.
[SO-1346] - Use SLF4J/Logback, instead of Log4J
[SO-1307] - Add Headers
[SO-1295] - Update SDNC client Version in POM
[SO-1293] - Vnf Recreate
[SO-1290] - Update orchestrationrequest response
[SO-1288] - Enhance GRM Clients to use encrypted auth loading
[SO-1287] - Change all SDNC Calls in GR_API
[SO-1284] - Create Relationship between Vnf and Tenant
[SO-1283] - Fix GR_API cloud info retrieval
[SO-1282] - Update Alacarte Logic for Recreate Flow
[SO-1279] - Replaced the VNFC hardcoded Function
[SO-1278] - Move all ecomp.mso properties to org.onap.so
[SO-1276] - Add Cloud_Owner to northbound request table
[SO-1275] - Resolve path issues
[SO-1274] - CreateAndUpdatePNFResource workflow:: Associate PNF instance
[SO-1272] - Use UUID to fill pnf-id in PNF PnP sub-flow
[SO-1270] - Add New A&AI objects
[SO-1269] - Add serviceRole to MSO SNIRO Interface
[SO-1260] - Add support for naming service
[SO-1233] - Added service role to sniro request when not null
[SO-1232] - Switch to SpringAutoDeployment rather than processes.xml
[SO-1229] - Remove all usage of AlarmLogger
[SO-1228] - Limit Number of Occurs for security reasons
[SO-1227] - Remove Swagger UI due to security scan concerns
[SO-1226] - changed assign vnf sdnc to use the async subflow
[SO-1225] - Add Keystone V3 Support
[SO-1207] - accept a la carte create instance group request from vid
[SO-1206] - Added groupInstanceId and groupInstanceName columns
[SO-1205] - separate error status from progression status in req db
[SO-806] - SO PNF PnP workflow shall not set “in-maint” AAI flag
[SO-798] - Externalize the PNF PnP workflow? as a Service Instance Deployment workflow? adding the Controller
[SO-747] - POC - Enable SO use of Multicloud Generic VNF Instantiation API
[SO-700] - SO should be able to support CCVPN service assurance
[SO-588] - Automate robot heatbridge manual step to add VF Module stack resources in AAI
[SO-18] - Keystone v3 Support in MSO
[SO-12] - Support Ocata apis
[SO-10] - Deploy a MSO high availability environment
[SO-7] - Move modified openstack library to common functions repos
[SO-6] - Document how to change username/password for UIs
- Security Notes
SO code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The SO open Critical security vulnerabilities and their risk assessment have been documented as part of the project.
Quick Links:
Known Issues
Testing Terminate and Delete of ETSI VNFM Adapter is done and has some of the minor issues pending, it will be done in El Alto.
[SO-2013] - Test Terminate/Delete VNF with VNFM Adapter
Upgrade Notes
N/A
Deprecation Notes
N/A
Other
N/A
Version: 1.4.1
- Release Date:
2019-04-19
This is the dublin release base version separated from master branch.
Version: 1.3.7
- Release Date:
2019-01-31
This is the official release package that released for the Casablanca Maintenance.
Casablanca Release branch
New Features
This release is supporting the features of Casablanca and their defect fixes. - SO-1400 - SO-1408 - SO-1416 - SO-1417
SO Release Image Versions
onap-so-api-handler-infra,1.3.7
onap-so-bpmn-infra,1.3.7
onap-so-catalog-db-adapter,1.3.7
onap-so-openstack-adapter,1.3.7
onap-so-request-db-adapter,1.3.7
onap-so-sdc-controller,1.3.7
onap-so-sdnc-adapter,1.3.7
onap-so-so-monitoring,1.3.7
onap-so-vfc-adapter,1.3.7
Known Issues
SO-1419 - is a stretch goal that is under examination.
SDC-1955 - tested with a workaround to avoid this scenario. To be tested further with updated dockers of SDC, UUI and SO.
Security Notes
SO code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The SO open Critical security vulnerabilities and their risk assessment have been documented as part of the project.
Quick Links:
Version: 1.3.6
- Release Date:
2019-01-10
This is the official release package that released for the Casablanca Maintenance.
Casablanca Release branch
New Features
This release is supporting the features of Casablanca and their defect fixes. - SO-1336 - SO-1249 - SO-1257 - SO-1258 - SO-1256 - SO-1194 - SO-1248 - SO-1184
SO Release Image Versions
onap-so-api-handler-infra,1.3.6
onap-so-bpmn-infra,1.3.6
onap-so-catalog-db-adapter,1.3.6
onap-so-openstack-adapter,1.3.6
onap-so-request-db-adapter,1.3.6
onap-so-sdc-controller,1.3.6
onap-so-sdnc-adapter,1.3.6
onap-so-so-monitoring,1.3.6
onap-so-vfc-adapter,1.3.6
Known Issues
Security Notes
SO code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The SO open Critical security vulnerabilities and their risk assessment have been documented as part of the project.
Quick Links:
New release over master branch for Dublin development
Version: 1.3.3
- Release Date:
2018-11-30
This is the official release package that was tested against the 72 hour stability test in integration environment.
Casablanca Release branch
New Features
Features delivered in this release:
Automatic scale out of VNFs.
Extend the support of homing to vFW, vCPE usecases through HPA.
Monitoring BPMN workflow capabilities through UI.
SO internal architecture improvements.
Support PNF resource type.
Support to the CCVPN Usecase.
Workflow Designer Integration.
SO Release Image Versions
onap-so-api-handler-infra,1.3.3
onap-so-bpmn-infra,1.3.3
onap-so-catalog-db-adapter,1.3.3
onap-so-openstack-adapter,1.3.3
onap-so-request-db-adapter,1.3.3
onap-so-sdc-controller,1.3.3
onap-so-sdnc-adapter,1.3.3
onap-so-so-monitoring,1.3.3
onap-so-vfc-adapter,1.3.3
Known Issues
There are some issues around the HPA and CCVPN that have been resolved in the patch release of 1.3.5
SO-1249 The workflow for resource processing use the wrong default value.
SO-1257 Authorization header added to multicloud adapter breaks communication.
SO-1258 OOF Directives are not passed through flows to Multicloud Adapter.
SO-1256 Permission support for Vfcadapter is missing.
SO-1194 Unable to find TOSCA CSAR location using ServiceModelUUID in DoCreateResource BPMN flow.
Below issues will be resolved in the next release:
SO-1248 Csar needs to be manually placed into the bpmn corresponding directory.
SO-1184 Database table is not populated for Generic NeutronNet resource.
Security Notes
SO code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The SO open Critical security vulnerabilities and their risk assessment have been documented as part of the project.
Quick Links:
Version: 1.3.1
- Release Date:
2018-10-24
Branch cut for Casablanca post M4 for integration test. New Features
- Below features are under test:
Automatic scale out of VNFs.
Extend the support of homing to vFW, vCPE usecases through HPA.
Monitoring BPMN workflow capabilities through UI.
SO internal architecture improvements.
Support PNF resource type.
Support to the CCVPN Usecase.
Workflow Designer Integration.
Version: 1.3.0
- Release Date:
2018-08-22
New release over master branch for Casablanca development
Version: 1.2.2
- Release Date:
2018-06-07
The Beijing release is the second release of the Service Orchestrator (SO) project.
New Features
Enhance Platform maturity by improving SO maturity matrix see Wiki.
Manual scaling of network services and VNFs.
Homing and placement capabilities through OOF interaction.
Ability to perform change management.
Integrated to APPC
Integrated to OOF
Integrated to OOM
Bug Fixes
The defects fixed in this release could be found here.
Known Issues
SO docker image is still on ecmop and not onap in the repository. This will be addressed in the next release.
Security Notes
SO code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The SO open Critical security vulnerabilities and their risk assessment have been documented as part of the project.
Quick Links:
- Upgrade Notes
NA
- Deprecation Notes
NA
Version: 1.1.2
- Release Date:
2018-01-18
Bug Fixes
The key defects fixed in this release :
Version: 1.1.1
- Release Date:
2017-11-16
New Features
The SO provides the highest level of service orchestration in the ONAP architecture. It executes end-to-end service activities by processing workflows and business logic and coordinating other ONAP and external component activities.
The orchestration engine is a reusable service. Any component of the architecture can execute SO orchestration capabilities.
Orchestration services will process workflows based on defined models and recipe.
The service model maintains consistency and re-usability across all orchestration activities and ensures consistent methods, structure and version of the workflow execution environment.
Orchestration processes interact with other platform components or external systems via standard and well-defined APIs.
Deprecation Notes
There is a MSO 1.0.0 SO implementation existing in the pre-R1 ONAP Gerrit system. The MSO1.0.0 is deprecated by the R1 release and the current release is built over this release. The Gerrit repos of mso/* are voided and already locked as read-only. Following are the deprecated SO projects in gerrit repo:
mso
mso/chef-repo
mso/docker-config
mso/libs
mso/mso-config
- Other
NA
End of Release Notes