Melange API Specification

Contents

  1. Melange API Specification
    1. General Information
    2. Request/Response Types
    3. Versions
      1. List versions
    4. Extensions
      1. List extensions
      2. List extension details
        1. NOTE:
    5. IP Blocks
      1. List Tenant's blocks
      2. List Tenant's subnets
      3. Get details of tenant's IP block
      4. Create tenant's IP block
      5. Create tenant's subnet
      6. Update tenant's IP block
      7. Delete tenant's IP block
    6. IP Address from Tenant's IP Blocks
      1. List tenant's addresses
      2. List tenant's allocated addresses
      3. List Cloud Providers allocated addresses
      4. Get address details
      5. Allocate tenant's address
      6. Deallocate tenant's address
      7. Restore tenant's address
    7. Static Routes
        1. List all Static Routes for an IpBlock
        2. Get details of a static route
      1. Create a Static Route for an IpBlock
      2. Update a static route
      3. Delete a static route
    8. IP allocations in a Network
      1. Allocate address from tenant's network
      2. List allocated IpAddresses from a tenant's network
    9. NAT'ing
      1. List globals
      2. List locals
      3. Assign globals
      4. Assign locals
      5. Remove global
      6. Remove local
      7. Remove all globals
      8. Remove all locals
    10. IP Policy
      1. Policy
        1. List all Tenant's IP Policies
        2. Get details of a Tenant's IP Policy
      2. Create an IP Policy for a tenant
      3. Update an IP Policy for a tenant
      4. Delete an IP Policy for a tenant
      5. Unusable IP Ranges
        1. List all unusable ip ranges of a tenant's policy
        2. Get details of a tenant's policy's unusable ip range
        3. Create a unusable ip range in tenant's policy
        4. Update details of a tenant's policy's unusable ip range
        5. Delete a tenant's policy's unusable ip range
      6. Tenant Policy Unusable Ip Octets
        1. List all unusable ip octets of a tenant's policy
        2. Get details of a tenant's policy's unusable ip octet
        3. Create a unusable ip octet in tenant's policy
        4. Update details of a tenant's policy's unusable ip octet.
        5. Delete a tenant's policy's unusable ip octet
    11. To Be Done:

General Information

The Melange API is implemented using a RESTful web service interface.

* All GET /resources accepts 'limit' and 'marker' params. If these params are not passed default limit is applied.

* If POST or PUT on a resource doesn't send mandatory params, API returns '400 Bad Request' response.

Request/Response Types

* The Melange API supports both the JSON and XML data serialization formats.

* The request format is specified using the Content-Type header and is required for operations that have a request body.

* The response format can be specified in requests using either the Accept header or adding an .xml or .json extension to the request URI.

* If no response format is specified, JSON is the default.

* If conflicting formats are specified using both an Accept header and a query extension, the query extension takes precedence.

Versions


List versions


Verb

URI

Description

GET

/

Lists all versions of the API

Params:

None

Response Codes:

Normal Response code: 200

JSON Response:

{
 "versions": 
                 [
                   {"status": "CURRENT", "name": "v0.1", "links":  [ {"href": "http://localhost:9898/v0.1", "rel": "self"}]
                   }
                 ]
}

Extensions

The Melange API is extensible. The API Extensions allow introducing new features in the API without requiring a version change and allows vendor specific niche functionality. The API extensions work similar to nova extensions.


List extensions


Verb

URI

Description

GET

/extensions

Lists all extensions of the API

Params:

None

Response Codes:

Normal Response code: 200


List extension details


Verb

URI

Description

GET

/extensions/{alias}

Get details of all extensions of the API

Params:

None

Response Codes:

Normal Response code: 200

NOTE:

All the urls below are prefixed by "/v0.1".

IP Blocks


List Tenant's blocks


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/ip_blocks

List all ip blocks of a tenant

Params:

type ('public' or 'private')

Response Codes:

Normal Response code: 200


List Tenant's subnets


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/subnets

List all subnets of a tenant's ip block

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When IpBlock doesn't exist]


Get details of tenant's IP block


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/ip_blocks/:(id)

Get details of a tenant's ip block

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When IpBlock doesn't exist]


Create tenant's IP block


Verb

URI

Description

POST

/ipam/tenants/{tenant_id}/ip_blocks

Create a new IP block for a tenant

Params:

'type': 'public' or 'private' [Mandatory]

'cidr': IPV4 or IPV6 cidr [Mandatory]

'network_id': Can be a uuid, any string accepted

'policy_id': Is a uuid, has to be an existing policy

'dns1': Primary dns server ip address, defaults to dns configured in melange

