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\" &gt; /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\" &gt; /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>