Heat/GrizzlySummit/HeatApiDraftDiscussion

Session Lead: Steven Dake

Session Title: Heat Orchestration API draft design session

Session Description:

Overview of the template format currently implemented in heat. Overview of the API heat provides for operating on templates.

In this design session, expect 75% of time spent in open community design session on improvements to API and template model.

Heat OpenStack API Reference
See https://github.com/openstack/heat/blob/master/docs/api.md for the latest version.

List Stacks
GET /v1/{tenant_id}/stacks

Parameters:


 * `tenant_id` The unique identifier of the tenant or account

Create Stack
POST /v1/{tenant_id}/stacks

{   "stack_name": "{stack_name}", "template_url": "{template_url}", "parameters": { "{key1}": "{value1}", "{key2}": "{value2}" },   "timeout_mins": {timeout_mins} }

Parameters:


 * `tenant_id` The unique identifier of the tenant or account
 * `stack_name` The name of the stack to create
 * `template_url` The URL of the template to instantiate
 * `template` A JSON template to instantiate - this takes precendence over the `template_url` if both are supplied
 * `keyn`, `valuen` User-defined parameters to pass to the Template
 * `timeout_mins` The timeout for stack creation in minutes

Result:

HTTP/1.1 201 Created Location: http://heat.example.com:8004/v1/{tenant_id}/stacks/{stack_name}/{stack_id}

Find Stack ID
GET /v1/{tenant_id}/stacks/{stack_name}

Parameters:


 * `stack_name` The name of the stack to look up

Result:

HTTP/1.1 302 Found Location: http://heat.example.com:8004/v1/{tenant_id}/stacks/{stack_name}/{stack_id}

This operation also works with verbs other than `GET`, so you can also use it to perform `PUT` and `DELETE` operations on a current stack. Just set your client to follow redirects. Note that when redirecting, the request method should not change, as defined in RFC2626. However, in many clients the default behaviour is to change the method to `GET` when receiving a 302 because this behaviour is ubiquitous in web browsers.

Get Stack Data
GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}

Parameters:


 * `stack_name` The name of the stack to look up
 * `stack_id` The unique identifier of the stack to look up

Retrieve Stack Template
GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/template

Parameters:


 * `stack_name` The name of the stack to look up
 * `stack_id` The unique identifier of the stack to look up

Update Stack
PUT /v1/{tenant_id}/stacks/{stack_name}/{stack_id}

{   "template_url": "{template_url}", "parameters": { "{key1}": "{value1}", "{key2}": "{value2}" },   "timeout_mins": {timeout_mins} }

Parameters:


 * `tenant_id` The unique identifier of the tenant or account
 * `stack_name` The name of the stack to create
 * `stack_id` The unique identifier of the stack to look up
 * `template_url` The URL of the updated template
 * `template` An updated JSON template - this takes precendence over the `template_url` if both are supplied
 * `keyn`, `valuen` User-defined parameters to pass to the Template
 * `timeout_mins` The timeout for stack creation in minutes

Result:

HTTP/1.1 202 Accepted

Delete Stack
DELETE /v1/{tenant_id}/stacks/{stack_name}/{stack_id}

Parameters:


 * `tenant_id` The unique identifier of the tenant or account
 * `stack_name` The name of the stack to create
 * `stack_id` The unique identifier of the stack to look up

Result:

HTTP/1.1 204 No Content

Validate Template
POST /v1/{tenant_id}/validate

{   "template_url": "{template_url}", "parameters": { "{key1}": "{value1}", "{key2}": "{value2}" } }

Parameters:


 * `tenant_id` The unique identifier of the tenant or account
 * `template_url` The URL of the template to validate
 * `template` A JSON template to validate - this takes precendence over the `template_url` if both are supplied.
 * `keyn`, `valuen` User-defined parameters to pass to the Template