'dns2': Secondary dns server ip address, defaults to dns configured in melange

'gateway': any valid ip address, defaults to second ip address of the block

Response Codes:

Normal Response code: 201

Error - 400 Bad Request [When mandatory fields are not present or field validations fail]


Create tenant's subnet


Verb

URI

Description

POST

/ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/subnets

Create a new subnet in a tenant's IP block

Params:

'cidr': IpV4 or IpV6 cidr [Mandatory]

'network_id' : Can be a uuid, any string accepted

'policy_id' : Is a uuid, has to be an existing policy

'tenant_id' : Can be a uuid, any string accepted, defaults to parent block's tenant_id

Response Codes:

Normal Response code: 201

Error - 404 Not Found [When IpBlock for given ip_block_id and tenant_id doesn't exist]

Error - 400 Bad Request [When mandatory fields are not present or field validations fails]


Update tenant's IP block


Verb

URI

Description

PUT

/ipam/tenants/{tenant_id}/ip_blocks/:(id)

Update details of a tenant's ip block by given id

Params:

'network_id' : Can be a uuid, any string accepted

'policy_id' : Is a uuid, has to be an existing policy

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When IpBlock for given id and tenant_id doesn't exist]

Error - 400 Bad Request [When field validations fails]


Delete tenant's IP block


Verb

URI

Description

DELETE

/ipam/tenants/{tenant_id}/ip_blocks/:(id)

Delete a tenant's ip block by given id

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When IpBlock for given id and tenant_id doesn't exist]

IP Address from Tenant's IP Blocks


List tenant's addresses


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_addresses

List all ip addresses in a tenant's ip block. This will return all allocated and soft deallocated ip addresses.

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found (When IpBlock for given ip_block_id and tenant_id is not found)


List tenant's allocated addresses


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/allocated_ip_addresses

List all allocated ip addresses leased to tenant

Params:

'used_by_device': uuid of a device, can be any string. If given, IPs allocated to this device will be filtered and returned

Response Codes:

Normal Response code: 200


List Cloud Providers allocated addresses


Verb

URI

Description

GET

/ipam/allocated_ip_addresses

List all cloud provider's allocated ip addresses

Params:

'used_by_device': uuid of a device, can be any string. If given, IPs allocated to this device will be filtered and returned

Response Codes:

Normal Response code: 200


Get address details


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_addresses/{address}

Get details of an ip address in a tenant's ip block.

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found (When either IpBlock for given ip_block_id and tenant_id is not found, or IpAddress for given address is not found)


Allocate tenant's address


Verb

URI

Description

POST

/ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_addresses

Allocate an IpAddress from a tenant's block.

Params:

'address' : This address is used for allocation. If this is not provided, next available address will be allocated.

'interface_id' : Can be a uuid, any string accepted. Is an id pointing to the interface on which the ip will be configured

'tenant_id' : The 'lessee' tenant (the tenant actually using the ip, as opposed to the tenant owning the block). Defaults to the tenant owning the block.

'used_by_device' : Can be a uuid, any string accepted. Is an id pointing to the instance(or any other device) on which the ip will be used.

'mac_address' : any valid mac_address, applicable only for generating ipv6 addresses, Mandatory for ipv6 blocks.

Response Codes:

Normal Response code: 201

Error - 404 Not Found [When IpBlock for given ip_block_id is not found]

Error - 422 Unprocessable Entity [If any new ip_address can not be allocated from IpBlock]

Error - 409 Conflict [If the given address is already allocated]

Error - 400 Bad Request [When mandatory fields are not present or fields fail validations]


Deallocate tenant's address


Verb

URI

Description

DELETE

/ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_addresses/{address}

Deallocate an IpAddress from a tenant's block. This ip address will be deleted after a certain number of days. Number of days can be configured in melange.conf file

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found (When ip_block for given id and tenant_id is not found)


Restore tenant's address


Verb

URI

Description

PUT

/ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_addresses/{address}/restore

Restores a deallocated (and not deleted) address in a tenant's block.

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found (When IpBlock for given id and tenant_id is not found or IpAddress for given address is not found)

Static Routes


List all Static Routes for an IpBlock


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_routes

List all static routes for the ip_block

Params:

None

Response Codes:

Normal Response code: 200


Get details of a static route


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_routes/:(id)

Get details of the static route.

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When IpBlock for given ip_block_id and tenant_id does not exists or IpRoute for given id does not exists]


Create a Static Route for an IpBlock


Verb

URI

Description

POST

/ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_routes

Create an static route for an ip_block

Params:

