Sahara/ApiProposal
Contents
Proposal Only
Please recognize that this is only a proposed DSL to be considered for development. This specification is NOT YET IMPLEMENTED.
List of API Calls
Verb | URI | Description | Representations |
---|---|---|---|
POST | /clusters | Create a cluster | JSON, XML |
DELETE | /clusters/{clusterId} | Delete a cluster | JSON, XML |
GET | /clusters | List all the clusters for the user | JSON, XML |
GET | /clusters/{clusterId} | Get details about a cluster | JSON, XML |
POST | /clusters/{clusterId}/action | Perform actions on a cluster (e.g. resize) | JSON, XML |
GET | /clusters/{clusterId}/nodes | List all nodes in a cluster | JSON, XML |
GET | /clusters/{clusterId}/nodes/{nodeId} | Get details about a node in a cluster | JSON, XML |
GET | /profile | Get information about the current user profile | JSON, XML |
POST | /profile | Update an existing profile | JSON, XML |
GET | /limits | List all the resource limits for the user | JSON, XML |
GET | /flavors | List all available flavors | JSON, XML |
GET | /flavors/{flavorId} | Get details about a flavor | JSON, XML |
GET | /flavors/{flavorid}/types | List the supported cluster types for a flavor | JSON, XML |
GET | /types | List all available cluster types | JSON, XML |
GET | /types/{typeId} | Get details about a cluster type | JSON, XML |
GET | /types/{typeid}/flavors | List the supported flavors for a cluster type | JSON, XML |
Common Error Responses
Response Code | Element | Message |
---|---|---|
401 | unauthorized | Not authorized. |
403 | forbidden | Access is denied to this resource. |
404 | itemNotFound | The resource could not be found. |
500 | fault (Not implemented yet) | An unknown exception occurred. |
API Call Details
Clusters
Verb | URI | Description | Representations |
---|---|---|---|
POST | /clusters | Create a cluster | JSON, XML |
Request
{ {"cluster":
{ "name": "slice", "clusterType": "hadoop", "flavorId": "2", "nodeCount": 5 }
} }
Response
{ {"cluster":
{ "id": "db478fc1-2d86-4597-8010-cbe787bbbc41", "created": "2012-12-27T10:10:10Z", "updated": "", "name": "slice", "clusterType": "hadoop", "flavorId": "2", "nodeCount": 5, "status": "BUILD", "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41" } ], }
} }
Response Code | Message |
---|---|
200 | Success |
400 | Invalid Response Body |
400 | User profile needs to be created |
400 | Invalid Node Count |
400 | Not valid flavor |
400 | Malformed Data |
413 | Over Limits (Quota Exceeded) |
Verb
URI
Description
Representations
DELETE
/clusters/{clusterid}
Delete a cluster
JSON, XML
Request
N/A
Response
{ {"cluster":
{ "id": "db478fc1-2d86-4597-8010-cbe787bbbc41", "created": "2012-12-27T10:10:10Z", "updated": "", "name": "slice", "clusterType": "hadoop", "flavorId": "2", "nodeCount": 5, "status": "DELETING", "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41" } ] }
} }
Response Code Message 202 Accepted 400 Cannot delete 404 Resource not found 409 Invalid state
Verb URI Description Representations GET /clusters List all the clusters for the user JSON, XML
Request
N/A
Response
{ {"clusters":
[ { "id": "db478fc1-2d86-4597-8010-cbe787bbbc41", "name": "slice", "created": "2012-12-27T10:10:10Z", "updated": "2012-12-27T10:15:10Z", "clusterType": "hadoop", "flavorId": "2", "nodeCount": 5, "status": "ACTIVE", "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41" } ], }, { "id": "ac111111-2d86-4597-8010-cbe787bbbc41", "name": "real", "created": "2012-12-27T10:10:10Z", "updated": "2012-12-27T10:15:10Z", "clusterType": "hbase", "flavorId": "4", "nodeCount": 20, "status": "ACTIVE", "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/clusters/ac111111-2d86-4597-8010-cbe787bbbc41" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/clusters/ac111111-2d86-4597-8010-cbe787bbbc41" } ], }, ]
} }
Response Code Message 200 Success Verb URI Description Representations GET /clusters/{clusterId} Get details about a cluster JSON, XML
Request
N/A
Response
{ {"cluster":
{ "id": "db478fc1-2d86-4597-8010-cbe787bbbc41", "created": "2012-12-27T10:10:10Z", "updated": "2012-12-27T10:20:10Z", "name": "slice", "clusterType": "hadoop", "flavorId": "2", "nodeCount": 5, "status": "ACTIVE", "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41" } ], }
} }
Response Code Message 200 Success 404 Resource not found Verb URI Description Representations POST /clusters/{clusterId}/action Perform actions on a cluster (e.g. resize) JSON, XML
Request
{ {"resize":
{ "nodeCount": 10 }
} }
Response
{ {"cluster":
{ "id": "db478fc1-2d86-4597-8010-cbe787bbbc41", "created": "2012-12-27T10:10:10Z", "updated": "2012-12-27T16:20:10Z", "name": "slice", "clusterType": "hadoop", "flavorId": "2", "nodeCount": 10, "status": "RESIZING", "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41" } ], }
} }
Response Code Message 200 Success 400 Unacceptable parameters 400 Malformed data 404 The resource cannot be found 409 Invalid state
Nodes
Verb URI Description Representations GET /clusters/{clusterId}/nodes List all nodes in a cluster JSON, XML
Request
N/A
Response
{ {"nodes":
[ { "id": "000", "created": "2012-12-27T10:10:10Z", "role": "NAMENODE", "name": "NAMENODE-1", "status": "ACTIVE", "addresses": { "public": [{ "addr": "168.x.x.3", "version": 4 }], "private": [{ "addr": "10.x.x.3", "version": 4}] }, "services": { "namenode": {}, "jobtracker": {}, "ssh": {"uri": "ssh://user@168.x.x.3"} }, "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41/nodes/000" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41/nodes/000" } ], }, { "id": "aaa", "role": "GATEWAY", "name": "GATEWAY-1", "status": "ACTIVE", "addresses": { "public": [{ "addr": "168.x.x.4", "version": 4 }], "private": [{ "addr": "10.x.x.4", "version": 4}] }, "services": { "pig": {}, "hive": {}, "ssh": {"uri": "ssh://user@168.x.x.4"}, "status": {"uri": "http://10.x.x.4"}, "hdfs-scp": {"uri": "scp://user@168.x.x.4:9022"} }, "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41/nodes/aaa" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41/nodes/aaa" } ], }, { "id": "bbb", "role": "DATANODE", "name": "DATANODE-1", "status": "ACTIVE", "addresses": { "public": [{ "addr": "168.x.x.5", "version": 4 }], "private": [{ "addr": "10.x.x.5", "version": 4}] }, "services": { "datanode": {}, "tasktracker": {}, "ssh": {"uri": "ssh://user@168.x.x.5"} }, "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41/nodes/bbb" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41/nodes/bbb" } ], }, { "id": "ccc", "role": "DATANODE", "name": "DATANODE-2", "status": "ACTIVE", "addresses": { "public": [{ "addr": "168.x.x.6", "version": 4 }], "private": [{ "addr": "10.x.x.6", "version": 4}] }, "services": { "datanode": {}, "tasktracker": {}, "ssh": {"uri": "ssh://user@168.x.x.6"} }, "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41/nodes/ccc" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41/nodes/ccc" } ], } ]
} }
Response Code Message 200 Success 404 The resource cannot be found
Verb URI Description Representations GET /clusters/{clusterId}/nodes/{nodeId} Get details about a node in a cluster JSON, XML
Request
N/A
Response
{ {"node":
{ "id": "000", "created": "2012-12-27T10:10:10Z", "role": "NAMENODE", "name": "NAMENODE-1", "status": "ACTIVE", "addresses": { "public": [{ "addr": "168.x.x.3", "version": 4 }], "private": [{ "addr": "10.x.x.3", "version": 4}] }, "services": { "namenode": {}, "jobtracker": {}, "ssh": {"uri": "ssh://user@168.x.x.3"} }, "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41/nodes/000" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/clusters/db478fc1-2d86-4597-8010-cbe787bbbc41/nodes/000" } ], }
} }
Response Code Message 200 Success 404 The resource cannot be found
Profile
Verb URI Description Representations GET /profile Get information about the current user profile JSON, XML
Request
N/A
Response
{ {"profile":
{ "username": "john.doe", "user_id" : "12346", "tenant_id" : "123456", "sshkeys": [{"name": "t@test"}], "cloudCredentials": {}, "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/123456/profile" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/123456/profile" } ], }
} }
Response Code Message 200 Success Verb URI Description Representations POST /profile Update an existing profile JSON, XML
Request
{ { "profile": {
"username": "john.doe", "password": "j0Hnd03", "sshkeys": [ { "name": "t@test", "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtUFnkFrqDDCgEqW1akQkpMOX Owwvg73PLn5Z5QgvxjvJhRCg9ZTR/OWXpWcYqFVNagH4Zs8NOb9921TyQ+ydMnatOM haxMh1ZwTgaUcvndOF8fY+kcERiw1l0iT95w42F8IdUH42Z+8KihZM8gVsbMS6qYTi OM29WHX7y37wuJIzqf3N2TiVXrqfjwugvY/bZ+47EUn78uk6aPZYJGXdDgaFqnIXUV N+hRFYXgKnU0Ui0aQkuYwnAW8KmanLoNU2xodrb6/XqWnSAAmwl7aoGKFunQsT6xDW yQk+ncUHUcdofDUqgd3lXmHGrTmQW97vqexDEnhsJ+AwbLGD5dukr t@test" } ], "cloudCredentials": { "username": "jdoe", "apikey": "df23gkh34h52gkdgfakgf" }
} }
Response
{ {"profile":
{ "username": "john.doe", "userId" : "12346", "tenantId" : "123456", "sshkeys": [{"name": "t@test", "publicKey" : "ssh-rsa ....."}], "cloudCredentials": {"username": "jdoe" }, "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/123456/profile" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/123456/profile" } ], }
} }
Response Code Message 200 Success 400 Malformed data 400 Unacceptable parameters
Flavors
Verb URI Description Representations GET /flavors List all available flavors JSON, XML
Request
N/A
Response
{ {"flavors":
[ { "id": "1", "name": "hadoop.small", "ram": "5120MB", "vcpus": 1, "disk": "375GB", "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/flavors/1" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/flavors/1" } ], } { "id": "2", "name": "hadoop.medium", "ram": "10240MB", "vcpus": 2, "disk": "750GB", "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/flavors/2" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/flavors/2" } ], }, { "id": "3", "name": "hadoop.large", "ram": "20480MB", "vcpus": 4, "disk": "1500GB", "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/flavors/3" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/flavors/3" } ], } ]
} }
Response Code Message 200 Success
Verb URI Description Representations GET /flavors/{flavorId} Get details about a flavor JSON, XML
Request
N/A
Response
{ {"flavor":
{ "id": "1", "name": "hadoop.small", "ram": "5120MB", "vcpus": 1, "disk": "375GB", "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/flavors/1" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/flavors/1" } ], }
} }
Response Code Message 200 Success 404 The resource cannot be found
Types
Verb URI Description Representations GET /types List all available cluster types JSON, XML
Request
N/A
Response
{ {"types":
[ { "id": "HADOOP_HDP1_1 "name": "Hadoop (HDP 1.1)", "version": 1.1, "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/types/HADOOP_HDP1_1" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/types/HADOOP_HDP1_1" } ], }, ]
} }
Response Code Message 200 Success
Verb URI Description Representations GET /types/{typeId} Get details about a cluster type JSON, XML
Request
N/A
Response
{ {"type":
{ "name": "HADOOP_HDP1_1", "version": 1.1, "services": [ {"name": "mapreduce", "version": 1.0.3 }, {"name": "hdfs", "version": 1.0.3 }, {"name": "pig", "version": 0.9.2 }, {"name": "hive", "version": 0.9.0 } ], "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/types/HADOOP_HDP1_1" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/types/HADOOP_HDP1_1" } ], },
} }
Response Code Message 200 Success 404 The resource cannot be found
Verb URI Description Representations GET /types/{typeId}/flavors List all the supported flavors for a cluster type JSON, XML
Request
N/A
Response
{ {"flavors": [
{ "id": "1", "name": "hadoop.small", "ram": "5120MB", "vcpus": 1, "disk": "375GB", "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/flavors/1" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/flavors/1" } ], }, { "id": "2", "name": "hadoop.medium", "ram": "10240MB", "vcpus": 2, "disk": "750GB", "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/flavors/2" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/flavors/2" } ], }, { "id": "3", "name": "hadoop.large", "ram": "20480MB", "vcpus": 4, "disk": "1500GB", "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/flavors/3" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/flavors/3" } ], } ]
} }
Response Code Message 200 Success 404 The resource cannot be found
Verb URI Description Representations GET /flavors/{flavorId}/types List all the supported cluster types for a flavor JSON, XML
Request
N/A
Response
{ {"type":
{ "name": "HADOOP_HDP1_1", "version": 1.1, "services": [ {"name": "mapreduce", "version": 1.0.3 }, {"name": "hdfs", "version": 1.0.3 }, {"name": "pig", "version": 0.9.2 }, {"name": "hive", "version": 0.9.0 } ], "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/types/HADOOP_HDP1_1" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/types/HADOOP_HDP1_1" } ], },
} }
Response Code Message 200 Success 404 The resource cannot be found
Limits
Verb URI Description Representations GET /limits List all the resource limits for the user JSON, XML
Request
N/A
Response
{ {"limits":
{"absolute": {"nodeCount": {"value": 100, "remaining" : 50}, "ram": {"value": 50000, "remaining": 34567}, "disk": {"value": 100000, "remaining": 28882}, "vcpus": {"value": 50, "remaining": 25} }, "links": [ { "rel": "self", "href": "https://bigdata.api.rackspacecloud.com/v1.0/1234/limits" }, { "rel": "bookmark", "href": "https://bigdata.api.rackspacecloud.com/1234/limits" } ], }
} } Response Code Message 200 Success