#%RAML 0.8 title: Compass version: v1 baseUri: http://10.145.89.151/api mediaType: application/json /permissions: get: body: application/json: responses: 200: body: application/json: example: | [ { "alias": "list permissions", "description": "list all permissions", "id": 1, "name": "list_permissions" }, ] description: List all permissions headers: X-Auth-Header: required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{permission_id}: get: responses: 200: body: application/json: example: | [ { "alias": "list permissions", "description": "list all permissions", "id": 1, "name": "list_permissions" } ] 404: body: application/json: example: | { message: "Cannot find the record in table Permission: {'id': ''}" } description: List a specific permission info headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /users: get: responses: 200: body: application/json: example: | [ { "id": 1, "email": "someuser@email.com", "first_name": "", "last_name": "", "is_admin": false, "active": true, "created_at": "--timestamp---", "last_login_at": "--timestamp---" }, ] description: Lists information for all users headers: X-Auth-Header: required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 queryParameters: email: is_admin: active: post: body: application/json: schema: | { "email": "admin@someemail.com", "password": "admin", "firstname": "First", "lastname": "Last" } responses: 201: body: application/json: example: | { "id": 3, "email": "user3@someemail.com", "first_name": "", "last_name": "", "is_admin": false, "active": true, "created_at": "--timestamp---", "last_login_at": "--timestamp---" } 400: body: application/json: example: | { "bad request" } 403: body: application/json: example: | { "forbidden" } 409: body: application/json: example: | { "message": "The user already exists!" } description: Creates a user(admin only) headers: X-Auth-Header: required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{user_id}: get: responses: 200: body: application/json: example: | { "id": 1, "email": "someuser@email.com", "first_name": "", "last_name": "", "is_admin": false, "active": true, "created_at": "2014-03-25 12:00:00", "last_login_at": "2014-03-25 12:05:00" } 404: body: application/json: example: | { "message": "The user with id 'some--id--' cannot be found!" } description: Lists information for a specific user headers: X-Auth-Header: required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | {"password": 123} responses: 201: body: application/json: example: | { "id": 3, "email": "user3@someemail.com", "first_name": "", "last_name": "", "is_admin": false, "active": true } 409: body: application/json: example: | { "message": "The user with id 'some--id--' cannot be found!" } description: Updates user’s information headers: X-Auth-Header: required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: responses: 200: body: application/json: example: | { "id": 3, "email": "user3@someemail.com", "first_name": "", "last_name": "", "is_admin": false, "active": true } 409: body: application/json: example: | { "message": "The user cannot be found!" } description: Deletes a user(admin only) headers: X-Auth-Header: required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /permissions: get: responses: 200: body: application/json: example: | [ { "created_at": "2014-10-17 16:28:21", "user_id": 1, "description": "list all permissions", "permission_id": 1, "updated_at": "2014-10-17 16:28:21", "alias": "list permissions", "id": 1, "name": "list_permissions" } ] 409: body: application/json: example: | { "type": "itemNotFound", "message": "The user with id 'some--id--' cannot be found!" } description: Lists permissions for a specified user headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /action: post: body: application/json: schema: | { "add_permissions": [1,2,3], "remove_permissions": [1], "set_permissions": [1], "disable_user": [1], "enable_user": [1] } responses: 200: body: application/json: example: | Add permission: [ { "created_at": "2014-10-17 16:28:21", "user_id": 1, "description": "list all permissions", "permission_id": 1, "updated_at": "2014-10-17 16:28:21", "alias": "list permissions", "id": 1, "name": "list_permissions" } ] Remove permission: [ { "created_at": "2014-10-17 16:28:21", "user_id": 1, "description": "list all permissions", "permission_id": 1, "updated_at": "2014-10-17 16:28:21", "alias": "list permissions", "id": 1, "name": "list_permissions" } ] Set Permission: [ { "created_at": "2014-10-17 16:28:21", "user_id": 1, "description": "list all permissions", "permission_id": 1, "updated_at": "2014-10-17 16:28:21", "alias": "list permissions", "id": 1, "name": "list_permissions" } ] Enable user: { "created_at": "2014-10-17 16:28:21", "updated_at": "2014-10-17 16:28:21", "email": "admin@huawei.com", "is_admin": true, "active": true, "id": 1 } Disable user: { "created_at": "2014-10-17 16:28:21", "updated_at": "2014-10-17 16:28:21", "email": "admin@huawei.com", "is_admin": true, "active": true, "id": 1 } 409: body: application/json: example: | { "type": "itemNotFound", "message": "The user cannot be found!" } description: Adds/Removes permissions, Enable/Disable a user (admin only) headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /token: post: body: application/json: schema: | { "email": "admin@huawei.com", "password": "admin" } responses: 200: body: application/json: example: | { "expire_timestamp": "2014-10-06 13:25:23", "token": "$1$c1ZWGYEn$WTg57cnP4pEwd9JMJ7beS/", "user_id": 1, "id": 3 } 409: body: application/json: example: | { "type": "unauthorized", "message": "Either email or password is wrong!" } description: Authenticates and generates a token /login: post: body: application/json: schema: | { "email": "admin@huawei.com", "password": "admin" } responses: 200: body: application/json: example: | { "expire_timestamp": "2014-10-06 13:25:23", "token": "$1$c1ZWGYEn$WTg57cnP4pEwd9JMJ7beS/", "user_id": 1, "id": 3 } 401: body: application/json: example: | { "type": "unauthorized", "message": "Either email or password is wrong!" } 403: body: application/json: example: | { "type": "userDisabled", "message”: "User is disabled !" } description: Login /logout: post: responses: 200: body: application/json: example: | [ { "expire_timestamp": "2014-10-17 18:30:29", "token": "$1$AFqIS5Kn$1ASgOkPv.G1a7pkRRHKY.0", "user_id": 1, "id": 1 } ] 401: body: application/json: example: | { "message": "invalid user token: $1$AFqIS5Kn$1ASgOkPv.G1a7pkRRHKY.0", } description: Logout headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /switches: get: responses: 200: body: application/json: example: | [ { "ip": "172.29.8.40", "created_at": "2014-10-17 17:28:06", "updated_at": "2014-10-17 17:28:06", "state": "initialized", "filters": "", "credentials": { "version": "2c", "community": "public" }, "id": 2 } ] description: Lists switches headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 post: body: application/json: schema: | { "ip": "172.29.8.40", "credentials": { "version": "2c", "community": "public" } } responses: 200: body: application/json: example: | { "ip": "172.29.8.40", "created_at": "2014-10-17 17:28:06", "updated_at": "2014-10-17 17:28:06", "state": "initialized", "filters": "", "credentials": { "version": "2c", "community": "public" }, "id": 2 } 409: body: application/json: example: | { "message": "IP address '192.168.1.1' already exists" } description: Creates a switch headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{switch_id}: get: responses: 200: body: application/json: example: | { "ip": "172.29.8.40", "created_at": "2014-10-17 17:28:06", "updated_at": "2014-10-17 17:28:06", "state": "initialized", "filters": "", "credentials": { "version": "2c", "community": "public" }, "id": 2 } 404: body: application/json: example: | { "message": "Cannot find the switch which id is '1'." } description: Lists a switch headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "ip": "172.29.8.40", "credentials": { "version": "2c", "community": "private" } } responses: 200: body: application/json: example: | { "ip": "172.29.8.40", "created_at": "2014-10-17 17:28:06", "updated_at": "2014-10-17 17:28:06", "state": "initialized", "filters": "", "credentials": { "version": "2c", "community": "private" }, "id": 2 } 404: body: application/json: example: | { "message": "Cannot update the switch which id is '1'! The switch does not exists." } description: Set the switch properties headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 patch: body: application/json: schema: | { "ip": "172.29.8.40", "credentials": { "version": "3", "community": "public" } } responses: 200: body: application/json: example: | { "ip": "172.29.8.40", "created_at": "2014-10-17 17:28:06", "updated_at": "2014-10-17 17:28:06", "state": "initialized", "filters": "", "credentials": { "version": "3", "community": "public" }, "id": 2 } 404: body: application/json: example: | { "message": "Cannot update the switch which id is '1'! The switch does not exists." } description: Updates the switch properties headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: responses: 200: body: application/json: example: | { "ip": "172.29.8.41", "created_at": "2014-10-17 17:45:17", "updated_at": "2014-10-17 17:45:17", "state": "initialized", "filters": "", "credentials": { "version": "2c", "community": "public" }, "id": 3 } 404: body: application/json: example: | { "message": "Cannot find the record in table Switch: {'id': 4}" } description: Delete switch headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /machines: get: responses: 200: body: application/json: example: | Get: [ { "vlans": [], "updated_at": "2014-10-17 18:02:21", "created_at": "2014-10-17 18:02:21", "switch_id": 3, "id": 1, "mac": "28:6e:d4:46:c4:25", "tag": {}, "location": {}, "switch_ip": "172.29.8.41", "ipmi_credentials": {}, "machine_id": 1, "port": "10", "switch_machine_id": 204 } ] queryParameters: port: portStart: portEnd: portRange: PortPrefix: PortSuffix: vlans: mac: tag: location: description: Lists machines for a specified switch headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 post: body: application/json: schema: | { "mac": "28:6e:d4:46:c4:25", "port": "1", "vlans": "88", "ipmi_credentials": { "ip": "1.2.3.4", "username": "test", "password": "test" }, "tag": "tag", "location": { "column": "1", "row": "1", "unit": "1" } } responses: 200: body: application/json: example: | { "id": 1, "mac": "28:6e:d4:47:c8:6c", "vlan": 1, "port": "10" } 404: body: application/json: example: | { "message": "The switch does not exists." } description: Manually add a machine headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /machines: post: body: application/json: schema: | { "mac": "28:6e:d4:46:c4:25", "port": "1", "vlans": "88" } responses: 200: body: application/json: example: | { "duplicate_switches_machines": [ { "mac": "a1:b2:c3:d4:e1:f6", "port": "101" } ], "switches_machines": [ { "vlans": [], "updated_at": "2015-05-07 10:55:12", "created_at": "2015-05-07 10:55:12", "switch_id": 2, "id": 1, "mac": "70:7b:e8:e2:72:21", "tag": {}, "location": {}, "switch_ip": "10.145.8.10", "ipmi_credentials": {}, "machine_id": 1, "port": "204", "switch_machine_id": 1 }, { "vlans": [], "updated_at": "2015-05-07 10:55:12", "created_at": "2015-05-07 10:55:12", "switch_id": 2, "id": 2, "mac": "a1:b2:c3:d4:e1:f6", "tag": {}, "location": {}, "switch_ip": "10.145.8.10", "ipmi_credentials": {}, "machine_id": 2, "port": "101", "switch_machine_id": 2 }, { "vlans": [], "updated_at": "2015-05-07 10:55:12", "created_at": "2015-05-07 10:55:12", "switch_id": 3, "id": 3, "mac": "a1:b2:c3:d4:e5:f9", "tag": {}, "location": {}, "switch_ip": "172.29.8.40", "ipmi_credentials": {}, "machine_id": 3, "port": "121", "switch_machine_id": 3 } ], "fail_switches_machines": [ { "mac": "a1:b5:c3:d4:e5:f9", "port": "131" }, { "mac": "a1:b2:c3:d4:e1:f6", "port": "13" } ] } description: Batch switch machines. If the machine is connected to other switch or switch does not exist, it will be added to fail_switches_machines and return. If machine is already existed, it will be added to duplicate_switches_machines. headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{id}/machines/{machine_id}: get: responses: 200: body: application/json: example: | { "vlans": [ 88 ], "updated_at": "2014-10-17 17:40:13", "created_at": "2014-10-17 17:40:13", "switch_id": 2, "id": 1, "mac": "28:6e:d4:46:c4:25", "tag": {}, "location": {}, "switch_ip": "172.29.8.40", "ipmi_credentials": {}, "machine_id": 1, "port": "7", "switch_machine_id": 1 } 404: body: application/json: example: | { "message": "Cannot find the record in table SwitchMachine: {'machine_id': 1000, 'switch_id': 2}" } description: Get machine of a specified switch headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "port": "80", "vlans": "88", "pmi_credentials": "pmi_credentials here", "tag": "tag here", "location": {"building": "E5"} } responses: 200: body: application/json: example: | { "vlans": [ 88 ], "updated_at": "2014-10-17 17:40:13", "created_at": "2014-10-17 17:40:13", "switch_id": 2, "id": 1, "mac": "28:6e:d4:46:c4:25", "tag": {}, "location": { "building": "E5" }, "switch_ip": "172.29.8.40", "ipmi_credentials": {}, "machine_id": 1, "port": "7", "switch_machine_id": 1 } 404: body: application/json: example: | { "message": "Cannot find the record in table SwitchMachine: {'machine_id': 1000, 'switch_id': 2}" } description: set machine property of a specified switch headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 patch: body: application/json: schema: | { "port": "80", "vlans": "88", "pmi_credentials": "pmi_credentials here", "tag": "tag here", "location": {"city": "Beijing"} } responses: 200: body: application/json: example: | { "vlans": [ 88 ], "updated_at": "2014-10-17 17:40:13", "created_at": "2014-10-17 17:40:13", "switch_id": 2, "id": 1, "mac": "28:6e:d4:46:c4:25", "tag": {}, "location": { "building": "E5", "city": "beijing" }, "switch_ip": "172.29.8.40", "ipmi_credentials": {}, "machine_id": 1, "port": "7", "switch_machine_id": 1 } 404: body: application/json: example: | { "message": "Cannot find the record in table SwitchMachine: {'machine_id': 1000, 'switch_id': 2}" } description: update machine property of a specified switch headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: responses: 200: body: application/json: example: | { "vlans": [ 88 ], "updated_at": "2014-10-17 17:40:13", "created_at": "2014-10-17 17:40:13", "switch_id": 2, "id": 1, "mac": "28:6e:d4:46:c4:25", "tag": {}, "location": { "building": "E5", "city": "beijing" }, "switch_ip": "172.29.8.40", "ipmi_credentials": {}, "machine_id": 1, "port": "7", "switch_machine_id": 1 } 404: body: application/json: example: | { "message": "Cannot find the record in table SwitchMachine: {'machine_id': 1000, 'switch_id': 2}" } description: Delete a machine from a switch headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{switch_id}/action: post: body: application/json: schema: | { "find_machines": 1, "add_macheins": [{"machine_id":1,"port":"10"}], "rermove_machines": 1, "set_machines": [{"machine_id": 1, "port": "10"}] } responses: 202: body: application/json: example: | find_machines: { "status": "action {'find_machines': None} sent", "details": {} } 200: body: application/json: example: | add_machines: [ { "vlans": [], "updated_at": "2014-10-17 17:56:44", "created_at": "2014-10-17 17:56:44", "switch_id": 3, "id": 1, "mac": "28:6e:d4:46:c4:25", "tag": {}, "location": {}, "switch_ip": "172.29.8.41", "ipmi_credentials": {}, "machine_id": 1, "port": "10", "switch_machine_id": 203 } ] remove_machines: [] set_machines: [ { "vlans": [], "updated_at": "2014-10-17 17:56:44", "created_at": "2014-10-17 17:56:44", "switch_id": 3, "id": 1, "mac": "28:6e:d4:46:c4:25", "tag": {}, "location": {}, "switch_ip": "172.29.8.41", "ipmi_credentials": {}, "machine_id": 1, "port": "10", "switch_machine_id": 203 } ] 404: body: application/json: example: | { "message": "Cannot update the switch which id is '1'! The switch does not exists." } headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /switchbatch: post: body: application/json: schema: | [{ "switch_ip": "127.0.0.1": "credentials":{ "version": "2c", "community": "public" },{ "switch_ip": "127.0.0.2" }] responses: 200: body: application/json: example: | { "switches": [ { "vendor": "Huawei", "ip": "10.145.8.10", "created_at": "2015-05-04 16:13:34", "updated_at": "2015-05-04 16:13:34", "state": "initialized", "filters": "", "credentials": { "version": "2c", "community": "public" }, "id": 2 }, { "ip": "172.29.8.40", "created_at": "2015-05-04 16:13:34", "updated_at": "2015-05-04 16:13:34", "state": "initialized", "filters": "", "credentials": {}, "id": 3 } ], "fail_switches": [ { "ip": "172.29.8.40" } ] } description: Batch switches. If switch ip already existed, switch data will be added in fail_switches list and return. headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /machines: get: responses: 200: body: application/json: example: | [ { "created_at": "2014-10-17 17:40:13", "updated_at": "2014-10-17 23:22:53", "switches": [], "mac": "28:6e:d4:46:c4:25", "tag": {}, "location": { "building": "E5", "city": "beijing" }, "ipmi_credentials": {}, "id": 1 }, ] queryParameters: mac: tag: location: description: Lists machines headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{machine_id}: get: responses: 200: body: application/json: example: | { "created_at": "2014-10-17 17:40:13", "updated_at": "2014-10-17 23:22:53", "switches": [], "mac": "28:6e:d4:46:c4:25", "tag": {}, "location": { "building": "E5", "city": "beijing" }, "ipmi_credentials": {}, "id": 1 } 404: body: application/json: example: | { "message": "The machine witch ID '$machine_id' cannot be found!" } description: Lists machines of a specific machine headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "ipmi_credentials": { "builder": "huawei" } } responses: 200: body: application/json: example: | { "created_at": "2014-10-17 17:40:13", "updated_at": "2014-10-17 23:58:46", "switches": [], "mac": "28:6e:d4:46:c4:25", "tag": { "builder": "huawei" }, "location": { "building": "E5", "city": "beijing" }, "ipmi_credentials": {}, "id": 1 } 404: body: application/json: example: | { "message": "The machine witch ID “$machine_id” cannot be found!" } description: set machine properties headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 patch: body: application/json: schema: | { "ipmi_credentials": { "builder": "huawei" }, "tag": { "type": "ES200" } } responses: 200: body: application/json: example: | { "created_at": "2014-10-17 17:40:13", "updated_at": "2014-10-18 00:03:12", "switches": [], "mac": "28:6e:d4:46:c4:25", "tag": { "type": "ES200" }, "location": { "building": "E5", "city": "beijing" }, "ipmi_credentials": {}, "id": 1 } 404: body: application/json: example: | { "message": "The machine witch ID '$machine_id' cannot be found!" } description: updatge machine properties headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: responses: 200: body: application/json: example: | { "created_at": "2014-10-17 17:40:13", "updated_at": "2014-10-18 00:03:12", "switches": [], "mac": "28:6e:d4:46:c4:25", "tag": { "type": "ES200" }, "location": { "building": "E5", "city": "beijing" }, "ipmi_credentials": {}, "id": 1 } 404: body: application/json: example: | { "message": "The machine witch ID '$machine_id' cannot be found!" } description: Delete a machine (admin only) /action: post: body: application/json: schema: | { "tag": {"builder": "huawei"}, "poweron": "true", "poweroff": "true", "reset": "true" } responses: 200: body: application/json: example: | tag example: { "created_at": "2014-10-17 17:40:13", "updated_at": "2014-10-18 00:10:58", "id": 2, "switches": [ { "switch_ip": "172.29.8.40", "vlans": [ 88 ], "port": "4" } ], "mac": "00:0c:29:2b:c9:d4", "tag": { "builder": "huawei" }, "location": {}, "switch_ip": "172.29.8.40", "ipmi_credentials": {}, "vlans": [ 88 ], "port": "4" } poweron/ poweroff / reset is null example: { "status": "poweron 00:0c:29:2b:c9:d4 action sent", } 404: body: application/json: example: | { "message": "The machine witch ID '$machine_id' cannot be found!" } 400: body: application/json: example: | { "message": "The machine haven't set IPMI info!" } description: machine actions headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /flavors: /{flavor_id}/metadata: get: responses: 200: body: application/json: example: | { "flavor_config": { "neutron_config": {...}, "security": {...}, "ha_proxy": {...}, "network_mapping": {...} } } 404: body: application/json: example: | {message: "flavor does not exist"} description: List specific flavor metadata. headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{flavor_id}/ui_metadata: get: responses: 200: body: application/json: example: | { "flavor_config": { "category": "service_credentials", "modifiable_data": [ "username", "password", ] "table_display_header": [ "Service", "UserName", "Password", "Action", ] "accordion_heading": "OpenStack Database and Queue Credentials", "action”: true, "data_structure": "table" }, {...}, {...} } 404: body: application/json: example: | {message: "flavor does not exist"} description: List specific flavor ui metadata. headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /adapters: get: responses: 200: body: application/json: example: | [{ "flavors": [ { "roles": [ { "display_name": "all in one compute", "description": "all in one compute", "adapter_id": 3, "role_id": 35, "flavor_id": 4, "optional": true, "id": 35, "name": "allinone-compute" } ], "display_name": "All-In-One", "id": 4, "template": "allinone.tmpl", "name": "allinone" }, ], "package_installer": { "id": 1, "alias": "chef_installer", "name": "chef_installer", "settings": { "chef_server_ip": "10.145.88.211", "client_name": "", "chef_server_dns": "compass", "databags": [], "chef_url": "https://10.145.88.211", "key_dir": "" } }, "name": "openstack_icehouse", "os_installer": { "id": 1, "alias": "cobbler", "name": "cobbler", "settings": { "credentials": { "username": "cobbler", "password": "cobbler" }, "cobbler_url": "http://10.145.88.211/cobbler_api" } }, "supported_oses": [ { "os_id": 1, "id": 1, "name": "Ubuntu-12.04-x86_64" }, { "os_id": 2, "id": 2, "name": "CentOS-6.5-x86_64" } ], "display_name": "OpenStack Icehouse", "id": 3 }] queryParameters: name: description: Lists information for all adapters headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{id}: get: responses: 200: body: application/json: example: | { "id" : 1, "name": "openstack", "display": "OpenStack", "os_installer": "cobbler", "package_installer": "chef", "roles": [ { "display_name": "compute", "name": "os-compute-worker" }, { "display_name": "controller", "name": "os-controller" }, { "display_name": "network", "name": "os-network" }, { "display_name": "storage", "name": "os-block-storage-worker" ], "compatible_os": [ { "name": "CentOs", "os_id": 1 }, { "name": "Ubuntu", "os_id": 2 } ] } 404: body: application/json: example: | { "message": "The adapter with id 'some_id' cannot be found!" } description: Lists information for a specified adapter headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /oses/{os_id}/metadata: get: responses: 200: body: application/json: example: | { "package_config": { "security": { "_self": { "mapping_to": "", "description": null, "required_in_whole_config": true, "display_type": null, "js_validator": null, "default_value": null, "field_type": "dict", "name": "security", "required_in_options": false, "is_required": false, "options": null }, }, "os_config": { "server_credentials": { "_self": { "mapping_to": "server_credentials", "description": null, "required_in_whole_config": true, "display_type": null, "js_validator": null, "default_value": null, "field_type": "dict", "name": "server_credentials", "required_in_options": false, "is_required": false, "options": null }, "username": { "_self": { "mapping_to": "username", "description": "username", "required_in_whole_config": false, "display_type": "text", "js_validator": null, "default_value": "root", "field_type": "basestring", "name": "username", "required_in_options": false, "is_required": true, "options": null } }, }, }, } 404: body: application/json: example: | { "message": "The adapter with id 'some_id' cannot be found!" } description: Lists config formats for a specified adapter and os headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /oses/{os_id}/ui_metadata: get: responses: 200: body: application/json: example: | { "os_global_config": [ { "title": "Server Credentials", "data": [ { "default_value": "root", "display_name": "User name", "name": "username", "display_type": "text", "is_required": "true", "placeholder": "Username", "order": 1 }, { "display_name": "Confirm Password", "name": "confirmPassword", "datamatch": "password", "display_type": "password", "is_required": "true", "placeholder": "Confirm Password", "order": 3 }, { "display_name": "Password", "name": "password", "display_type": "password", "is_required": "true", "placeholder": "Password", "order": 2 }], "order": 2, "name": "server_credentials" }, } }] } 404: body: application/json: example: | { "message": "os does not exist" } description: List specified os ui metadata. headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /subnets: get: responses: 200: body: application/json: example: | [{ "updated_at": "2014-10-18 21:24:46", "subnet": "10.145.88.0/23", "created_at": "2014-10-18 21:24:46", "id": 1, "name": "10.145.88.0/23" }] description: Gets all subnetworks information post: body: application/json: schema: | { "subnet": "10.172.20.0/24", "name": "test_subnet" } responses: 200: body: application/json: example: | { "updated_at": "2014-10-18 21:24:46", "subnet": "10.145.88.0/23", "created_at": "2014-10-18 21:24:46", "id": 1, "name": "10.145.88.0/23" } 400: body: application/json: example: | { "message": "Keyword '$somekey' cannot be recognized!" } 409: body: application/json: example: | { "message": "Subnet already exists!" } description: Creates one subnetwork headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{subnet_id}: get: responses: 200: body: application/json: example: | { "updated_at": "2014-10-18 21:24:46", "subnet": "10.145.88.0/23", "created_at": "2014-10-18 21:24:46", "id": 1, "name": "10.145.88.0/23" } 404: body: application/json: example: | { "message": "Subnetwork with id 'some_id' cannot be found!" } description: Gets one subnetwork info headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "subnet": "10.172.20.0/24", "name": "update_subnet" } responses: 200: body: application/json: example: | { "updated_at": "2014-10-18 21:44:17", "subnet": "10.145.86.0/23", "created_at": "2014-10-18 21:43:50", "id": 1, "name": "10.145.86.0/23" } 404: body: application/json: example: | { "message": "Subnetwork with id 'some_id' cannot be found!" } 409: body: application/json: example: | { "message": "Subnet name already exists!" } description: set subnet properties headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: responses: 403: body: application/json: example: | { "message": "Subnetwork is in use by some interface. Cannot delete it." } { "message": "Subnetwork can only be deleted by creator or admin!" } 404: body: application/json: example: | { "message": "Subnetwork with id 'some_id' cannot be found!" } description: Deletes a subnetwork (owner, admin only) headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /clusters: get: responses: 200: body: application/json: example: | [ { "created_at": "2014-10-18 23:01:23", "os_name": "CentOS-6.5-x86_64", "name": "cluster1", "reinstall_distributed_system": true, "adapter_id": 3, "updated_at": "2014-10-18 23:01:23", "owner": "admin@huawei.com", "os_id": 2, "distributed_system_installed": false, "flavor": { "display_name": "All-In-One", "name": "allinone", "roles": [ { "display_name": "all in one compute", "description": "all in one compute", "adapter_id": 3, "role_id": 35, "flavor_id": 4, "optional": true, "id": 35, "name": "allinone-compute" } ], "adapter_id": 3, "template": "allinone.tmpl", "id": 4 }, "id": 1 } ] queryParameters: name: os_name: owner: adapter_name: flavor_name: description: Lists all information for all clusters headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 post: body: application/json: schema: | { "adapter_id": 3, "name": "add_cluster", "os_id": 1, "flavor_id": 1 } responses: 201: body: application/json: example: | { "created_at": "2014-10-18 23:01:23", "os_name": "CentOS-6.5-x86_64", "name": "cluster1", "reinstall_distributed_system": true, "adapter_id": 3, "updated_at": "2014-10-18 23:01:23", "owner": "admin@huawei.com", "os_id": 2, "distributed_system_installed": false, "flavor": { "display_name": "All-In-One", "name": "allinone", "roles": [ { "display_name": "all in one compute", "description": "all in one compute", "adapter_id": 3, "role_id": 35, "flavor_id": 4, "optional": true, "id": 35, "name": "allinone-compute" } ], "adapter_id": 3, "template": "allinone.tmpl", "id": 4 }, "id": 1 } 409: body: application/json: example: | { "message": "Cluster with name 'cluster_01' already exists!" } description: Creates a new cluster headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{cluster_id}: get: responses: 200: body: application/json: example: | { "created_at": "2014-10-18 23:01:23", "os_name": "CentOS-6.5-x86_64", "name": "cluster1", "reinstall_distributed_system": true, "adapter_id": 3, "updated_at": "2014-10-18 23:01:23", "owner": "admin@huawei.com", "os_id": 2, "distributed_system_installed": false, "flavor": { "display_name": "All-In-One", "name": "allinone", "roles": [ { "display_name": "all in one compute", "description": "all in one compute", "adapter_id": 3, "role_id": 35, "flavor_id": 4, "optional": true, "id": 35, "name": "allinone-compute" } ], "adapter_id": 3, "template": "allinone.tmpl", "id": 4 }, "id": 1 } 404: body: application/json: example: | { "message": "Cluster with id 'some_id' cannot be found!" } description: Lists information for a specified cluster headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "name": "update_cluster" } responses: 200: body: application/json: example: | { "created_at": "2014-10-18 23:16:02", "os_name": "CentOS-6.5-x86_64", "name": "cluster_new", "reinstall_distributed_system": true, "adapter_id": 3, "updated_at": "2014-10-18 23:16:39", "owner": "admin@huawei.com", "os_id": 2, "distributed_system_installed": false, "flavor": { "display_name": "All-In-One", "name": "allinone", "roles": [ { "display_name": "all in one compute", "description": "all in one compute", "adapter_id": 3, "role_id": 35, "flavor_id": 4, "optional": true, "id": 35, "name": "allinone-compute" } ], "adapter_id": 3, "template": "allinone.tmpl", "id": 4 }, "id": 2 } 400: body: application/json: example: | { "message": "Cluster not found" } description: set properties of cluster headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: responses: 200: body: application/json: example: | { "created_at": "2014-10-18 23:01:23", "os_name": "CentOS-6.5-x86_64", "name": "cluster1", "reinstall_distributed_system": true, "adapter_id": 3, "updated_at": "2014-10-18 23:01:23", "owner": "admin@huawei.com", "os_id": 2, "distributed_system_installed": false, "flavor": { "display_name": "All-In-One", "name": "allinone", "roles": [ { "display_name": "all in one compute", "description": "all in one compute", "adapter_id": 3, "role_id": 35, "flavor_id": 4, "optional": true, "id": 35, "name": "allinone-compute" } ], "adapter_id": 3, "template": "allinone.tmpl", "id": 4 }, "id": 1 } 403: body: application/json: example: | { "message": "Cluster has been deployed or is being installed. Not allowed to delete it now!" } description: Deletes a specific cluster before deploy (admin, owner only). Hosts will be still kept even cluster(s) is deleted. headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /config: get: responses: 200: body: application/json: example: | { "package_config": { }, "os_config": { } } 404: body: application/json: example: | { "message": "Cluster with id 'some_id' cannot be found!" } description: Gets config information for a specified cluster headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "os_config":{ "general": { "language": "EN", "timezone": "PDT", "domain": "xxx", "default_gateway": "10.0.0.1" }, "server_credentials": { "username": "admin", "password": "admin" }, "partition": { "/var" : { "_type": "$path", "max_size": "20", "size_percentage": "20" } } }, "package_config":{ "network_mapping": { "management": { "interface": "eth0" }, "tenant": { "interface": "eth1" }, "storage": { "interface":" eth2" }, "public": { "interface": "eth3" } } } } responses: 200: body: application/json: example: | { "os_config”: { "general”: { "language": "EN", "timezone": "PDT", "domain": "xxx", "default_gateway": "10.0.0.1" }, "server_crendentials": { "username": "admin", "password": "admin" }, "partition": { "/var" : { "max_size": "20", "size_percentage": "20", }, } } { "package_config": { "network_mapping": { "management": { "interface": "eth0" }, "tenant": { "interface": "eth1" }, "storage": { "interface":"eth2" }, "public": { "interface": "eth3" } } } } 404: body: application/json: example: | { "message": "Cluster with id 'some_id' cannot be found!" } description: set properties in cluster config headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 patch: body: application/json: schema: | { "package_config": { "security": { "dashboard_credentials": { "username": "root" } } } } responses: 200: body: application/json: example: | { "package_config":{ "security": { "service_crendentials": { "image": { "username": "admin", "password": "admin" }, ... }, "dashboard_credentials":{ "username": "root", "password": "admin" } } } } 404: body: application/json: example: | { "message": "Cluster with id 'some_id' cannot be found!" } description: update properties in cluster config headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: responses: 200: body: application/json: example: | { "package_config":{ "security": { "service_crendentials": { "image": { "username": "admin", "password": "admin" }, ... } } } } 404: body: application/json: example: | { "message": "Cluster with id 'some_id' cannot be found!" } description: delete cluster config headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /state: get: responses: 200: body: application/json: example: | { "package_config": { }, "os_config": { } } 404: body: application/json: example: | { "message": "Cluster with id 'some_id' cannot be found!" } description: get cluster state headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /hosts: get: responses: 200: body: application/json: example: | [ { "id" : 1, "name": "host_01", "dns": "xxx", "os": "Centos", "mac": "---MAC-address---", "machine_id": 1, "os_installed": true, }, …... ] 404: body: application/json: example: | { "message": "Cluster with id 'some_id' cannot be found!" } description: Gets the information of the hosts belonging to this cluster headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 post: body: application/json: schema: | { "machine_id": 1, "name": "cluster_host", "reinstall_os": "True", "roles": ["allinone-compute"] } responses: 200: body: application/json: example: | { "os_installer": { "id": 1, "alias": "cobbler", "name": "cobbler", "settings": { "credentials": { "username": "cobbler", "password": "cobbler" }, "cobbler_url": "http://10.145.88.211/cobbler_api" } }, "ip": null, "clusterhost_id": 2, "updated_at": "2014-10-18 23:47:47", "switches": [ { "switch_ip": "172.29.8.40", "vlans": [ 88 ], "port": "4" } ], "os_installed": false, "tag": {}, "cluster_id": 2, "id": 2, "switch_ip": "172.29.8.40", "networks": { }, "hostname": null, "reinstall_os": true, "owner": "admin@huawei.com", "port": "4", "location": {}, "os_name": "CentOS-6.5-x86_64", "reinstall_distributed_system": true, "mac": "00:0c:29:2b:c9:d4", "host_id": 2, "distributed_system_installed": false, "name": "None.cluster_new", "roles": [], "clustername": "cluster_new", "created_at": "2014-10-18 23:47:47", "machine_id": 2 } 409: body: application/json: example: | { "message": "host already exists" } description: add host to a cluster headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{host_id}: get: responses: 200: body: application/json: example: | { "id" : 1, "name": "host_01", "dns": "xxx", "os": "Centos", "mac": "---MAC-address---", "machine_id": 1, "os_installed": true, "links": [ { "href" : "/hosts/1", "rel": "self" }, { "href": "/clusters/1/hosts/1/config", "rel": "host package config" } ] } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: get host of a cluster headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "name": "update_cluster_host", "reinstall_os": "False", "roles": ["ha-proxy"] } responses: 200: body: application/json: example: | { "os_installer": { "id": 1, "alias": "cobbler", "name": "cobbler", "settings": { "credentials": { "username": "cobbler", "password": "cobbler" }, "cobbler_url": "http://10.145.88.211/cobbler_api" } }, "ip": null, "clusterhost_id": 2, "updated_at": "2014-10-19 00:10:43", "switches": [ { "switch_ip": "172.29.8.40", "vlans": [ 88 ], "port": "4" } ], "os_installed": false, "tag": {}, "cluster_id": 2, "id": 2, "switch_ip": "172.29.8.40", "networks": {}, "hostname": null, "reinstall_os": true, "owner": "admin@huawei.com", "port": "4", "location": {}, "os_name": "CentOS-6.5-x86_64", "reinstall_distributed_system": true, "mac": "00:0c:29:2b:c9:d4", "host_id": 2, "distributed_system_installed": false, "name": "None.cluster_new", "roles": [ { "display_name": "all in one compute", "description": "all in one compute", "adapter_id": 3, "optional": true, "id": 35, "name": "allinone-compute" } ], "clustername": "cluster_new", "created_at": "2014-10-18 23:47:47", "machine_id": 2 } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: set host properties of a cluster headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 patch: body: application/json: schema: | { "roles": "os-controller" } responses: 200: body: application/json: example: | { "os_installer": { "id": 1, "alias": "cobbler", "name": "cobbler", "settings": { "credentials": { "username": "cobbler", "password": "cobbler" }, "cobbler_url": "http://10.145.88.211/cobbler_api" } }, "ip": null, "clusterhost_id": 2, "updated_at": "2014-10-19 00:10:43", "switches": [ { "switch_ip": "172.29.8.40", "vlans": [ 88 ], "port": "4" } ], "os_installed": false, "tag": {}, "cluster_id": 2, "id": 2, "switch_ip": "172.29.8.40", "networks": {}, "hostname": null, "reinstall_os": true, "owner": "admin@huawei.com", "port": "4", "location": {}, "os_name": "CentOS-6.5-x86_64", "reinstall_distributed_system": true, "mac": "00:0c:29:2b:c9:d4", "host_id": 2, "distributed_system_installed": false, "name": "None.cluster_new", "roles": [ { "display_name": "all in one compute", "description": "all in one compute", "adapter_id": 3, "optional": true, "id": 35, "name": "allinone-compute" }, { "name": "new-role", ... } ], "clustername": "cluster_new", "created_at": "2014-10-18 23:47:47", "machine_id": 2 } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: update host properties of a cluster headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: description: delete host from a cluster /config: get: responses: 200: body: application/json: example: | { "os_config": { ... }, "package_config": { ... } } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: get config of a host headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "os_config": { "general": { "language": "EN", "timezone": "UTC", "http_proxy": "http://127.0.0.1:3128", "https_proxy": "http://127.0.0.1:3128", "no_proxy": [ "127.0.0.1", "compass" ], "ntp_server": "127.0.0.1", "dns_servers": [ "127.0.0.1" ], "domain": "ods.com", "search_path": [ "ods.com" ], "default_gateway": "127.0.0.1" }, "server_credentials": { "username": "root", "password": "root" }, "partition": { "/var": { "max_size": "100G", "percentage": 10, "size": "1G" } } }, "package_config": { "network_mapping": { "management": { "interface": "eth0" }, "tenant": { "interface": "eth1" }, "storage": { "interface":"eth2" }, "public": { "interface": "eth3" } }, "services_credentials": { "image": { "username": "xxx", "password": "xxx" }, "metering": { "username": "xxx", "password": "xxx" } } } } responses: 200: body: application/json: example: | { ….. } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: set host config headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 patch: body: application/json: schema: | { "os_config": { "general": { "language": "EN", "timezone": "UTC", "http_proxy": "http://127.0.0.1:3128", "https_proxy": "http://127.0.0.1:3128", "no_proxy": [ "127.0.0.1", "compass" ], "ntp_server": "127.0.0.1", "dns_servers": [ "127.0.0.1" ], "domain": "ods.com", "search_path": [ "ods.com" ], "default_gateway": "127.0.0.1" }, "server_credentials": { "username": "root", "password": "root" }, "partition": { "/var": { "max_size": "100G", "percentage": 10, "size": "1G" } } }, "package_config": { "network_mapping": { "management": { "interface": "eth0" }, "tenant": { "interface": "eth1" }, "storage": { "interface":"eth2" }, "public": { "interface": "eth3" } }, "services_credentials": { "image": { "username": "xxx", "password": "xxx" }, "metering": { "username": "xxx", "password": "xxx" } } } } responses: 200: body: application/json: example: | { "os_config": { ...//the same as PATCH cluster config } } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: update host config headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: responses: 200: body: application/json: example: | { "os_config": { ...//the same as PATCH cluster config } } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: delete host config headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /state: get: responses: 200: body: application/json: example: | { "cluster_id" : 1, "host_id": 10 "state": "INSTALLING", "percentage": 0.5, "severity": "INFO", "message": "-----some--message-----", "updated_at": "---timestamp---" } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: get host state of a cluster headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "state": "INSTALLING" } responses: 200: body: application/json: example: | { "cluster_id" : 1, "host_id": 10 "state": "SUCCESSFUL", "percentage": 1, "severity": "INFO", "message": "-----some--message-----", "updated_at": "---timestamp---" } OR { "cluster_id" : 1, "host_id": 10 "state": "ERROR", "percentage": 0.7, "severity": "ERROR", "message": "---some-error-message---", "updated_at": "---timestamp---" } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: set host state properties of a cluster headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /action: post: body: application/json: schema: | { "add_hosts": { "machines": [{ "machine_id": 1, "host_id": 1, "reinstall_os": "True" },{ "machine_id": 2, "host_id": 2 }] }, "set_hosts": { "machines": [{ "machine_id": 3 },{ "machine_id": 4 }] }, "remove_hosts": { "hosts": [1] }, "review": { "hosts": [1,2,3] }, "deploy": { "hosts": [1,2,3] } } responses: 200: body: application/json: example: | { "hosts": [ { "id" : 5, "machine_id": 10 }, { "id" : 6, "machine_id": 11 }, { "id" : 7, "machine_id": 12 } ] } OR { "hosts": [ { "id" : 1, "machine_id": 13 }, { "id" : 2, "machine_id": 14 }, { "id" : 3, "machine_id": 15 } ] } OR { "hosts": [ { "id" : 1, "machine_id": 13 } ] } OR { "hosts": [ { "id" : 1, "machine_id": 10 }, { "id" : 2, "machine_id": 11 }, { "id" : 3, "machine_id": 12 } ] } OR { "cluster": {"id": 1}, "hosts": [{"id": 1}, {"id": 2}, {"id": 3}] } OR { "status": "deploy action sent", "cluster": { "id": 1, }, "hosts": [ { "id": 3 } ] } 404: body: application/json: example: | { "message": "Cluster with id 'some_id' cannot be found!" } description: Takes an action for a specific cluster headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /metadata: get: responses: 200: body: application/json: example: | { "package_config": { }, "os_config": { } } 404: body: application/json: example: | { "message": "Cluster with id 'some_id' cannot be found!" } description: Get metadata of a specific cluster headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /hosts: get: responses: 200: body: application/json: example: | [ { "id” : 1, "name": "host_01", "machine_id": 1, "mac": "---MAC-address--", "ip": "192.168.1.2", "os": "CentOS", "os_installed": false, "clusters": ["cluster_01"], "created_by": "user1@email.com", "created_at": "---timestamp---", "updated_at": "---timestamp---", "links”: [ { "href" : "/hosts/1", "rel": "self } ] }, ... ] queryParameters: name: os_name: owner: mac: description: Lists information for all hosts headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{host_id}: get: responses: 200: body: application/json: example: | { "id" : 1, "name": "host_01", "machine_id": 1, "mac": "---MAC-address--”, "ip": "192.168.1.2" "os": "CentOs", "os_installed": false, "domain": "xxx", "dns": "xxx", "created_by": "user1@email.com", "created_at": "---timestamp---", "updated_at": "---timestamp---" } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: Lists information for a specified host headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "name": "update_host_name" } responses: 200: body: application/json: example: | { "id" : 1, "name": "host1" } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: set host properties. headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: responses: 200: body: application/json: example: | { "id" : 1, "name": "host_01_new", "mac": "---MAC-address--", "os_name": "CentOs", "os_installed": false } 404: body: application/json: example: | { "type": "itemNotFound", "message": " Host with id 'some_id' cannot be found!" } description: Deletes a host (admin only). The host must be not in any cluster. headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /action: post: body: application/json: schema: | { "poweron": [1], "poweroff": [1], "reset": [1] } responses: 200: body: application/json: example: | { "status": "host power action sent", "host": {...} } 404: body: application/json: example: | { "message": "The host witch ID '$host_id' cannot be found!" } 400: body: application/json: example: | { "message": "The host didnot set IPMI info!" } description: Poweron, poweroff, reset this host by IPMI headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /clusters: get: responses: 200: body: application/json: example: | [ { "os_name": "CentOS-6.5-x86_64", "name": "cluster_new", "reinstall_distributed_system": true, "created_at": "2014-10-18 23:16:02", "adapter_id": 3, "updated_at": "2014-10-18 23:16:39", "owner": "admin@huawei.com", "distributed_system_installed": false, "id": 2 } ] 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: Lists clusters which the host belongs to headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /config: get: responses: 200: body: application/json: example: | { "os_config": { "global": { "language": "EN", "timezone": "PDT", } "partition": { "/var": { "max_size": "20", "size_percentage": "30" }, "/home": { "max_size": "20", "size_percentage": "40" } } } } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: Lists config information for a specified host headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "os_config": { "general": { "language": "EN", "timezone": "UTC", "http_proxy": "http://127.0.0.1:3128", "https_proxy": "http://127.0.0.1:3128", "no_proxy": [ "127.0.0.1", "compass" ], "ntp_server": "127.0.0.1", "dns_servers": [ "127.0.0.1" ], "domain": "ods.com", "search_path": [ "ods.com" ], "default_gateway": "127.0.0.1" }, "server_credentials": { "username": "root", "password": "root" }, "partition": { "/var": { "max_size": "100G", "percentage": 10, "size": "1G" } } } } responses: 200: body: application/json: example: | { "os_config": { … } } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: set config properties for a specified host headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 patch: body: application/json: schema: | { "os_config": { "general": { "language": "EN", "timezone": "UTC", "http_proxy": "http://127.0.0.1:3128", "https_proxy": "http://127.0.0.1:3128", "no_proxy": [ "127.0.0.1", "compass" ], "ntp_server": "127.0.0.1", "dns_servers": [ "127.0.0.1" ], "domain": "ods.com", "search_path": [ "ods.com" ], "default_gateway": "127.0.0.1" }, "server_credentials": { "username": "root", "password": "root" }, "partition": { "/var": { "max_size": "100G", "percentage": 10, "size": "1G" } } } } responses: 200: body: application/json: example: | { .... } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: update host config properties headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: responses: 200: body: application/json: example: | { "os_config": { ... } } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: delete host config headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /state: get: responses: 200: body: application/json: example: | { "state": "INSTALLING", "percentage": 0.5, "severity": "INFO", "message": "-----some--message-----", "updated_at": "---timestamp---" } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: get host state headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "state": "INSTALLING" } responses: 200: body: application/json: example: | { "cluster_id" : 1, "host_id": 10 "state": "SUCCESSFUL", "percentage": 1, "severity": "INFO", "message": "-----some--message-----", "updated_at": "---timestamp---" } OR { "cluster_id" : 1, "host_id": 10 "state": "ERROR", "percentage": 0.7, "severity": "ERROR", "message": "---some-error-message---", "updated_at": "---timestamp---" } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: set host state properties headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /network: get: body: application/json: schema: | [ { "interface": "eth0", "ip": "10.172.20.91", "subnet_id": 1, "is_mgmt": "False", "is_promiscuous": "False" }, { "interface": "eth1", "ip": "10.172.20.110", "subnet_id": 1, "is_mgmt": "False", "is_promiscuous": "False" } ] responses: 200: body: application/json: example: | { "eth0": { "id": 1, "interface": "eth0", "ip": "192.168.10.1", "is_mgmt": true, "is_promiscuous": false, "subnet_id": 1, }, "eth1": { "id": 2, "interface": "eth1", "ip": "10.12.123.1", "is_promiscuous": true, "subnet_id": 2, }, ….. } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: Lists network info for a specified host headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 post: body: application/json: schema: | { "interface": "eth0", "ip": "10.145.89.152", "subnet_id": 1, "is_mgmt": "True", "is_promiscuous": "False" } responses: 200: body: application/json: example: | { "id": 3, "interface": "eth3", "ip": "12.140.10.1", "is_promiscuous": true, "is_mgmt": false, "subnet_id": 3, } 404: body: application/json: example: | { "message": " Host with id ‘some_id’ cannot be found!" } description: Creates an interface config entry headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{interface}: get: description: list host network information headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "interface": "eth1", "ip": "10.145.89.155", "subnet_id": 1, "is_mgmt": "True", "is_promiscuous": "False" } responses: 200: body: application/json: example: | { "id": 3, "interface": "eth3", "ip": "12.140.10.2", "is_promiscuous": true, "is_mgmt": false, "subnet_id": 4, } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: set host network properties headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: responses: 200: body: application/json: example: | { "id": 3, "interface": "eth3", "ip": "12.140.10.1", "is_promiscuous”: true, "is_mgmt": false, "subnet_id": 3 } 404: body: application/json: example: | { "message": " Host with id 'some_id' cannot be found!" } description: delete a host network headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /proxy/{path}: get: responses: 200: body: application/json: example: | [ { "created_at": "2014-10-19 10:50:04", "updated_at": "2014-10-19 10:50:04", "email": "admin@huawei.com", "is_admin": true, "active": true, "id": 1 } ] queryParameters: URL: example: http://10.145.88.211/api/proxy/users description: proxy get request headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 post: body: application/json: schema: | { "url": "http://10.145.88.211/api/proxy/subnets" } responses: 200: body: application/json: example: | { "subnet": "10.145.86.0/23", "created_at": "2014-10-19 11:25:33", "updated_at": "2014-10-19 11:25:33", "name": "10.145.86.0/23", "id": 3 } description: proxy post request headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 put: body: application/json: schema: | { "url": "http://10.145.88.211/api/proxy/subnets/3" } responses: 200: body: application/json: example: | { "subnet": "10.145.84.0/23", "created_at": "2014-10-19 11:25:33", "updated_at": "2014-10-19 11:29:08", "name": "10.145.84.0/23", "id": 3 } description: proxy put request headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 patch: body: application/json: schema: | { "url": "http://10.145.88.211/api/proxy/subnets/3" } responses: 200: body: application/json: example: | { "ip": "172.29.8.42", "created_at": "2014-10-19 11:31:40", "updated_at": "2014-10-19 11:33:46", "state": "initialized", "filters": "", "credentials": { "version": "2c", "community": "private" }, "id": 3 } description: proxy patch request headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: responses: 200: body: application/json: example: | { "ip": "172.29.8.42", "created_at": "2014-10-19 11:31:40", "updated_at": "2014-10-19 11:33:46", "state": "initialized", "filters": "", "credentials": { "version": "2c", "community": "private" }, "id": 3 } queryParameters: URL: example: http://10.145.88.211/api/proxy/switches/3 description: proxy delete request headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /host/networks: get: responses: 200: body: application/json: example: | { "eth1": { "ip": "192.168.100.155", "created_at": "2015-04-17 14:55:55", "is_promiscuous": true, "updated_at": "2015-04-17 14:55:55", "netmask": "255.255.254.0", "is_mgmt": false, "interface": "eth1", "id": 1 }, "eth0": { "ip": "10.145.89.155", "created_at": "2015-04-17 14:55:55", "is_promiscuous": false, "updated_at": "2015-04-17 14:55:55", "netmask": "255.255.254.0", "is_mgmt": true, "interface": "eth0", "id": 2 } } description: List all host networks headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /{host_network_id}: get: responses: 200: body: application/json: example: | { "ip": "192.168.100.155", "created_at": "2015-04-17 14:55:55", "is_promiscuous": true, "updated_at: "2015-04-17 14:55:55", "netmask": "255.255.254.0", "is_mgmt": false, "interface": "eth1", "id": 1 } 404: body: application/json: example: | { "message": "Cannot find the record in table HostNetwork: {'id': }", } description: List specifig host network info headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 /host-networks/{host_network_id}: put: body: application/json: schema: | { "interface": "eth0", "ip": "10.145.88.10" } responses: 200: body: application/json: example: | { "ip": "192.168.100.159", "created_at": "2015-04-17 14:55:55", "is_promiscuous": true, "updated_at: "2015-04-17 14:55:55", "netmask": "255.255.254.0", "is_mgmt": false, "interface": "eth1", "id": 1 } 404: body: application/json: example: | { message: "Cannot find the record in table HostNetwork: {'id': }" } description: Update a specific host network info. headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0 delete: responses: 200: body: application/json: example: | { "ip: "10.145.89.155", "created_at": "2015-04-17 15:44:54" "is_promiscuous": false, "updated_at": "2015-04-17 15:44:54", "netmask": "255.255.254.0", "is_mgmt": false "interface": "eth0", "id": 1 } 404: body: application/json: example: | { message: "Cannot find the record in table HostNetwork: {'id': }" } description: Delete a host network. headers: Access-token: displayName: X-Auth-Header required: true example: $1$fCD2zLIa$hikkNkqDe0qAXgKHDzw0E0