'destination' : [Mandatory] IpAddress or Cidr of the destination host or network.

'netmask : netmask of the destination network, if applicable.

'gateway' : [Mandatory] IpAddress of the gateway.

Response Codes:

Normal Response code: 201

Error - 404 Not Found [When IpBlock for given ip_block_id and tenant_id does not exists]

Error - 400 Bad Request [When required parameters are not present or field validation fails]


Update a static route


Verb

URI

Description

PUT

/ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_routes/:(id)

Update details of a static route

Params:

'destination' : IpAddress or Cidr of the destination host or network.

'netmask : netmask of the destination network, if applicable.

'gateway' : IpAddress of the gateway.

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When IpBlock for given ip_block_id and tenant_id does not exists or Static Route for given id does not exists]

Error - 400 Bad Request [When field validation fails]


Delete a static route


Verb

URI

Description

DELETE

/ipam/tenants/{tenant_id}/ip_blocks/{ip_block_id}/ip_routes/:(id)

delete a static route

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When IpBlock for given ip_block_id and tenant_id does not exists or Static Route for given id does not exists]

IP allocations in a Network


Allocate address from tenant's network


Verb

URI

Description

POST

/ipam/tenants/{tenant_id}/networks/{network_id}/interfaces/{interface_id}/ip_allocations

Allocate an IPv4 and IPv6 address from a tenant's network

Params:

'addresses' : These addresses(can be array of ipv4 and/or ipv6 addresses) are used for allocation. If not provided, next available address will be allocated from one IPv4 and one IPv6 block.

'mac_address' : This will used while allocation IPv6 address. Mandatory if network has IPv6 block.

'tenant_id' : The 'lessee' tenant (the tenant actually using the ip, as opposed to the tenant owning the block). Defaults to the tenant owning the block from which IPs are allocated.

'used_by_device' : Can be a uuid, any string accepted. Is an id pointing to the instance(or any other device) on which the ip will be used.

Response Codes:

Normal Response code: 201

Error - 422 Unprocessable Entity [If ip address can not be allocated from Network]

Error - 404 Not Found [When network for a given network_id and tenant_id is not found]

Error - 409 Conflict [If the given address is already allocated]

Error - 400 Bad Request [When required parameters are not present or field validation fails]-~+~


List allocated IpAddresses from a tenant's network


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/networks/{network_id}/interfaces/{interface_id}/ip_allocations

Get all allocated IpAddresses from a tenant's network

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When network for a given network_id and tenant_id is not found]


===Deallocate all IpAddresses from a tenant's network ===


Verb

URI

Description

DELETE

/ipam/tenants/{tenant_id}/networks/{network_id}/interfaces/{interface_id}/ip_allocations

Delete all allocated IpAddresses from a tenant's network

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When network for a given network_id and tenant_id is not found]

NAT'ing

Tracking NAT information is designed to assist in the implementation and tracking of floating IPs.


List globals


Verb

URI

Description

GET

/ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_globals

List all outside globals for a local ip_address

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When IpBlock for ip block ID or IP Address by given address is not found]


List locals


Verb

URI

Description

GET

/ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_locals

List all outside globals for a local ip_address

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When IP Block for ip_block_id or IpAddress by given address is not found]


Assign globals


Verb

URI

Description

POST

/ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_globals

Finds local IpAddress from given ip_block_id and address and creates IpAddresses passed in params as its inside global.

Params:

{'ip_addresses':'[ { "ip_block_id" : "some_global_ip_block_id", "ip_address" : "some_global_ip_address" }, ..., {....} }

Response Codes:

Normal Response code: 200

Error - 400 Bad Request [When the values of ip_block_id and ip_address are missing in the params]


Assign locals


Verb

URI

Description

POST

/ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_globals

Finds global IpAddress from given ip_block_id and address and adds IpAddresses passed in params as its inside local.

Params:

{'ip_addresses':'[ { "ip_block_id" : "some_local_ip_block_id", "ip_address" : "some_local_ip_address" } ... {} }

Response Codes:

Normal Response code: 200

Error - 400 Bad Request [When the values of ip_block_id and ip_address are missing in the params]


Remove global


Verb

URI

Description

DELETE

/ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_globals/{inside_globals_address}

Finds the inside ip_address from given ip_block_id and address, and remove its inside global ip_address whose address is same as given inside_globals_address in URL.

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When IpBlock for ip_block_id or IpAddress by given address is not found]


Remove local


Verb

URI

Description

DELETE

/ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_locals/{inside_locals_address}

Finds the global ip_address from given ip_block_id and address, and remove its inside local ip_address whose address is same as given inside_locals_address in URL.

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When IpBlock for ip_block_id or IpAddress by given address is not found]


