==== Supported APIs for B-Release ==== **1. Add Provider** Register a new resource provider (e.g. OpenStack) into reservation system. Request parameters ^ Name ^ Type ^ Description ^ | provider-type | Enumeration | Name of the resource provider | | endpoint | URI | Target URL endpoint for the resource provider | | username | String | User name | | password | String | Password | | region | String | Specified region for the provider | | tenant.id | String | Id of the tenant | | tenant.name | String | Name of the tenant | Response parameters ^ Name ^ Type ^ Description ^ | provider-id | String | Id of the new resource provider | | result | Enumeration | Result info | **Example request** { "provider-type": "openstack", "endpoint": "http://10.0.2.15:5000/v2.0/tokens", "username": "promise_user", "password": "******", "tenant": { "name": "promise" } } **Example response** { "provider-id": "f25ed9cb-de57-43d5-9b4a-a389a1397302", "result": "ok" } **2. Create Reservation** Make a request to the reservation system to reserve resources. Request parameters ^ Name ^ Type ^ Description ^ | zone | String | Id to an availability zone | | start | DateTime | Timestamp when the consumption of reserved resources can begin | | end | DateTime | Timestamp when the consumption of reserved resources should end | | capacity.cores | int16 | Amount of cores to be reserved | | capacity.ram | int32 | Amount of RAM to be reserved | | capacity.instances | int16 | Amount of instances to be reserved | | capacity.addresses | int32 | Amount of public IP addresses to be reserved | | elements | ResourceElement | List of pre-existing resource elements to be reserved | Response parameters ^ Name ^ Type ^ Description ^ | reservation-id | String | Id of the reservation | | result | Enumeration | Result info | | message | String | Output message | **Example request** { "capacity": { "cores": "5", "ram": "25600", "addresses": "3", "instances": "3" }, "start": "2016-02-02T00:00:00Z", "end": "2016-02-03T00:00:00Z" } **Example response** { "reservation-id": "269b2944-9efc-41e0-b067-6898221e8619", "result": "ok", "message": "reservation request accepted" } **3. Update Reservation** Update reservation details for an existing reservation. Request parameters ^ Name ^ Type ^ Description ^ | reservation-id | String | Id of the reservation to be updated | | zone | String | Id to an availability zone | | start | DateTime | Updated timestamp when the consumption of reserved resources can begin | | end | DateTime | Updated timestamp when the consumption of reserved resources should end | | capacity.cores | int16 | Updated amount of cores to be reserved | | capacity.ram | int32 | Updated amount of RAM to be reserved | | capacity.instances | int16 | Updated amount of instances to be reserved | | capacity.addresses | int32 | Updated amount of public IP addresses to be reserved | | elements | ResourceElement | Updated list of pre-existing resource elements to be reserved | Response parameters ^ Name ^ Type ^ Description ^ | result | Enumeration | Result info | | message | String | Output message | **Example request** { "reservation-id": "269b2944-9efv-41e0-b067-6898221e8619", "capacity": { "cores": "1", "ram": "5120", "addresses": "1", "instances": "1" } } **Example response** { "result": "ok", "message": "reservation update successful" } **4. Cancel Reservation** Cancel the reservation. Request parameters ^ Name ^ Type ^ Description ^ | reservation-id | String | Id of the reservation to be canceled | Response parameters ^ Name ^ Type ^ Description ^ | result | Enumeration | Result info | | message | String | Output message | **Example request** { "reservation-id": "269b2944-9efv-41e0-b067-6898221e8619" } **Example response** { "result": "ok", "message": "reservation canceled" } **5. Query Reservation** Query the reservation system to return matching reservation(s). Request parameters ^ Name ^ Type ^ Description ^ | zone | String | Id to an availability zone | | show-utilization | Boolean | Show capacity utilization | | without | ResourceCollection | Excludes specified collection identifiers from the result | | elements.some | ResourceElement | Query for ResourceCollection(s) that contain some or more of these element(s) | | elements.every | ResourceElement | Query for ResourceCollection(s) that contain all of these element(s) | | window.start | DateTime | Matches entries that are within the specified start/end window | | window.end | DateTime | | | window.scope | Enumeration | Matches entries that start {and/or} end within the time window | Response parameters ^ Name ^ Type ^ Description ^ | reservations | ResourceReservation | List of matching reservations | | utilization | CapacityUtilization | Capacity utilization over time | **Example request** { "show-utilization": false, "window": { "start": "2016-02-01T00:00:00Z", "end": "2016-02-04T00:00:00Z" } } **Example response** { "reservations": [ "269b2944-9efv-41e0-b067-6898221e8619" ], "utilization": [] } **6. Create Instance** Create an instance of specified resource(s) utilizing capacity from the pool. Request parameters ^ Name ^ Type ^ Description ^ | provider-id | String | Id of the resource provider | | reservation-id | String | Id of the resource reservation | | name | String | Name of the instance | | image | String | Id of the image | | networks | Uuid | List of network uuids | Response parameters ^ Name ^ Type ^ Description ^ | instance-id | String | Id of the instance | | result | Enumeration | Result info | | message | String | Output message | **Example request** { "provider-id": "f25ed9cb-de57-43d5-9b4a-a389a1397302", "name": "vm1", "image": "ddffc6f5-5c86-4126-b0fb-2c71678633f8", "flavor": "91bfdf57-863b-4b73-9d93-fc311894b902" } **Example response** { "instance-id": "82572779-896b-493f-92f6-a63008868250", "result": "ok", "message": "created-instance request accepted" } **7. Destroy Instance** Destroy an instance of resource utilization and release it back to the pool. Request parameters ^ Name ^ Type ^ Description ^ | instance-id | String | Id of the instance to be destroyed | Response parameters ^ Name ^ Type ^ Description ^ | result | Enumeration | Result info | | message | String | Output message | **Example request** { "instance-id": "82572779-896b-493f-92f6-a63008868250" } **Example response** { "result": "ok", "message": "instance destroyed and resource released back to pool" } **8. Decrease Capacity** Decrease total capacity for the reservation system for a given time window. Request parameters ^ Name ^ Type ^ Description ^ | source | String | Id of the resource container | | start | DateTime | start/end defines the time window when total capacity is decreased | | end | DateTime | | | capacity.cores | int16 | Decreased amount of cores | | capacity.ram | int32 | Decreased amount of RAM | | capacity.instances | int16 | Decreased amount of instances | | capacity.addresses | int32 | Decreased amount of public IP addresses | Response parameters ^ Name ^ Type ^ Description ^ | pool-id | String | Id of the resource pool | | result | Enumeration | Result info | | message | String | Output message | **Example request** { "source": "ResourcePool:4085f0da-8030-4252-a0ff-c6f93870eb5f", "capacity": { "cores": "3", "ram": "5120", "addresses": "1" } } **Example response** { "pool-id": "c63b2a41-bcc6-42f6-8254-89d633e1bd0b", "result": "ok", "message": "capacity decrease successful" } **9. Increase Capacity** Increase total capacity for the reservation system for a given time window. Request parameters ^ Name ^ Type ^ Description ^ | source | String | Id of the resource container | | start | DateTime | start/end defines the time window when total capacity is increased | | end | DateTime | | | capacity.cores | int16 | Increased amount of cores | | capacity.ram | int32 | Increased amount of RAM | | capacity.instances | int16 | Increased amount of instances | | capacity.addresses | int32 | Increased amount of public IP addresses | Response parameters ^ Name ^ Type ^ Description ^ | pool-id | String | Id of the resource pool | | result | Enumeration | Result info | | message | String | Output message | **Example request** { "source": "ResourceProvider:f6f13fe3-0126-4c6d-a84f-15f1ab685c4f", "capacity": { "cores": "20", "ram": "51200", "instances": "10", "addresses": "10" } } **Example response** { "pool-id": "279217a4-7461-4176-bf9d-66770574ca6a", "result": "ok", "message": "capacity increase successful" } **10. Query Capacity** Query for capacity information about a specified resource collection. Request parameters ^ Name ^ Type ^ Description ^ | capacity | Enumeration | Return total or reserved or available or usage capacity information | | zone | String | Id to an availability zone | | show-utilization | Boolean | Show capacity utilization | | without | ResourceCollection | Excludes specified collection identifiers from the result | | elements.some | ResourceElement | Query for ResourceCollection(s) that contain some or more of these element(s) | | elements.every | ResourceElement | Query for ResourceCollection(s) that contain all of these element(s) | | window.start | DateTime | Matches entries that are within the specified start/end window | | window.end | DateTime | | | window.scope | Enumeration | Matches entries that start {and/or} end within the time window" | Response parameters ^ Name ^ Type ^ Description ^ | collections | ResourceCollection | List of matching collections | | utilization | CapacityUtilization | Capacity utilization over time | **Example request** { "show-utilization": false } **Example response** { "collections": [ "ResourcePool:279217a4-7461-4176-bf9d-66770574ca6a" ], "utilization": [] }