openmano api - javimg89/openmano GitHub Wiki
This document describes the northbound interface of openmano Orquestator.
The Northbound interface is based on REST and it allows performing actions over the following entities:
- Tenant: Intended to create groups of resources. In this version no security mechanisms are implemented.
- Datacenters: Is a VIM that contains a specific pool of resources.
- VNFs: SW-based network function, composed of one or several VM that can be deployed on an NFV datacenter.
- Scenarios: topologies of VNFs and their interconnections.
- Instances: Each one of the Scenarios deployed in a datacenter.
-
The HTTP HEADER "X-Auth-Token" is ignored in this version, though it will be available in future. Current version does not support security and authentication
-
Server supports JSON (by default), and YAML. Use HTTP HEADER "Content-Type: application/FORMAT" for specifying the input format and HTTP HEADER "Accept: application/FORMAT" for the wanted output format. In this version it does not support the URL suffix .yaml or .json as for example openstack neutron does.
-
Server supports URL Query String filters. For example: HTTP GET /whatever?name1=value1&name2=value2" Will filter by "name1=value1 AND name2=value2"
-
In a near future version it will support pagination using limit, market, page_reverse and field filtering in the same way as openstack neutron.
-
Possible responses of HTTP Commands are: 200 Ok 400 Bad Request 404 Not Found 405 Method Not Allowed 409 Conflict 503 Service Unavailable 500 Internal Server Error
#Openmano Server primitives#
##Tenants## ###Get /openmano/tenants### Gets a list of all tenants
Params: None
Response: Content-type: application/json
{
"tenants": [
{
"created_at": "2015-08-06T10:38:07",
"description": "tenant_de_prueba",
"uuid": "76094a2a-3c16-11e5-9fb6-5254004aea96",
"name": "tenanttest"
},
{
"created_at": "2015-12-04T13:06:54",
"description": "A description...",
"uuid": "8293285c-9a7f-11e5-bc4f-5254004aea96",
"name": "John Doe"
}
]
}
###Get /openmano/tenants/{tenant_id}### Get the full description of the tenant identified by tenant_id (tenant´s name or uuid)
Params: None
Response: Content-type: application/json
{
"tenant": {
"created_at": "2015-12-04T13:06:54",
"description": "A description...",
"modified_at": null,
"uuid": "8293285c-9a7f-11e5-bc4f-5254004aea96",
"name": "John Doe"
}
}
###Post /openmano/tenants### Create new tenant
Params:(Extra parameters are ignored):
- name: tenant name provided by the client
- description: (optional) tenant description provided by the client
Content-type: application/json
{
"tenant":
{
"name": "John Doe",
"description": "A description..."
}
}
Response Content-type: application/json
{
"tenant": {
"created_at": "2015-12-04T13:06:54",
"description": "A description...",
"modified_at": null,
"uuid": "8293285c-9a7f-11e5-bc4f-5254004aea96",
"name": "John Doe"
}
}
###Put /openmano/tenants/{tenant_id}### Update tenant identified by tenant_id (tenant´s name or uuid)
Params: (Extra parameters are ignored):
- name: tenant name provided by the client
- description: (optional) tenant description provided by the client
Content-type: application/json
{
"tenant":
{
"name": "John Doe",
"description": " Unknown person..."
}
}
Response Content-type: application/json
{
"tenant": {
"created_at": "2015-12-04T13:06:54",
"description": " Unknown person...",
"modified_at": null,
"uuid": "8293285c-9a7f-11e5-bc4f-5254004aea96",
"name": "John Doe"
}
}
###Delete /openmano/tenants/{tenant_id}### Delete a tenant identified by tenant_id (tenant´s name or uuid)
Params:none
Response Content-type: application/json
{
"result": "tenant 9767ac6e-9a82-11e5-bc4f-5254004aea96 deleted"
}
##Datacenters## ###Get /openmano/{tenant_id}/datacenters### Get a list of datacenters attached to the tenant identified by tenant_id (tenant´s name or uuid). The parameter 'tenant_id' can be replaced by 'all' to get a list of all datacenters of all tenants.
Params:none
Response Content-type: application/json
{
"datacenters": [
{
"vim_url": "http://localhost:9080/openvim",
"created_at": "2015-12-09T10:10:00",
"uuid": "a01a4b34-9e54-11e5-bc4f-5254004aea96",
"name": "John_Doe_data_center"
}
]
}
###Get /openmano/{tenant_id}/datacenters/{datacenter_id}### Get a the parameters of a datacenter attached to a tenant identified by tenant_id. The parameter 'tenant_id' can be replaced by 'all' to look for the datacenter_id in all tenants.
Params:none
Response Content-type: application/json
{
"datacenter": {
"vim_url": "http://localhost:9080/openvim",
"created_at": "2015-12-09T10:10:00",
"vim_url_admin": null,
"uuid": "a01a4b34-9e54-11e5-bc4f-5254004aea96",
"name": "John_Doe_data_center"
}
}
###Post /openmano/datacenters### Create a new datacenter
Params:
- name: name of the datacenter to create
- vim_url: url of the machine where is hold VIM (Openvim) (TBC)
Content-type: application/json
{
"datacenter":{
"name": "John_Doe_data_center",
"vim_url": "http://localhost:9080/openvim"
}
}
Response Content-type: application/json
{
"datacenter": {
"vim_url": "http://localhost:9080/openvim",
"created_at": "2015-12-09T10:10:00",
"vim_url_admin": null,
"uuid": "a01a4b34-9e54-11e5-bc4f-5254004aea96",
"name": "John_Doe_data_center"
}
}
Response params: ###Put /openmano/datacenters/{datacenter_id_name}### Modify a datacenter.
Params:
Params that can be changed are:
- name: datacenter name
- vim_url: vim url
Content-type: application/json
{
"datacenter":{
"name": "new_datacenter_name",
"vim_url": "http://localhost:9080/openvim"
}
}
Response
If no error, same as "Post /openmano/datacenters"
###Get /openmano/datacenters/{datacenter_id}/networks### Get all networks availables for a datacenter identified by datacenter_id
Params:none
Response Content-type: application/json
{
"networks": [
{
"multipoint": true,
"description": null,
"created_at": "2015-12-09T13:25:22",
"uuid": "6ed931bc-5c3b-11e5-9272-5254004aea96",
"shared": true,
"type": "bridge",
"name": "Management"
},
{
"multipoint": true,
"description": null,
"created_at": "2015-12-09T13:25:22",
"uuid": "f8a2e52e-5ae6-11e5-875a-5254004aea96",
"shared": true,
"type": "bridge",
"name": "Service"
}
]
}
###Post /openmano/{tenant_id}/datacenters/{datacenter_id}/action###
(TBC)
perform an action over datacenter, can use both uuid or name
Params:(Extra parameters are ignored)
Content-type: application/json:
To update nets related to datacenter identified by {datacenter_id}:
{
"net-update": null
}
To edit a network related to datacenter identified by {datacenter_id}:
{
"net-edit":{
"net": "net_name_to_change",
"name": "net_new_name",
"description": "new_description",
"shared": true
}
To delete a network related to datacenter identified by {datacenter_id}:
{
"net-delete":{
"net": "net name"
}
}
Response Content-type: application/json
###Delete /openmano/datacenters/{datacenter_id}###
Delete a datacenter
Params:none
Response Content-type: application/json
{
"result": "datacenter e3042842-9e78-11e5-bc4f-5254004aea96 deleted"
}
###Post /openmano/<tenant_id>/datacenters/{datacenter_id}### Attach the datacenter identifiedby datacenter_id and openvim tenant to the openmano tenant
Params:none
Response
If no error, same as GET /openmano/{tenant_id}/datacenters/{datacenter_id}
###DELETE /openmano/<tenant_id>/datacenters/{datacenter_id}### Detach a datacenter and this tenant
Params:none
Response
If no error, same as GET /openmano/{tenant_id}/datacenters/{datacenter_id}
##VNFs##
###Get /openmano/{tenant_id}/vnfs### Get a list of vnfs
Params: none
Response Content-type: application/json
{
"vnfs": [
{
"description": "VNF1 description",
"created_at": "2015-08-24T13:41:20",
"uuid": "09c7209c-4a55-11e5-9f62-5254004aea96",
"name": "VNF1",
"path": "/path/to/VNF1.vnfd",
"public": true,
"physical": false
},
{
"description": "VNF1 description"",
"created_at": "2015-09-15T13:22:24",
"uuid": "09d14bf0-5b9c-11e5-a873-5254004aea96",
"name": "VNF2",
"path": "/path/to/VNF2.vnfd",
"public": true,
"physical": false
}
]
}
###Get /openmano/{tenant_id}/vnfs/{vnf_id}### Get vnf details
Params: none
Response
- VNFC: Array of virtual machines which compose the vnf
- External-connections: array of vnf's connections
- vm_name: name of the internal virtual machine which this connections is connected
- external_name: name of the conection to show in the interface
- type: type of connection
- vpci: Virtual PCI address
- bw: bandwidth
- internal_name: local iface name of the VM
Content-type: application/json
{
"vnf": {
"VNFC": [
{
"description": "VM 1 in the MultiVM template",
"uuid": "09c73a00-4a55-11e5-9f62-5254004aea96",
"name": "VM1"
}
],
"description": "VNF1 description",
"created_at": "2015-08-24T13:41:20",
"uuid": "09c7209c-4a55-11e5-9f62-5254004aea96",
"external-connections": [
{
"vm_name": "VM1",
"external_name": "bridge",
"uuid": "09c75562-4a55-11e5-9f62-5254004aea96",
"type": "bridge",
"vpci": null,
"bw": null,
"internal_name": "eth0",
"vm_id": "09c73a00-4a55-11e5-9f62-5254004aea96"
}
],
"path": "/home/psa/openmano/openmano/vnfrepo/VNF1.vnfd",
"physical": false,
"nets": [],
"public": true,
"name": "VNF1"
}
}
###Post /openmano/{tenant_id}/vnfs### insert a vnf into the catalogue. Creates the flavor and images in the VIM, and creates the VNF and its internal structure in the OPENMANO DB
Params:
See vnf-template-2vm.yaml and vnf-template.yaml
-
vnf:
- name (required): vnf name
- description (optional): vnf description
- class (optional): Used to organize VNFs
- public (optional): boolean
- physical (optional): boolean
-
external-connections (required): array of objects. Each one describe a connection that the vnf expose to the outside.
- name (required): connection name
- type (required): type of connection. Types availables are: "mgmt","bridge","data"
- VNFC (required): Name of the internal VM to which this connection is connected. Must match with one of the VM name of the VNF section
- local_iface_name (required): interface name of the VM. Must match with one of the interfaces described in the VM description.
- description (optional): Connection description.
-
internal-connections (optional): Array of objects which describes inner connections between VMs that the vnf contains
- name (required): inner connection name
- description (optional): inner connection description
- type (required): type of connection. Types availables are: "bridge","data","ptp"
-
elements (required): Array of objects. Describes end points of the inner connection
- VNFC: Name of the internal VM to which this connection is connected. Must match with one of the VM name of the VNF section
- local_iface_name: interface name of the VM. Must match with one of the interfaces described in the VM description.
-
VNFC: Array of objects that describes each of the inner VMs. Must contain at least one.
- name (required): Name of the VM
- description (optional): Description of the VM
- VNFC image (required): Path of the image location
-
image metadata (optional)
- architecture
- use_incremental: "yes" or "no"
- vpci:
- os_distro:
- os_type:
- os_version:
- bus:
-
processor (optional)
- model (required)
- features
-
hypervisor
- type
- version
- ram: RAM memory of the VM. Only for traditional cloud VMs. Memory in MBytes (not from hugepages, oversubscription is allowed)
- vcpus: Only for traditional cloud VMs. Number of virtual CPUs (oversubscription is allowed).
- disk: disk size in GiB, by default 1
-
numas: Array of numa nodes description
- memory: memory in GBytes
-
cores | paired-threads | threads (only use one)
- cores-id (optional): array of integer to specify each core
- paired-threads-id (optional): Array of paired threads. (i.e:[ [0,1], [2,3], [4,5], [6,7], [8,9] ]) By default follows incremental order
- threads-id (optional): array of integer to specify each thread
-
interfaces
- name (required): interface name
- dedicated (required): available options are "yes"(passthrough), "no"(sriov with vlan tags), "yes:sriov"(sriovi, but exclusive and without vlan tag)
- bandwidth (required): bandwidth in Mbps or Gbps.
- vpci (optional): Virtual PCI address
- mac_address (optional): avoid this option if possible
-
bridge-ifaces
- name (required): bridge interface name
- bandwidth (Optional): Informative only
- vpci (optional): Virtual PCI address
- mac_address (optional): avoid this option if possible
- model (optional): ("virtio","e1000","ne2k_pci","pcnet","rtl8139") By default, it is automatically filled by libvirt
-
devices: extra devices asigned to the VM. The order determines device letter asignation (hda, hdb, ...)
- type: ("disk","cdrom","xml")
- image: path to image
-
image metadata: device image metadata.
- architecture
- use_incremental
- vpci
- os_distro
- os_type
- os_version
- bus
- vpci (optional): depending on the device type (not needed for disk or cdrom)
- xml: xml text for XML described devices
Response
Content-type: application/json
###Delete /openmano/{tenant_id}/vnfs/{vnf_id}### delete a vnf from database, and images and flavors in VIM when appropriate, can use both uuid or name
Params: none
Response
Content-type: application/json
{
"result": "VNF 1ec2cdac-6779-11e5-bc4f-5254004aea96 deleted"
}
###Post /openmano/{tenant_id}/topology/verify### Action:
Params:
Response params:
##Scenarios## ###Post /openmano/{tenant_id}/scenarios ###
(TBC)
Add a scenario into the catalogue. Creates the scenario and its internal structure in the OPENMANO DB
Params:
###Post /openmano/{tenant_id}/scenarios/{scenario_id}/action### take an action over a scenario
Params:
-
Deploy an scenario: deploy all VNFs of the scenario. Creates a new instance scenario
- instance_name (required): name of the scenario to deploy
- description (optional): a description
- datacenter (optional): name of the datacenter where the scenario will be deployed.
Content-type: application/json:
{ "deploy": { "instance_name": "scenario1", "description" : "a description...", "datacenter" : "mydc" } }
-
Start an scenario: Equivalent to deploy
- instance_name (required): name of the scenario to start
- description (optional): a description
- datacenter (optional): name of the datacenter where the scenario will be started.
Content-type: application/json:
{ "start": { "instance_name": "scenario1", "description" : "a description...", "datacenter" : "mydc" } }
-
Reserve an scenario: Launch a new instance of the scenario without starting virtual machines.
- instance_name (required): name of the scenario to launch
- description (optional): a description
- datacenter (optional): name of the datacenter where the scenario will be launched.
Content-type: application/json:
{ "reserve": { "instance_name": "scenario1", "description" : "a description...", "datacenter" : "mydc" } }
-
Verify an scenario: deploy and destroy an scenario to check that there is room for it.
- instance_name (required): name of the scenario to verify
- description (optional): a description
- datacenter (optional): name of the datacenter where the scenario will be verified.
Content-type: application/json:
{ "verify": { "instance_name": "scenario1", "description" : "a description...", "datacenter" : "mydc" } }
###Get /openmano/{tenant_id}/scenarios### Get a list of existing scenarios for a tenant identified by tenant_id
Params: none
Response Content-type: application/json
{
"scenarios": [
{
"created_at": "2015-09-15T13:02:07",
"description": "Scenario1 test",
"public": false,
"uuid": "34c4db72-5b99-11e5-a873-5254004aea96",
"name": "Scenario1"
},
{
"created_at": "2015-09-15T09:49:47",
"description": "Scenario2 test",
"public": false,
"uuid": "5638c64e-5b7e-11e5-a873-5254004aea96",
"name": "Scenario2"
}
]
}
###Get /openmano/{tenant_id}/scenarios/{scenario_id}### Get details about a scenario. Can use both uuid or name
Params: none
Response Content-type: application/json
{
"scenario": {
"description": "Pconcepto-x",
"created_at": "2015-09-15T13:02:07",
"modified_at": null,
"name": "Pconcepto-x",
"vnfs": [
{
"vnf_id": "1f3d9aca-5b7e-11e5-a873-5254004aea96",
"description": "VNF prueba concepto1",
"interfaces": [
{
"sce_net_id": "34c4f26a-5b99-11e5-a873-5254004aea96",
"uuid": "34c5147a-5b99-11e5-a873-5254004aea96",
"interface_id": "1f3dce50-5b7e-11e5-a873-5254004aea96"
}
],
"name": "VNF-pconcepto1",
"nets": [],
"vms": [
{
"description": "prueba para demo",
"interfaces": [
{
"external_name": "bridge",
"uuid": "1f3dce50-5b7e-11e5-a873-5254004aea96",
"vpci": null,
"bw": null,
"internal_name": "eth0",
"model": null,
"type": "bridge",
"net_id": null
},
{
"external_name": "eth1",
"uuid": "1f3de232-5b7e-11e5-a873-5254004aea96",
"vpci": null,
"bw": null,
"internal_name": "eth1",
"model": null,
"type": "bridge",
"net_id": null
}
],
"name": "VMF-pconcepto1",
"image_id": "bbecf86a-5b7a-11e5-a873-5254004aea96",
"flavor_id": "09c350f2-4a55-11e5-9f62-5254004aea96",
"uuid": "1f3db2e4-5b7e-11e5-a873-5254004aea96"
}
],
"uuid": "34c4fefe-5b99-11e5-a873-5254004aea96"
}
],
"nfvo_tenant_id": "76094a2a-3c16-11e5-9fb6-5254004aea96",
"nets": [
{
"description": null,
"vim_id": null,
"name": "default",
"external": true,
"type": "bridge",
"uuid": "34c4f26a-5b99-11e5-a873-5254004aea96"
}
],
"public": false,
"uuid": "34c4db72-5b99-11e5-a873-5254004aea96"
}
}
###Delete /openmano/{tenant_id}/scenarios/{scenario_id}### Delete a scenario from database, can use both uuid or name
Params: none
Response Content-type: application/json
{
"result": "Scenario 5638c64e-5b7e-11e5-a873-5254004aea96 Scenario2 deleted"
}
###Put /openmano/{tenant_id}/scenarios/{scenario_id}### Edit an existing scenario. Only can be edited the scenario name, scenario description, graphical topology of the VNFs and VNF name and description.
Params:
(TBC)
Response Content-type: application/json
##Instances## ###Get /openmano/{tenant_id}/instances### Get instance list
Params: none
Response Content-type: application/json
{
"instances": [
{
"created_at": "2015-12-14T09:24:00",
"scenario_id": "cd4cf84e-5b7a-11e5-a873-5254004aea96",
"description": "Instance description",
"uuid": "06e9f0ea-a23c-11e5-bc4f-5254004aea96",
"name": "Instance 1"
},
{
"created_at": "2015-12-01T12:20:08",
"scenario_id": "fbcab89a-5dd8-11e5-8018-5254004aea96",
"description": "Instance description",
"uuid": "7abd7196-981d-11e5-bc4f-5254004aea96",
"name": "Instance 2"
}
]
}
###Get /openmano/{tenant_id}/instances/{instance_id}### get instances details, can use both uuid or name
Params: none
Response Content-type: application/json
{
"uuid": "06e9f0ea-a23c-11e5-bc4f-5254004aea96",
"description": "Instance x description",
"scenario_id": "cd4cf84e-5b7a-11e5-a873-5254004aea96",
"datacenter_id": "487c6844-40df-11e5-aaa7-5254004aea96",
"vnfs": [
{
"vnf_name": "VNF1",
"vnf_id": "bbf04ac4-5b7a-11e5-a873-5254004aea96",
"uuid": "06ea139a-a23c-11e5-bc4f-5254004aea96",
"vms": [
{
"status": "INACTIVE",
"uuid": "06ea4aae-a23c-11e5-bc4f-5254004aea96",
"vim_vm_id": "06e7ca2c-a23c-11e5-92d5-5254004aea96",
"created_at": "2015-12-14T09:24:00",
"interfaces": [],
"name": "VMF1"
}
]
}
],
"scenario_name": "Scenario x",
"nfvo_tenant_id": "76094a2a-3c16-11e5-9fb6-5254004aea96",
"nets": [],
"created_at": "2015-12-14T09:24:00",
"name": "Instance x"
}
###Delete /openmano/{tenant_id}/instances/{instance_id}### delete instance from VIM and from database, can use both uuid or name
Params: none
Response Content-type: application/json
{
"result": "instance c8d1fca2-677c-11e5-bc4f-5254004aea96 deleted"
}
###Post /openmano/{tenant_id}/instances/{instance_id}/action### take an action over a scenario instance
Params:
Content-type: application/json:
No extra parameters are allowed. For reboot, the "type" is ignored
To start an instance:
{
"start": null
}
To pause an instance:
{
"pause": null
}
To resume an instance:
{
"resume": null
}
To shutoff an instance:
{
"shutoff": null
}
To shutdown an instance:
{
"shutdown": null
}
To forceOff an instance:
{
"forceOff": null
}
To rebuild an instance:
{
"rebuild": null
}
To reboot an instance:
{
"reboot": {
"type": "SOFT"
}
##Physicalview## ###Get /openmano/{tenant_id}/physicalview/{datacenter}###
Deprecated
##Topology## ###Post /openmano/{tenant_id}/topology/deploy### Deprecated