..
 This work is licensed under a Creative Commons Attribution 4.0
 International License.

=====================================================
MultiCloud alignment to Consistent ID of Cloud Region
=====================================================

To support ONAP Functional Requirement: "Centralized Representation and Consistent Identification of Cloud Regions In ONAP", MultiCloud services have to upgrade their APIs to align to the consistent ID of a cloud region.
..
https://wiki.onap.org/display/DW/Centralized+Representation+and+Consistent+Identification+of+Cloud+Regions+In+ONAP

Problems Statement
==================

With ONAP Amsterdam and Beijing Releases, there are 2 problems with respect to
the ID of a cloud region.

``Problem 1``: {vim_id}={cloud-owner}_{cloud-region-id} imposed unnecessary constraint
on how {cloud-owner} can be populated: character underscore '_' cannot be used to
populate {cloud-owner}

``Problem 2``: multicloud plugins for OpenStack leverages {cloud-region-id} as the OpenStack
Region ID to interact with represented OpenStack Instance. This implies that {cloud-region-id}
can only be populated by the represented OpenStack Region ID. This constraint implies
that two OpenStack instances with the same Region ID can only be represented with different
{cloud-owner}, even though they belong to the same owner. This is a violation to the
sematics of {cloud-owner} . on the other hand, the sematics of {cloud-region-id} refers to the
geographic region, which is not necessarily the same as OpenStack Region ID. What's more, the
fact that VID and SDNC have been using the {cloud-region-id} alone to identify a cloud region makes
the problem being unacceptable.

Proposed Solutions
==================

I would like to present 2 proposals to workaround each of problems above respectively:

``Proposal 1: depreciate the {vim_id} for all multicloud services, use composed keys {cloud-owner},
{cloud-region-id}``

This will result in upgrading the multicloud APIs and code refactoring.

We'd better to have common terminologies to facilitate the description below. Take the identity token API
as example:

::

  http(s)://{service IP}:{service port}/api/multicloud/v0/{cloud-owner}_{cloud-region-id}/identity/v3/auth/tokens
  e.g. http://1.2.3.4:9001/api/multicloud/v0/OnaplabOwner_RegionOne/identity/v3/auth/tokens


This API consists of several parts referred as below terminologies:


 - **Terminology            | Description                                  | Example**
 - **service endpoint**     | http(s)://{service IP}:{service port}        | http://1.2.3.4:9001
 - **service namespace**    | api/{service-name}                           | api/multicloud
 - **service API version**  | v0, v1, etc.                                 | v0
 - **ID of a cloud region** | the ID to specify a cloud region             | OnaplabOwner_RegionOne
 - **proxied API catalog**  | identity,compute, network, image,volume,etc. | identity
 - **proxied API endpoint** | consists of all above                        | *http://1.2.3.4:9001/api/multicloud/v0/OnaplabOwner_RegionOne/identity*
 - **proxied API resource** | URI for an OpenStack resource                | v3/auth/tokens

Given the terminology above, the general rules to upgrade MultiCloud North Bound API are:
 - Upgrade "service API version" from "v0" to "v1"
 - Change "ID of cloud region" from "{cloud-owner}_{cloud-region-id}" to "{cloud-owner}/{cloud-region-id}"

The upgraded API for identity token API looks like:

::

  http(s)://{service IP}:{service port}/api/multicloud/v1/{cloud-owner}/{cloud-region-id}/identity/v3/auth/tokens
  e.g. http(s)://1.2.3.4:9001/api/multicloud/v1/OnaplabOwner/RegionOne/identity/v3/auth/tokens


``Proposal 2: decouple the cloud region's {cloud-region-id} from OpenStack's Region ID``

Instead of populating the AAI's cloud-region-id with OpenStack Region ID, decoupling of them by put OpenStack Region ID
into other property of a cloud region object would enable the flexibility of populating arbitrary string to AAI's
cloud-region-id. There are several options to implement that, with the intention of maintaining backward compatibility
and minimized impact on AAI's schema, the proposed design options are described as below.

Option 1: ONAP User inputs the OpenStack Region ID with ESR Portal

There is a property of cloud region object named "cloud-extra-info"
..
https://wiki.onap.org/display/DW/AAI+REST+API+Documentation+-+Beijing

::

   cloud-extra-info: string
     ESR inputs extra information about the VIM or Cloud which will be decoded by MultiVIM.

the intention of this property is to enable the extending of cloud region object without impact AAI's schema. How and when to use this property is up to each multicloud
plugin respectively. This property can be populated by ONAP users through ESR VIM registration GUI Portal (the input field label: "Cloud Extra Info"). The best practice to utilize this "cloud-extra-info" property is that ONAP users to input format json string, with
which extra configuration data can be serialized as {"key":"value"} into this json string. And the corresponding MultiCloud plugin decode and utilize the input key-value pairs.
..
https://wiki.onap.org/pages/viewpage.action?pageId=25431491


**This proposal changes and workflow With Option 1**:

1. Define a key "openstack-region-id" with value populated by OpenStack Region ID,
     e.g. "RegionOne", "RegionTwo", etc. which must align to the represented OpenStack instance.
2. ONAP user should put this key-value pair into "cloud-extra-info" property via ESR GUI Portal, the input string
    looks like: "{\"openstack-region-id\":\"RegionOne\"}"
3. the corresponding MultiCloud plugin should decode this string to extract this key-value pair "openstack-region-id" during cloud region on-boarding phase.
4. Update AAI schema to add one more property "openstack-region-id" to AAI "esr-system-info" object which is the child of AAI "cloud-region" object.
5. MultiCloud plugin for OpenStack should populate this property with the information acquired in step 3.
6. MultiCloud should use this property to determine what OpenStack Region ID is when interacting with represented OpenStack Instance
7. Given the workflow above, the AAI's "cloud-region-id" can be populated by arbitrary string.
8. In cases that either ONAP user doesn't input the key-value pair of "openstack-region-id" into "cloud-extra-info" or MultiCloud Plugin does not support the decoding/using key-value pair "openstack-region-id", the legacy constraint should be applied, that is: ONAP user should make sure AAI's "cloud-region-id" is populated by OpenStack Region ID.


Option 2: MultiCloud plugin discover the OpenStack Region ID with Rest API

The Identity API: "/v3/regions" can be used to list all regions. In case of no multi-region configuration for underlying OpenStack instance,
this API should return the only one OpenStack Region information. In case of multi-region configuration for underlying OpenStack instances,
The list of OpenStack Regions will be returned. In this case, I assume you either go with Option 1,
or go with another proposal "MultiCloud Multi-Region support" to on-board all cloud regions at one time.
..
https://developer.openstack.org/api-ref/identity/v3/index.html#regions

**This proposal changes and workflow With Option 2**:

1, MultiCloud plugin for OpenStack discover the OpenStack region ID with Rest API during cloud region on-boarding phase.
2, Update AAI schema to add one more property "openstack-region-id" to AAI "esr-system-info" object which is the child of AAI "cloud-region" object.
3, MultiCloud plugin for OpenStack should populate this property with informatin acquired during step 1.
4, MultiCloud should use this property to determine what OpenStack Region ID is when interacting with represented OpenStack Instance
5. Given the workflow above, the AAI's "cloud-region-id" can be populated by arbitrary string.
