Orchestrating Network Services Across Multiple OpenStack Regions Using ONAP (Part 1 of 2)

NFV clouds are going to be distributed by nature. VNFs and applications will be distributed as per the below figure: horizontally across edge (access), regional datacenter (core) and hyperscale datacenters (could be public clouds) or vertically across multiple regional or hyperscale datacenters.

The Linux Foundation Open Network Automation Platform (ONAP) project is a management and orchestration software stack that automates network/SDN service deployment, lifecycle management and service assurance. For reasons above ONAP is designed from the ground up to support multiple cloud regions. This blog shows you how extend it by registering multiple cloud regions with ONAP.

In this two-part blog, we will walk you through the exact steps to register multiple regions with ONAP for the virtual firewall (vFW) use-case that primarily utilizes SDC, SO, A&AI, VID and APP-C projects (other use cases might be similar but might require slightly different instructions). Try it out and let us know how it goes.


  1. ONAP Installation (Amsterdam release)
  2. OpenStack regions spread across different physical locations
  3. Valid Subscriber already created under ONAP (e.g Demonstration2)

If you do not have the above, and still want to try this out, here are some alternatives:

ONAP Option OpenStack Options
Have access to ONAP but only 1 OpenStack region Use your ONAP Simulate two regions by using two tenants
Have access to ONAP but not OpenStack Use your ONAP Use 2 Rackspace regions or 1 Vexxhost region with 2 tenants
Have access to OpenStack but not ONAP Use Aarna ONAP development distro on GCP Use your OpenStack regions or tenants
Do not have access to OpenStack or ONAP Use Aarna ONAP development distro on GCP Use Rackspace or Vexxhost or Aarna ONAP + OPNFV distro on GCP

ONAP Region Registration Steps

There are 3 locations where VIM/cloud instance information is stored: A&AI, SO & Robot. The following 7 steps outline the steps and provide sample API calls.

Step 1: Create Complex object(s) in AAI

A complex object in A&AI represent the physical location of a VIM/Cloud instance. Create a complex object for each OpenStack Region that needs to be configured under ONAP.

Example script to do create complex object named clli1x:

# Main items to be changed are highlighted, but most of the below
# information should be customized for your region

curl -X PUT \ https://<AAI_VM1_IP>:8443/aai/v11/cloud-infrastructure/complexes/complex/clli1x \
-H ‘X-TransactionId: 9999’ \
-H ‘X-FromAppId: jimmy-postman’ \
-H ‘Real-Time: true’ \
-H ‘Authorization: Basic QUFJOkFBSQ==’ \
-H ‘Content-Type: application/json’ \
-H ‘Accept: application/json’ \
-H ‘Cache-Control: no-cache’ \
-H ‘Postman-Token: 734b5a2e-2a89-1cd3-596d-d69904bcda0a’ \
   -d    ‘{
            "physical-location-id": "clli1x",
            "data-center-code": "example-data-center-code-val-6667",
            "complex-name": "clli1x",
            "identity-url": "example-identity-url-val-28399",
            "physical-location-type": "example-physical-location-type-val-28399",
            "street1": "example-street1-val-28399",
            "street2": "example-street2-val-28399",
            "city": "example-city-val-28399",
            "state": "example-state-val-28399",
            "postal-code": "example-postal-code-val-28399",
            "country": "example-country-val-28399",
            "region": "example-region-val-28399",
            "latitude": "example-latitude-val-28399",
            "longitude": "example-longitude-val-28399",
            "elevation": "example-elevation-val-28399",
            "lata": "example-lata-val-28399"


Step 2: Create Cloud Region object(s) in A&AI

The VIM/Cloud instance is represented as a cloud region object in A&AI and ESR. This representation will be used by VID, APP-C, VFC, DCAE, MultiVIM, etc. Create a cloud region object for each OpenStack Region.

Example script to create cloud region object for the same cloud region:

curl -X PUT \
'https://<AAI_VM1_IP>:8443/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/Region1x \
  -H 'accept: application/json' \
  -H 'authorization: Basic QUFJOkFBSQ==' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'postman-token: f7c57ec5-ac01-7672-2014-d8dfad883cea' \
  -H 'real-time: true' \
  -H 'x-fromappid: jimmy-postman' \
  -H 'x-transactionid: 9999' \
  -d ‘{
    "cloud-owner": "CloudOwner",
    "cloud-region-id": "Region1x",
    "cloud-type": "openstack",
    "owner-defined-type": "t1",
    "cloud-region-version": "<OpenStack Version>",
    "cloud-zone": "<OpenStack Cloud Zone>",
    "complex-name": "clli1x",
    "identity-url": "<keystone auth URL https://<IP or Name>/v3>",
    "sriov-automation": false,
    "cloud-extra-info": "",
    "tenants": {
        "tenant": [
                "tenant-id": "<OpenStack Project ID>",
                "tenant-name": "<OpenStack Project Name>"
                "esr-system-info-id": "<Unique uuid, e.g. 432ac032-e996-41f2-84ed-9c7a1766eb29>",
                "service-url": "<keystone auth URL https://<IP or Name>/v3>",
                "user-name": "<OpenStack User Name>",
                "password": "<OpenStack Password>",
                "system-type": "VIM",
                "ssl-cacert": "",
                "ssl-insecure": true,
                "cloud-domain": "Default",
                "default-tenant": "<Project Name>"


Step 3: Associate each Cloud Region object with corresponding Complex Object

This needs to be setup for each cloud region with the corresponding complex object.

Example script to create the association:

curl -X PUT \ https://<AAI_VM1_IP>:8443/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/Region1x/relationship-list/relationship \
  -H 'accept: application/json' \
  -H 'authorization: Basic QUFJOkFBSQ==' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'postman-token: e68fd260-5cac-0570-9b48-c69c512b034f' \
  -H 'real-time: true' \
  -H 'x-fromappid: jimmy-postman' \
  -H 'x-transactionid: 9999' \
  -d '{
    "related-to": "complex",
    "related-link": "/aai/v11/cloud-infrastructure/complexes/complex/clli1x",
    "relationship-data": [{
            "relationship-key": "complex.physical-location-id",
            "relationship-value": "clli1x"


We will cover the remaining steps in the next and final installment of this blog series.

In the meantime, if you are looking for Cloud Services – ONAP, OpenStack, Kubernetes, Cloud Native Application, DevSecOps and Infrastructure Modernization please contact us.


ONAP Wiki – https://wiki.onap.org/pages/viewpage.action?pageId=25431491
vFWCL Wiki – https://wiki.onap.org/display/DW/vFWCL+instantiation%2C+testing%2C+and+debuging
(Continue with Part 2)

Contributor: Subba Rao Kodavalla