.. This work is licensed under a Creative Commons Attribution 4.0 .. International License. http://creativecommons.org/licenses/by/4.0 .. Copyright 2017 AT&T Intellectual Property. All rights reserved. Adding a new Openstack Cloud Site to ONAP ========================================= The following guide describe how to configure ONAP to be able to instantiate a service in a new cloud site based on Openstack. There are 2 methods for ONAP to communicate with Openstack in order to instantiate a service: method 1 : ONAP SO => Openstack method 2 : ONAP SO => ONAP MultiCloud => Openstack In this guideline the following parameter/value will be used * Complex Name: My_Complex * Region Name: INTEGRATION_CENTER * Cloud Owner: MyCompanyName Method 1 : without ONAP MultiCloud ---------------------------------- TO BE DESCRIBED Method 2 : using ONAP MultiCloud -------------------------------- STEP 1 : declare Cloud Site in ONAP SO to interact with ONAP multiCloud ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The MariaDB database of ONAP SO needs to be modified. In the ONAP SO, the use of ONAP Multicloud for that Cloud Site need to be indicated. ONAP SO will communicate with ONAP MultiCloud like if MultiCloud would be an Openstack system. Connect to ONAP SO pod In a Unix Terminal, to get the SO pods id that is providing the MariaDB database: :: kubectl -n onap get pod | grep mariadb-galera To connect to that SO pod (in this example, the SO pod id is "onap-mariadb-galera-mariadb-galera-0"): :: kubectl -n onap exec -ti onap-mariadb-galera-mariadb-galera-0 sh Then modify the data in the MariaDB: A "mso_id" and "mso_pass" are required even if, with multicloud, only credentials managed by ESR will be used. Nevertheless, you need to provide a correct encrypted value for the pass value. "MyCompanyName" is a cloud owner value. WARNING : do not use underscore in the value. "INTEGRATION_CENTER" is the region name :: mysql --user=so_admin --password=so_Admin123 USE catalogdb INSERT INTO identity_services VALUES('MC_KEYSTONE', 'http://msb-iag.onap:80/api/multicloud/v1/MyCompanyName_INTEGRATION_CENTER/identity/v2.0', 'admin', '5b6f369745f5f0e1c61da7f0656f3daf93c8030a2ea94b7964c67abdcfb49bdf2fa2266344b4caaca1eba8264d277831', 'service', 'admin', 1, 'KEYSTONE', 'USERNAME_PASSWORD', 'lastUser', '2019-07-05 10:32:00', '2019-07-05 10:32:00'); INSERT INTO cloud_sites VALUES('INTEGRATION_CENTER', 'INTEGRATION_CENTER', 'MC_KEYSTONE', 2.5, 'INTEGRATION_CENTER', NULL, NULL, NULL, 'MySelf', '2019-07-05 10:32:00', '2019-07-05 10:32:00'); You need then to change the ONAP SO VNF Adapter Rest API endpoint version: in a unix terminal: to find the right config map name: :: kubectl -n onap get configmap | grep so-so-bpmn-infra-app-configmap to edit and change the configmap: :: kubectl -n onap edit configmap onap-so-so-bpmn-infra-app-configmap in the section "vnf", modify the rest endpoint: :: vnf: endpoint: http://so-openstack-adapter.onap:8087/services/VnfAdapter rest: - endpoint: http://so-openstack-adapter.onap:8087/services/rest/v1/vnfs + endpoint: http://so-openstack-adapter.onap:8087/services/rest/v2/vnfs volume-groups: rest: endpoint: http://so-openstack-adapter.onapg:8087/services/rest/v1/volume-groups Having modified the configmap, it is necessary to delete the pod in order it takes the modification into account. to find the right pod name: :: kubectl -n onap get po | grep so-so You need to find the pod that is similar to the following pod id: "onap-so-so-6b9f64b887-jgrdp" to delete the pod: :: kubectl -n onap delete onap-so-so-6b9f64b887-jgrdp Then, wait for the pod to restart. To check: :: kubectl -n onap get po | grep so-so STEP 2 : declare the new cloud Site in ONAP AAI ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ declare a Complex in ONAP AAI A Cloud Site is located in a Building called "Complex" object in ONAP AAI datamodel. AAI REST API is used to declare the complex object. Here is an example using "curl" tool to send the API request. The new Complex is named "My_Complex" in this example. :: curl -X PUT \ https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/cloud-infrastructure/complexes/complex/My_Complex \ -H 'Accept: application/json' \ -H 'Authorization: Basic QUFJOkFBSQ==' \ -H 'Cache-Control: no-cache' \ -H 'Content-Type: application/json' \ -H 'Real-Time: true' \ -H 'X-FromAppId: jimmy-postman' \ -H 'X-TransactionId: 9999' \ -d '{ "physical-location-id": "My_Complex", "data-center-code": "example-data-center-code-val-5556", "complex-name": "My_Complex", "identity-url": "example-identity-url-val-56898", "physical-location-type": "example-physical-location-type-val-7608", "street1": "example-street1-val-34205", "street2": "example-street2-val-99210", "city": "Beijing", "state": "example-state-val-59487", "postal-code": "100000", "country": "example-country-val-94173", "region": "example-region-val-13893", "latitude": "39.9042", "longitude": "106.4074", "elevation": "example-elevation-val-30253", "lata": "example-lata-val-46073" }' -k Check the Complexes in ONAP AAI: :: curl -X GET \ https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/cloud-infrastructure/complexes \ -H 'Accept: application/json' \ -H 'Authorization: Basic QUFJOkFBSQ==' \ -H 'X-FromAppId: AAI' \ -H 'X-TransactionId: 808b54e3-e563-4144-a1b9-e24e2ed93d4f' \ -H 'cache-control: no-cache' -k declare a Cloud Site in ONAP AAI To declare a Cloud Site, you need to use the AAI REST API. The new Cloud site is named "INTEGRATION_CENTER" in this example. There is also a "Cloud Owner" notion in ONAP AAI datamodel. The new Cloud Owner is named "MyCompanyName" in this example. In Openstack, there is also a "region" notion. You need to get the value of the region that has been set when deploying your openstack platform In the following example the openstack region has the value "RegionOne" (in the parameter "cloud-extra-info") parameter "complex-name" relate to the Complex you previously declared. parameter "cloud-type" take the value "openstack" parameter "cloud-region-version" is refering to your openstack version parameter "cloud-extra-info" will contain the Openstack "region". Here, the region ID of the deployed openstack cloud site will be set. In the following example the openstack region has the value "RegionOne". parameter "esr-system-info-list" will contain the list of openstack platform credentials that will allow ONAP MultiCloud to communicate with the Cloud Site. :: curl -X PUT \ https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/MyCompanyName/INTEGRATION_CENTER \ -H 'Accept: application/json' \ -H 'Authorization: Basic QUFJOkFBSQ==' \ -H 'Cache-Control: no-cache' \ -H 'Content-Type: application/json' \ -H 'Postman-Token: 8b9b95ae-91d6-4436-90fa-69cb4d2db99c' \ -H 'Real-Time: true' \ -H 'X-FromAppId: jimmy-postman' \ -H 'X-TransactionId: 9999' \ -d '{ "cloud-owner": "MyCompanyName", "cloud-region-id": "INTEGRATION_CENTER", "cloud-type": "openstack", "owner-defined-type": "N/A", "cloud-region-version": "pike", "complex-name": "My_Complex", "cloud-zone": "CloudZone", "sriov-automation": false, "identity-url": "WillBeUpdatedByMultiCloud", "cloud-extra-info":"{\"openstack-region-id\":\"RegionOne\"}" "esr-system-info-list": { "esr-system-info": [ { "esr-system-info-id": "", "service-url": "http://", "user-name": "", "password": "", "system-type": "VIM", "ssl-insecure": true, "cloud-domain": "Default", "default-tenant": "", "system-status": "active" } ] } }' -k Associate Cloud site to a Complex in ONAP AAI: :: curl -X PUT \ https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/MyCompanyName/INTEGRATION_CENTER/relationship-list/relationship \ -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 '{ "related-to": "complex", "related-link": "/aai/v16/cloud-infrastructure/complexes/complex/My_Complex", "relationship-data": [ { "relationship-key": "complex.physical-location-id", "relationship-value": "My_Complex" } ] }' -k Check the Cloud Site creation in ONAP AAI: :: curl -X GET \ https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/cloud-infrastructure/cloud-regions \ -H 'Accept: application/json' \ -H 'Authorization: Basic QUFJOkFBSQ==' \ -H 'X-FromAppId: AAI' \ -H 'X-TransactionId: 808b54e3-e563-4144-a1b9-e24e2ed93d4f' \ -H 'cache-control: no-cache' -k Associate an Availability zone to a Cloud site in ONAP AAI: :: curl -X PUT \ https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/MyCompanyName/INTEGRATION_CENTER/availability-zones/availability-zone/brittany \ -H 'Accept: application/json' \ -H 'Authorization: Basic QUFJOkFBSQ==' \ -H 'Content-Type: application/json' \ -H 'X-FromAppId: AAI' \ -H 'X-TransactionId: get_aai_subscr' \ -H 'cache-control: no-cache' \ -d '{ "availability-zone-name": "brittany", "hypervisor-type": "KVM" }' Check the operation: :: curl -X GET \ https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/MyCompanyName/INTEGRATION_CENTER/availability-zones \ -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' STEP 3 : Register the Cloud Site in ONAP Multicloud ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :: curl -X POST \ http://msb.api.discovery.simpledemo.onap.org:30280/api/multicloud/v1/MyCompanyName_INTEGRATION_CENTER/registry \ -H 'Accept: application/json' \ -H 'Cache-Control: no-cache' \ -H 'Content-Type: application/json' \ check registration: :: curl -X GET \ https://aai.api.sparky.simpledemo.onap.org:30233/aai/v16/cloud-infrastructure/cloud-regions/cloud-region/MyCompanyName/INTEGRATION_CENTER?depth=all \ -H 'Accept: application/json' \ -H 'Authorization: Basic QUFJOkFBSQ==' \ -H 'Cache-Control: no-cache' \ -H 'Content-Type: application/json' \ -H 'Real-Time: true' \ -H 'X-FromAppId: jimmy-postman' \ -H 'X-TransactionId: 9999' -k