MultiCloud Plugin for VMware Integrated OpenStack
Supported features
Northbound APIs for SO
MultiCloud VIO Plugin supports OpenStack services proxy APIs since the beginning, and later in Casablanca release, VIO plugin supports infra_workload API for SO. Use cases like vFW/vDNS will leverage these APIs to instantiate VNFs.
Northbound APIs for VF-C
MultiCloud VIP Plugin supports VF-C by legacy Open-O APIs, and these APIs evolved according to the requirements of VF-C and use cases. VoLTE use case leverage these APIs to instantiate VNFs.
Support Placement Policies for OOF
Since Beijing release, to help OOF to make better placement decision, MultiCloud expose a capacity check API.
Support OpenStack Resources Discovery
When onboarding new VMware OpenStack through ESR UI, VIO plugin could discover current OpenStack Resources like flavors/images/networks/hypervisors, and update them in A&AI.
Support HPA Discovery
The HPA information will be automatically discovered and registered during VIM onboarding process.
Support Cloud Agnostic Placement Policies
The cloud agnostic information like Guarantee/Burstable QoS will be automatically discovered and registered during VIM onboarding process.
Support Auto-Healing Close Loop
Leveraging VESAgent for meter collectrion and healthy report, VIO plugin supports the auto-healing/auto-scaling scenarios in ONAP.
Support Events Federation
Federate the events of VIM layer with ONAP message bus, it provide direct help to HA fencing and improve the efficiency of VM recover with performance verification.
Supported Use Cases
vFW/vDNS
vCPE
VoLTE
Cloud Agnostic Placement Policy Enablement
Currently two types of cloud agnostic intent policies are supported by VIO plugin, Guaranteed QoS and Burstable QoS. VIO plugin will register them when VIM onboard and OOF could make better placement decision based on these policies.
Enable on it on flavors
Discovering these kind of features are through flavor’s extra-specs, when you set quota:cpu_reservation_percent=100 and quota:memory_reservation_percent=100 in flavor, it will be recognized as Guaranteed QoS supported platform. When you choose other percentage for CPU and memory reservation, it will be recognized as Burstable QoS supported platform. Related information will be registered to A&AI.
MultiCloud VMware OpenStack Simulated API User Case
When there’s no real VIO environment at hands, we could still use fake_cloud APIs in VIO plugin to test ONAP functions. These set of APIs simulate the real VIO functions to interact with ONAP components.
Make sure you environment have msb,aai service and multicloud-vmware config file has the right msb_ip and msb_port value,The config file path is vio/vio/pub/config/congfig.py
Register Fake Cloud to AAI
Register vio information into AAI service with region name “vmware” and region id “fake”
$ curl -X PUT -H "X-TransactionId":"get_aai_subr" -H "X-FromAppId":"AAI" -H "Accept":"application/json" \
-H "Content-Type:"application/json" -H "Authorization:Basic QUFJOkFBSQ==" \
https://aai_ip:aai_port/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/vmware/fake \
-d "{
"cloud-owner": "vmware",
"cloud-region-id": "fake",
"cloud-type": "vmware",
"cloud-region-version": "4.0",
"identity-url": "http://MSB_IP:MSB_PORT/api/multicloud/v0/vmware_fake/identity/v3",
"cloud-zone": "cloud zone",
"complex-name": "complex name",
"esr-system-info-list": {
"esr-system-info": [
{
"system-name": "vmware-fake-cloud",
"type": "vim",
"service-url": "http://127.0.0.1:5000/v3",
"user-name": "admin",
"password": "vmware",
"system-type": "VIM",
"ssl-insecure": true,
"cloud-domain": "default",
"default-tenant": "admin",
}
]
}
}"
the identity url reprent the fake cloud identity url.
Test Examples
the ${fake_identiy_url}= “http://MSB_IP:MSB_PORT/api/multicloud/v0/vmware_fake/identity/v3” the ${msb_address} = “MSB_IP:MSB_PORT”
Get auth token
# send request to multicloud-framework(broker) service to get token of keystone V3
$ curl -X POST -d @test.json -H 'Content-Type:application/json' http://MSB_IP:MSB_PORT/api/multicloud/v0/vmware_fake/identity/v3/auth/tokens
test.json content example:
{
"auth": {
"scope": {"project": {"id": “<project-id>”}},
"identity":
{
"password": {"user": {"domain": {"name": “<doman-name>”}, "password": “<user-password>”, "name": “<user-name>”}}, "methods": ["password"]
}
}
}
Response: There are a large amounts of data including service endpoint, user information, etc. For our testing We take nova and identity service endpoint address and auth token which is in response header named “X-Subject-Token”.
# you can find the endpoint url namespace is “api/multicloiud-vio/v0/vmware_fake”, it represent the multicloud-vio service, So requests sending to mulitcloud-vio will be forwarded to fake cloud.the ip and port reprenst ${msb_address}
Identity endpoint:
http://$msb_address/api/multicloud-vio/v0/vmware_fake/identity
Nova endpoint:
http://$msb_address/api/multicloud-vio/v0/vmware_fake/compute/<user-tenantid>
List projects
Use identity’s endpoint: http://$msb_address/api/multicloud-vio/v0/vmware_fake/identity/
$ curl -X GET -H 'X-Auth-Token:<token>' http://$msb_address/api/multicloud-vio/v0/vmware_fake/identity/projects
Get os Hypervisor
Use nova’s endpoint: http://$msb_address/api/multicloud-vio/v0/vmware_fake/nova/<user-tenantid>
$ curl -X GET -H 'X-Auth-Token:<token>' http://$msb_address/api/multicloud-vio/v0/vmware_fake/nova/<tenantid>/os-hypervisors/detail
List instance of user’s project
$ curl -X GET -H 'X-Auth-Token:<token>' http://$msb_address/api/multicloud-vio/v0/vmware_fake/nova/<tenantid>/servers
Show instance detail
you need to input <server-id> in url path.
$ curl -X GET -H 'X-Auth-Token:<token>' http://$msb_address/api/multicloud-vio/v0/vimid/nova/tenantid/servers/<server-id>
Shutdown instance
you need to input <server-id> in url path
$ curl -X POST -d '{"os-stop":null}' -H 'X-Auth-Token:<token>' -H 'Content-Type:application/json' http://$msb_address/api/multicloud-vio/v0/vmware_fake/nova/<tenantid>/servers/<server-id>/action
Start instance
you need to input <server-id> in url path
$ curl -X POST -d '{"os-start":null}' -H 'X-Auth-Token:<token>' -H 'Content-Type:application/json' http://$msb_address/api/multicloud-vio/v0/vmware_fake/nova/<tenantid>/servers/<server-id>/action
Suspend instance
you need to input <server-id> in url path
$ curl -X POST -d '{"suspend":null}' -H 'X-Auth-Token:<token>' -H 'Content-Type:application/json' http://$msb_address/api/multicloud-vio/v0/vmware_fake/nova/<tenantid>/servers/<server-id>/action
Resume instance
you need to input <server-id> in url path
$ curl -X POST -d '{"resume":null}' -H 'X-Auth-Token:<token>' -H 'Content-Type:application/json' http://$msb_address/api/multicloud-vio/v0/vmware_fake/nova/<tenantid>/servers/<server-id>/action
Pause instance
you need to input <server-id> in url path
$ curl -X POST -d '{"pause":null}' -H 'X-Auth-Token:<token>' -H 'Content-Type:application/json' http://$msb_address/api/multicloud-vio/v0/vmware_fake/nova/<tenantid>/servers/<server-id>/action
Unpasue instance
you need to input <server-id> in url path
$ curl -X POST -d '{"unpause":null}' -H 'X-Auth-Token:<token> -H 'Content-Type:application/json' http://$msb_address/api/multicloud-vio/v0/vmware_fake/nova/<tenantid>/servers/<server-id>/action
Reboot instance
you need to input <server-id> in url path
$ curl -X POST -d '{"reboot":{"type":"HARD"}}' -H 'X-Auth-Token:<token> -H 'Content-Type:application/json' http://$msb_address/api/multicloud-vio/v0/vmware_fake/nova/<tenantid>/servers/<server-id>/action
list heat stacks
$ curl -X GET -H 'X-Auth-Token:<token>' http://$msb_address/api/multicloud-vio/v0/vmware_fake/heat/<tenantid>/stacks
create preview stack
$ curl -X POST -H 'X-Auth-Token:<token>' http://$msb_address/api/multicloud-vio/v0/vmware_fake/heat/<tenantid>/stacks/preview \
-d "{
"files": {},
"disable_rollback": true,
"parameters": {
"flavor": "m1.heat"
},
"stack_name": "teststack",
"template": {
"heat_template_version": "2013-05-23",
"description": "Simple template to test heat commands",
"parameters": {
"flavor": {
"default": "m1.tiny",
"type": "string"
}
},
"resources": {
"hello_world": {
"type": "OS::Nova::Server",
"properties": {
"key_name": "heat_key",
"flavor": {
"get_param": "flavor"
},
"image": "40be8d1a-3eb9-40de-8abd-43237517384f",
"user_data": "#!/bin/bash -xv\necho \"hello world\" > /root/hello-world.txt\n"
}
}
}
},
"timeout_mins": 60
}"
create stack
$ curl -X POST -H 'X-Auth-Token:<token>' http://$msb_address/api/multicloud-vio/v0/vmware_fake/heat/<tenantid>/stacks \
-d "{
"files": {},
"disable_rollback": true,
"parameters": {
"flavor": "m1.heat"
},
"stack_name": "teststack",
"template": {
"heat_template_version": "2013-05-23",
"description": "Simple template to test heat commands",
"parameters": {
"flavor": {
"default": "m1.tiny",
"type": "string"
}
},
"resources": {
"hello_world": {
"type": "OS::Nova::Server",
"properties": {
"key_name": "heat_key",
"flavor": {
"get_param": "flavor"
},
"image": "40be8d1a-3eb9-40de-8abd-43237517384f",
"user_data": "#!/bin/bash -xv\necho \"hello world\" > /root/hello-world.txt\n"
}
}
}
},
"timeout_mins": 60
}"
delete stack
$ curl -X DELETE -H 'X-Auth-Token:<token>' http://$msb_address/api/multicloud-vio/v0/vmware_fake/heat/<tenantid>/stacks/<stack_name>/<stack_id>