Remove all globals


Verb

URI

Description

DELETE

/ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_locals/{address}

Finds the inside ip_address from given ip_block_id and address, and remove all its inside global ip_addresses.

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When IpBlock for ip_block_id or IpAddress by given address is not found]


Remove all locals


Verb

URI

Description

DELETE

/ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_locals

Finds the global ip_address from given ip_block_id and address, and remove all its inside local ip_addresses.

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When IpBlock for ip_block_id or IpAddress by given address is not found]

IP Policy

Policy


List all Tenant's IP Policies


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/policies

List all policies of a tenant.

Params:

None

Response Codes:

Normal Response code: 200


Get details of a Tenant's IP Policy


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/policies/:(id)

Get details of the policy.

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When Policy for given id and tenant_id does not exists]


Create an IP Policy for a tenant


Verb

URI

Description

POST

/ipam/tenants/{tenant_id}/policies

Create an ip policy for the tenant

Params:

'name' : [Mandatory] Name of the policy.

'description' : Small description about the policy.

Response Codes:

Normal Response code: 201

Error - 400 Bad Request [When required parameters are not present or field validation fails]


Update an IP Policy for a tenant


Verb

URI

Description

PUT

/ipam/tenants/{tenant_id}/policies/:(id)

Update name or descritopn of a tenant's ip policy

Params:

'name' : Name of the policy.

'description' : Small description about the policy.

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When Policy for given id and tenant_id does not exists]

Error - 400 Bad Request [When required parameters are not present or field validation fails]


Delete an IP Policy for a tenant


Verb

URI

Description

DELETE

/ipam/tenants/{tenant_id}/policies/:(id)

Delete a tenant's ip policy

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When Policy for given id and tenant_id does not exists]

Unusable IP Ranges


List all unusable ip ranges of a tenant's policy


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_ranges

List all unusable ip ranges of a tenant's policy.

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When policy doesn't exist]


Get details of a tenant's policy's unusable ip range


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_ranges

Get details of a tenant's policy's unusable ip range.

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When Policy or IP Range doesn't exist]


Create a unusable ip range in tenant's policy


Verb

URI

Description

POST

/ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_ranges

Create a unusable ip range in tenant's policy.

Params:

'offset': integer [Mandatory, Can be +ve or -ve integer]

'length' : integer [Mandatory, Should be +ve integer]

Response Codes:

Normal Response code: 201

Error - 404 Not Found [When Policy doesn't exist]


Update details of a tenant's policy's unusable ip range


Verb

URI

Description

PUT

/ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_ranges/:(id)

Update details of a tenant's policy's unusable IP range

Params:

'offset': integer [Can be +ve or -ve integer]

'length' : integer [Should be +ve integer]

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When Policy or IP range doesn't exist]


Delete a tenant's policy's unusable ip range


Verb

URI

Description

DELETE

/ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_ranges/:(id)

Delete a tenant's policy's unusable ip range

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When Policy or IP range doesn't exist]

Tenant Policy Unusable Ip Octets


List all unusable ip octets of a tenant's policy


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_octets

List all unusable ip octets of a tenant's policy.

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When Policy doesn't exist]


Get details of a tenant's policy's unusable ip octet


Verb

URI

Description

GET

/ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_octets/:(id)

Get details of a tenant's policy's unusable ip octet.

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When Policy or IP octet doesn't exist]


Create a unusable ip octet in tenant's policy


Verb

URI

Description

POST

/ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_octets

Create a unusable ip octet in tenant's policy.

Params:

'octet': integer [Mandatory, Should be 0-255]

Response Codes:

Normal Response code: 201

Error - 404 Not Found [When Policy doesn't exist]


Update details of a tenant's policy's unusable ip octet.


Verb

URI

Description

PUT

/ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_octets/:(id)

Update details of a tenant's policy's unusable ip octet.

Params:

'octet': integer [Should be 0-255]

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When Policy or IP octet doesn't exist]


Delete a tenant's policy's unusable ip octet


Verb

URI

Description

DELETE

/ipam/tenants/{tenant_id}/policies/{policy_id}/unusable_ip_octets/:(id)

Delete a tenant's policy's unusable ip octet

Params:

None

Response Codes:

Normal Response code: 200

Error - 404 Not Found [When Policy or IP octet doesn't exist]

To Be Done:

* Add 'self' and 'bookmark' links in resource details.

* Versions atom feed

* API to list all IPs by an instance_id

Wiki: MelangeAPIBase (last edited 2011-11-28 12:58:46 by rajaram)