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

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

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

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-OPENSTACK-ADAPTER :¶
Contents
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:
A La Carte mode Service Instantiation via ONAP VID Portal¶
e2eServiceInstance mode via ONAP UUI Portal¶
Service Instantiation via ONAP NBI API (TM Forum)¶
ONAP NBI allow you to use a TM Forum standardized API (serviceOrder API)
Additional info in:
ONAP NBI will convert that request to ONAP SO request.
ServiceOrder management in NBI will support 2 modes:
E2E integration - NBI calls SO API to perform an End-To-end integration
Service-level only integration - NBI will trigger only SO request at serviceInstance level (not at VNF, not at Vf-module level and nothing will be created on cloud platform)
ONAP SO prerequisite: SO must be able to find a BPMN to process service fulfillment (integrate VNF, VNF activation in SDNC, VF module)
The choice of the mode is done by NBI depending on information retrieved in SDC. If the serviceSpecification is within a Category “E2E Service” , NBI will use E2E SO API, if not only API at service instance level will be used.
There is no difference or specific expectation in the service order API used by NBI user.
Example of serviceOrder to instantiate (=add) a service based on model with id=0d463b0c-e559-4def-8d7b-df64cfbd3159
curl -X POST \
http://nbi.api.simpledemo.onap.org:30274/nbi/api/v4/serviceOrder \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache' \
-d '{
"externalId": "BSS_order_001",
"priority": "1",
"description": "this is a service order to instantiate a service",
"category": "Consumer",
"requestedStartDate": "",
"requestedCompletionDate": "",
"relatedParty": [
{
"id": "JohnDoe",
"role": "ONAPcustomer",
"name": "JohnDoe"
}
],
"orderItem": [
{
"id": "1",
"action": "add",
"service": {
"name": "my_service_model_instance_01",
"serviceState": "active",
"serviceSpecification": {
"id": "0d463b0c-e559-4def-8d7b-df64cfbd3159"
}
}
}
]
}'
In the response, you will obtain the serviceOrderId value.
Then you have the possibility to check about the serviceorder (here after the serviceOrderId=5d06309da0e46400017b1123).
This will allow you to get the serviceOrder Status (completed, failed…)
curl -X GET \
http://nbi.api.simpledemo.onap.org:30274/nbi/api/v4/serviceOrder/5d06309da0e46400017b1123 \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache'
A La Carte mode Service Instantiation via ONAP SO API¶
Using ONAP SO API in “A La Carte” mode, you need to send several requests, depending on the service model composition.
For example, if your service model is composed of 2 VNF and a Network, you will have to build and send :
a request to SO to create the “service instance” object
a request to SO to create the VNF 1 instance object
a request to SDNC to declare VNF 1 instance parameters and values (SDNC preload)
a request to SO to create the Vf-module 1 instance object
a request to SO to create the VNF 2 instance object
a request to SDNC to declare VNF 2 instance parameters and values (SDNC preload)
a request to SO to create the Vf-module 2 instance object
a request to SO to create the Network instance object
Example to request a service instance directly to ONAP SO
TO BE COMPLETED
In the response, you will obtain the serviceOrderId value.
Then you have the possibility to check about the SO request (here after the requestId=e3ad8df6-ea0d-4384-be95-bcb7dd39bbde).
This will allow you to get the serviceOrder Status (completed, failed…)
curl -X GET \
http://so.api.simpledemo.onap.org:30277/onap/so/infra/orchestrationRequests/v6/e3ad8df6-ea0d-4384-be95-bcb7dd39bbde \
-H 'Accept: application/json' \
-H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: get_aai_subscr' \
-H 'cache-control: no-cache'
To instantiate a VNF, you need to build a complex request. All necessary parameters are available in the Tosca service template generated by SDC when you defined your service model.
curl -X POST \
http://so.api.simpledemo.onap.org:30277/onap/so/infra/serviceInstances/v6/95762b50-0244-4723-8fde-35f911db9263/vnfs \
-H 'Accept: application/json' \
-H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: get_aai_subscr' \
-H 'cache-control: no-cache' \
-d '{
"requestDetails": {
"requestInfo": {
"productFamilyId": "0d463b0c-e559-4def-8d7b-df64cfbd3159",
"instanceName": "my_service_vnf_instance_001",
"source": "VID",
"suppressRollback": false,
"requestorId": "test"
},
"modelInfo": {
"modelType": "vnf",
"modelInvariantId": "4e66bb92-c597-439e-822d-75aaa69b13d4",
"modelVersionId": "3b6ba59c-287c-449e-a1da-2db49984a087",
"modelName": "my_service_VF",
"modelVersion": "1.0",
"modelCustomizationId": "",
"modelCustomizationName": ""
},
"requestParameters": {
"userParams": [],
"aLaCarte": true,
"testApi": "VNF_API"
},
"cloudConfiguration": {
"lcpCloudRegionId": "my_cloud_site",
"tenantId": "5906b9b8fd9642df9ba1c9e290063439"
},
"lineOfBusiness": {
"lineOfBusinessName": "test_LOB"
},
"platform": {
"platformName": "test_platform"
},
"relatedInstanceList": [{
"relatedInstance": {
"instanceId": "95762b50-0244-4723-8fde-35f911db9263",
"modelInfo": {
"modelType": "service",
"modelName": "my-service-model",
"modelInvariantId": "11265d8c-2cc2-40e5-95d8-57cad81c18da",
"modelVersion": "1.0",
"modelVersionId": "0d463b0c-e559-4def-8d7b-df64cfbd3159"
}
}
}]
}
}'
To instantiate a VF module, you need to build two complex requests All necessary parameters are available in the Tosca service template generated by SDC when you defined your service model.
1st request is called a “SDNC-preload” for a VNF object and is used to store in SDNC some VNF parameters values that will be needed for the instantiation
curl -X POST \
http://sdnc.api.simpledemo.onap.org:30202/restconf/operations/VNF-API:preload-vnf-topology-operation \
-H 'Accept: application/json' \
-H 'Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: API client' \
-H 'X-TransactionId: 0a3f6713-ba96-4971-a6f8-c2da85a3176e' \
-H 'cache-control: no-cache' \
-d '{
"input": {
"request-information": {
"notification-url": "onap.org",
"order-number": "1",
"order-version": "1",
"request-action": "PreloadVNFRequest",
"request-id": "test"
},
"sdnc-request-header": {
"svc-action": "reserve",
"svc-notification-url": "http:\/\/onap.org:8080\/adapters\/rest\/SDNCNotify",
"svc-request-id": "test"
},
"vnf-topology-information": {
"vnf-assignments": {
"availability-zones": [],
"vnf-networks": [],
"vnf-vms": []
},
"vnf-parameters": [],
"vnf-topology-identifier": {
"generic-vnf-name": "my_service_vnf_instance_001",
"generic-vnf-type": "",
"service-type": "95762b50-0244-4723-8fde-35f911db9263",
"vnf-name": "my_service_vfmodule_001",
"vnf-type": ""
}
}
}
}'
The 2nd request is to instantiate the VF module via ONAP SO (instance name must be identical in both requests)
curl -X POST \
http://so.api.simpledemo.onap.org:30277/onap/so/infra/serviceInstances/v6/95762b50-0244-4723-8fde-35f911db9263/vnfs/vfModules \
-H 'Accept: application/json' \
-H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: get_aai_subscr' \
-H 'cache-control: no-cache' \
-d '{
"requestDetails": {
"requestInfo": {
"instanceName": "my_vfmodule_001",
"source": "VID",
"suppressRollback": false,
"requestorId": "test"
},
"modelInfo": {
"modelType": "vfModule",
"modelInvariantId": "",
"modelVersionId": "",
"modelName": "",
"modelVersion": "1",
"modelCustomizationId": "",
"modelCustomizationName": ""
},
"requestParameters": {
"userParams": [],
"testApi": "VNF_API",
"usePreload": true
},
"cloudConfiguration": {
"lcpCloudRegionId": "my_cloud_site",
"tenantId": "5906b9b8fd9642df9ba1c9e290063439"
},
"relatedInstanceList": [{
"relatedInstance": {
"instanceId": "95762b50-0244-4723-8fde-35f911db9263",
"modelInfo": {
"modelType": "service",
"modelName": "my-service-model",
"modelInvariantId": "11265d8c-2cc2-40e5-95d8-57cad81c18da",
"modelVersion": "1.0",
"modelVersionId": "0d463b0c-e559-4def-8d7b-df64cfbd3159"
}
}
},
{
"relatedInstance": {
"instanceId": "",
"modelInfo": {
"modelType": "vnf",
"modelName": "my_service_model_VF",
"modelInvariantId": "4e66bb92-c597-439e-822d-75aaa69b13d4",
"modelVersion": "1.0",
"modelVersionId": "3b6ba59c-287c-449e-a1da-2db49984a087",
"modelCustomizationId": "",
"modelCustomizationName": ""
}
}
}]
}
}'
To instantiate a Neutron Network, you need to build two complex request. All necessary parameters are available in the Tosca service template generated by SDC when you defined your service model.
1st request is the “SDNC-preload” for a network object:
curl -X POST \
http://sdnc.api.simpledemo.onap.org:30202/restconf/operations/VNF-API:preload-network-topology-operation \
-H 'Accept: application/json' \
-H 'Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: API client' \
-H 'X-TransactionId: 0a3f6713-ba96-4971-a6f8-c2da85a3176e' \
-H 'cache-control: no-cache' \
-d '{
"input": {
"request-information": {
"request-id": "postman001",
"notification-url": "http://so.onap.org",
"order-number": "postman001",
"request-sub-action": "SUPP",
"request-action": "PreloadNetworkRequest",
"source": "postman",
"order-version": "1.0"
},
"network-topology-information": {
"network-policy": [],
"route-table-reference": [],
"vpn-bindings": [],
"network-topology-identifier": {
"network-role": "integration_test_net",
"network-technology": "neutron",
"service-type": "my-service-2",
"network-name": "my_network_01",
"network-type": "Generic NeutronNet"
},
"provider-network-information": {
"is-external-network": "false",
"is-provider-network": "false",
"is-shared-network": "false"
},
"subnets": [
{
"subnet-name": "my_subnet_01",
"subnet-role": "OAM",
"start-address": "192.168.90.0",
"cidr-mask": "24",
"ip-version": "4",
"dhcp-enabled": "Y",
"dhcp-start-address": "",
"dhcp-end-address": "",
"gateway-address": "192.168.90.1",
"host-routes":[]
}
]
},
"sdnc-request-header": {
"svc-action": "reserve",
"svc-notification-url": "http://so.onap.org",
"svc-request-id": "postman001"
}
}
}'
2nd request is to instantiate the network via ONAP SO (instance name must be identical in both requests)
curl -X POST \
http://so.api.simpledemo.onap.org:30277/onap/so/infra/serviceInstances/v6/95762b50-0244-4723-8fde-35f911db9263/networks \
-H 'Accept: application/json' \
-H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \
-H 'Content-Type: application/json' \
-H 'X-FromAppId: AAI' \
-H 'X-TransactionId: get_aai_subscr' \
-H 'cache-control: no-cache' \
-d '{
"requestDetails": {
"requestInfo": {
"instanceName": "my_network_01",
"source": "VID",
"suppressRollback": false,
"requestorId": "demo",
"productFamilyId": "b9ac88f7-0e1b-462d-84ac-74c3c533217c"
},
"modelInfo": {
"modelType": "network",
"modelInvariantId": "0070b65c-48cb-4985-b4df-7c67ca99cd95",
"modelVersionId": "4f738bed-e804-4765-8d22-07bb4d11f14b",
"modelName": "Generic NeutronNet",
"modelVersion": "1.0",
"modelCustomizationId": "95534a95-dc8d-4ffb-89c7-091e2c49b55d",
"modelCustomizationName": "Generic NeutronNet 0"
},
"requestParameters": {
"userParams": [],
"aLaCarte": true,
"testApi": "VNF_API"
},
"cloudConfiguration": {
"lcpCloudRegionId": "my_cloud_site",
"tenantId": "5906b9b8fd9642df9ba1c9e290063439"
},
"lineOfBusiness": {
"lineOfBusinessName": "Test_LOB"
},
"platform": {
"platformName": "Test_platform"
},
"relatedInstanceList": [{
"relatedInstance": {
"instanceId": "95762b50-0244-4723-8fde-35f911db9263",
"modelInfo": {
"modelType": "service",
"modelName": "my_service_model_name",
"modelInvariantId": "11265d8c-2cc2-40e5-95d8-57cad81c18da",
"modelVersion": "1.0",
"modelVersionId": "0d463b0c-e559-4def-8d7b-df64cfbd3159"
}
}
}]
}
}'
Macro mode Service Instantiation via ONAP SO API¶
Using Macro mode, you have to build and send only one request to ONAP SO
In that request you need to indicate all object instances that you want to be instantiated.
Reminder : ONAP SO in Macro mode will perform the VNF parameters/values assignment based on CDS Blueprint templates that are supposed to be defined during Design and Onboard steps. That means ONAP has all information to be able to get all necessary values by itself (there is no longer need for an Operator to provide “SDNC preload”).
Additional info in:
Request Example :
curl -X POST \
'http://{{k8s}}:30277/onap/so/infra/serviceInstantiation/v7/serviceInstances' \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache' \
-d '{
"requestDetails": {
"subscriberInfo": {
"globalSubscriberId": "Demonstration"
},
"requestInfo": {
"suppressRollback": false,
"productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
"requestorId": "adt",
"instanceName": "{{cds-instance-name}}",
"source": "VID"
},
"cloudConfiguration": {
"lcpCloudRegionId": "fr1",
"tenantId": "6270eaa820934710960682c506115453"
},
"requestParameters": {
"subscriptionServiceType": "vFW",
"userParams": [
{
"Homing_Solution": "none"
},
{
"service": {
"instanceParams": [
],
"instanceName": "{{cds-instance-name}}",
"resources": {
"vnfs": [
{
"modelInfo": {
"modelName": "{{vnf-modelinfo-modelname}}",
"modelVersionId": "{{vnf-modelinfo-modeluuid}}",
"modelInvariantUuid": "{{vnf-modelinfo-modelinvariantuuid}}",
"modelVersion": "1.0",
"modelCustomizationId": "{{vnf-modelinfo-modelcustomizationuuid}}",
"modelInstanceName": "{{vnf-modelinfo-modelinstancename}}"
},
"cloudConfiguration": {
"lcpCloudRegionId": "fr1",
"tenantId": "6270eaa820934710960682c506115453"
},
"platform": {
"platformName": "test"
},
"lineOfBusiness": {
"lineOfBusinessName": "someValue"
},
"productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
"instanceName": "{{vnf-modelinfo-modelinstancename}}",
"instanceParams": [
{
"onap_private_net_id": "olc-private",
"onap_private_subnet_id": "olc-private",
"pub_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwj7uJMyKiP1ogEsZv5kKDFw9mFNhxI+woR3Tuv8vjfNnqdB1GfSnvTFyNbdpyNdR8BlljkiZ1SlwJLEkvPk0HpOoSVVek/QmBeGC7mxyRcpMB2cNQwjXGfsVrforddXOnOkj+zx1aNdVGMc52Js3pex8B/L00H68kOcwP26BI1o77Uh+AxjOkIEGs+wlWNUmXabLDCH8l8IJk9mCTruKEN9KNj4NRZcaNC+XOz42SyHV9RT3N6efp31FqKzo8Ko63QirvKEEBSOAf9VlJ7mFMrGIGH37AP3JJfFYEHDdOA3N64ZpJLa39y25EWwGZNlWpO/GW5bNjTME04dl4eRyd",
"image_name": "Ubuntu 14.04",
"flavor_name":"s1.cw.small-1"
}
],
"vfModules": [
{
"modelInfo": {
"modelName": "{{vnf-vfmodule-0-modelinfo-modelname}}",
"modelVersionId": "{{vnf-vfmodule-0-modelinfo-modeluuid}}",
"modelInvariantUuid": "{{vnf-vfmodule-0-modelinfo-modelinvariantuuid}}",
"modelVersion": "1",
"modelCustomizationId": "{{vnf-vfmodule-0-modelinfo-modelcustomizationuuid}}"
},
"instanceName": "{{vnf-vfmodule-0-modelinfo-modelname}}",
"instanceParams": [
{
"sec_group": "olc-open",
"public_net_id": "olc-net"
}
]
},
{
"modelInfo": {
"modelName": "{{vnf-vfmodule-1-modelinfo-modelname}}",
"modelVersionId": "{{vnf-vfmodule-1-modelinfo-modeluuid}}",
"modelInvariantUuid": "{{vnf-vfmodule-1-modelinfo-modelinvariantuuid}}",
"modelVersion": "1",
"modelCustomizationId": "{{vnf-vfmodule-1-modelinfo-modelcustomizationuuid}}"
},
"instanceName": "{{vnf-vfmodule-1-modelinfo-modelname}}",
"instanceParams": [
{
"sec_group": "olc-open",
"public_net_id": "olc-net"
}
]
},
{
"modelInfo": {
"modelName": "{{vnf-vfmodule-2-modelinfo-modelname}}",
"modelVersionId": "{{vnf-vfmodule-2-modelinfo-modeluuid}}",
"modelInvariantUuid": "{{vnf-vfmodule-2-modelinfo-modelinvariantuuid}}",
"modelVersion": "1",
"modelCustomizationId": "{{vnf-vfmodule-2-modelinfo-modelcustomizationuuid}}"
},
"instanceName": "{{vnf-vfmodule-2-modelinfo-modelname}}",
"instanceParams": [
{
"sec_group": "olc-open",
"public_net_id": "olc-net"
}
]
},
{
"modelInfo": {
"modelName": "{{vnf-vfmodule-3-modelinfo-modelname}}",
"modelVersionId": "{{vnf-vfmodule-3-modelinfo-modeluuid}}",
"modelInvariantUuid": "{{vnf-vfmodule-3-modelinfo-modelinvariantuuid}}",
"modelVersion": "1",
"modelCustomizationId": "{{vnf-vfmodule-3-modelinfo-modelcustomizationuuid}}"
},
"instanceName": "{{vnf-vfmodule-3-modelinfo-modelname}}",
"instanceParams": [
{
"sec_group": "olc-open",
"public_net_id": "olc-net"
}
]
}
]
}
]
},
"modelInfo": {
"modelVersion": "1.0",
"modelVersionId": "{{service-uuid}}",
"modelInvariantId": "{{service-invariantUUID}}",
"modelName": "{{service-name}}",
"modelType": "service"
}
}
}
],
"aLaCarte": false
},
"project": {
"projectName": "Project-Demonstration"
},
"owningEntity": {
"owningEntityId": "24ef5425-bec4-4fa3-ab03-c0ecf4eaac96",
"owningEntityName": "OE-Demonstration"
},
"modelInfo": {
"modelVersion": "1.0",
"modelVersionId": "{{service-uuid}}",
"modelInvariantId": "{{service-invariantUUID}}",
"modelName": "{{service-name}}",
"modelType": "service"
}
}
}'
e2eServiceInstance method is a hard-coded approach with dedicated/specific service BPMN workflow. That means it is linked to ONAP source code and lifecycle.
A La Carte method requires the Operations actor to build and send a lot of operations. To build those requests, Operator actor needs to define/collect by himself all VNF parameters/values.
Macro method required the Operations actor to build and send only one request and, thanks to CDS Blueprint templates, ONAP will collect and assign all required parameters/values by itself.
Frequently Asked Questions SO¶
Casablanca Release throws java.sql.SQLDataException: (conn:85) Data too long for column ‘RESOURCE_INPUT’ at row 1¶
This issue could be solved either using the SO-1.3.7 release or through a manual patch to update the lenght of the column ‘RESOURCE_INPUT’.
Following are the sql statements to update length of resource_input:
use catalogdb;
ALTER TABLE vnf_resource_customization MODIFY IF EXISTS RESOURCE_INPUT varchar(20000);
ALTER TABLE network_resource_customization MODIFY IF EXISTS RESOURCE_INPUT varchar(20000);
ALTER TABLE allotted_resource_customization MODIFY IF EXISTS RESOURCE_INPUT varchar(20000);
in so mariadb pod (username/password root/password)
Integrate SO with MultiCloud¶
Integrate SO with MultiCloud¶
There are 2 SO tables that you need to modify if you want to use Multicloud. They are in the MariaDB container in the dev-so service. Here are the credentials to access the DB (through mysql command line): cataloguser/catalog123. The table you need to use is called catalogdb.
The 2 tables are cloud_sites and identity_services. cloud_sites contains information about the cloud (region name and keystone for example). The keystone name (IDENTITY_SERVICE_ID) is the key of identity_services table, which contains specific information about cloud authentication. In the example below, you can see my configuration for a cloud region called RegionTwo, in which SO uses Multicoud for talking to the underlying cloud platfrorm. Note indeed that the IDENTITY_URL in identity_services redirects to Multicloud. In practice, SO reads cloud and authentication information from this two tables, and uses the provided keystone authentication given an identity URL.
MariaDB [catalogdb]> select * from cloud_sites;
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
Hits AssignServiceInstanceBB.bpmn

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

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.
Policy in rainy_day_handler_macro table for current BB failure is Abort

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