控制器

API 根路径是控制器的域,默认为:

应用是进程的组成及其依赖和元数据的命名空间。https://flynn.io/schema/controller/app#

实例:—————————————————————请求————————————————————

  1. POST /apps HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json
  1. {
  2. "name": "my-app-1422557606845347930",
  3. "protected": false
  4. }

—————————————————————响应————————————————————

  1. Content-Type: application/json
  1. {
  2. "id": "7406a4d71a0c43d3ac4b39f006cb0342",
  3. "name": "my-app-1422557606845347930",
  4. "protected": false,
  5. "strategy": "all-at-once",
  6. "created_at": "2015-01-29T18:53:26.845896Z",
  7. "updated_at": "2015-01-29T18:53:26.845896Z"
  8. }

获取App

实例:—————————————————————请求————————————————————

  1. GET /apps/7406a4d71a0c43d3ac4b39f006cb0342 HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json

—————————————————————响应————————————————————

  1. Content-Type: application/json
  1. {
  2. "id": "7406a4d71a0c43d3ac4b39f006cb0342",
  3. "name": "my-app-1422557606845347930",
  4. "protected": false,
  5. "strategy": "all-at-once",
  6. "created_at": "2015-01-29T18:53:26.845896Z",
  7. "updated_at": "2015-01-29T18:53:26.845896Z"
  8. }

获取App列表

实例:—————————————————————请求————————————————————

  1. GET /apps HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json

—————————————————————响应————————————————————

  1. Content-Type: application/json
  1. {
  2. [
  3. {
  4. "id": "7406a4d71a0c43d3ac4b39f006cb0342",
  5. "name": "my-app-1422557606845347930",
  6. "protected": false,
  7. "strategy": "all-at-once",
  8. "created_at": "2015-01-29T18:53:26.845896Z",
  9. "updated_at": "2015-01-29T18:53:26.845896Z"
  10. },
  11. {
  12. "id": "79b56ad29bac4cefb83c37965ae4ce1c",
  13. "name": "dashboard",
  14. "protected": true,
  15. "strategy": "all-at-once",
  16. "created_at": "2015-01-29T18:53:24.997991Z",
  17. "updated_at": "2015-01-29T18:53:25.015618Z"
  18. },
  19. {
  20. "id": "b6f62b8fda484f6e825484a668e161b7",
  21. "name": "taffy",
  22. "protected": true,
  23. "strategy": "all-at-once",
  24. "created_at": "2015-01-29T18:53:24.981366Z",
  25. "updated_at": "2015-01-29T18:53:24.996193Z"
  26. },
  27. {
  28. "id": "48a30977ae9c4b64ba33b773f1808915",
  29. "name": "gitreceive",
  30. "protected": true,
  31. "strategy": "all-at-once",
  32. "created_at": "2015-01-29T18:53:22.46581Z",
  33. "updated_at": "2015-01-29T18:53:22.480289Z"
  34. },
  35. {
  36. "id": "b1061d0a149a4a7498a70367c42d4013",
  37. "name": "router",
  38. "protected": true,
  39. "strategy": "all-at-once",
  40. "created_at": "2015-01-29T18:53:21.72534Z",
  41. "updated_at": "2015-01-29T18:53:21.7391Z"
  42. },
  43. {
  44. "id": "3a6f75c62c68489c82c91922d45429ad",
  45. "name": "blobstore",
  46. "protected": true,
  47. "strategy": "all-at-once",
  48. "created_at": "2015-01-29T18:53:21.415441Z",
  49. "updated_at": "2015-01-29T18:53:21.722021Z"
  50. },
  51. {
  52. "id": "eb11600643d24b5f8e18c0a42afe7f91",
  53. "name": "postgres",
  54. "protected": true,
  55. "strategy": "all-at-once",
  56. "created_at": "2015-01-29T18:53:20.053148Z",
  57. "updated_at": "2015-01-29T18:53:20.06459Z"
  58. },
  59. {
  60. "id": "a78f01dc04fb4fe3bccd85c05ae3fd73",
  61. "name": "controller",
  62. "protected": false,
  63. "strategy": "all-at-once",
  64. "created_at": "2015-01-29T18:53:20.013969Z",
  65. "updated_at": "2015-01-29T18:53:20.049305Z"
  66. }
  67. ]}

更新App

实例:—————————————————————请求————————————————————

  1. GET /apps/7406a4d71a0c43d3ac4b39f006cb0342 HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json
  1. {
  2. "id": "7406a4d71a0c43d3ac4b39f006cb0342",
  3. "protected": false,
  4. "meta": {
  5. "bread": "with hemp"
  6. }
  7. }

—————————————————————响应————————————————————

  1. Content-Type: application/json
  1. {
  2. "id": "7406a4d71a0c43d3ac4b39f006cb0342",
  3. "name": "my-app-1422557606845347930",
  4. "protected": false,
  5. "meta": {
  6. "bread": "with hemp"
  7. },
  8. "strategy": "all-at-once",
  9. "created_at": "2015-01-29T18:53:26.845896Z",
  10. "updated_at": "2015-01-29T18:53:26.845896Z"
  11. }

删除App

实例:—————————————————————请求————————————————————

  1. GET /apps/7406a4d71a0c43d3ac4b39f006cb0342 HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json

—————————————————————响应————————————————————

  1. Content-Type: text/plain; charset=utf-8

获取应用日志

属性 类型 描述
follow boolean 当新日志产生时将它们发送出去
job_id uuid string 唯一标识
lines integer 从缓冲区要返回的行数
process_type string 只返回给定进程类型的 log

以 JSON 格式来返回每个日志的每行条目

实例:—————————————————————请求————————————————————

  1. GET /apps/7406a4d71a0c43d3ac4b39f006cb0342 HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json

—————————————————————响应————————————————————

  1. Content-Type: text/plain
  1. {"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request completed\" component=controller req_id=344d4b61-d437-437c-a3c4-e4aa015647cd status=200 duration=6.151899ms","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.663589985Z"}
  2. {"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request started\" component=controller req_id=312895c5-4b45-4e65-b906-a46ee9bf3599 method=GET path=/apps/gitreceive/release client_ip=100.100.45.12","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.664482277Z"}
  3. {"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request completed\" component=controller req_id=312895c5-4b45-4e65-b906-a46ee9bf3599 status=200 duration=1.274184ms","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.66574836Z"}
  4. {"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request started\" component=controller req_id=cea0a133-93c9-4ff6-b532-cd719c888eb6 method=GET path=/apps/adcccdb4-b1a4-4209-a03a-762f4e021632 client_ip=100.100.45.12","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.667514227Z"}
  5. {"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request completed\" component=controller req_id=cea0a133-93c9-4ff6-b532-cd719c888eb6 status=200 duration=1.132266ms","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.66782991Z"}
  6. {"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request started\" req_id=7cce8772-bdad-485e-ac35-320465d70b6e component=controller method=GET path=/apps client_ip=100.100.45.12","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.668616602Z"}
  7. {"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request completed\" req_id=7cce8772-bdad-485e-ac35-320465d70b6e component=controller status=200 duration=750.095µs","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.669398265Z"}
  8. {"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request started\" component=controller req_id=99c6ab06-b4be-4996-8321-9f41847ac50c method=GET path=/apps/controller client_ip=100.100.45.12","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.670213173Z"}
  9. {"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request completed\" component=controller req_id=99c6ab06-b4be-4996-8321-9f41847ac50c status=200 duration=492.8µs","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.670729161Z"}
  10. {"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request started\" component=controller req_id=0738164d-2c09-41ae-a391-b550c0710fae method=GET path=/apps/f7064b9f-c968-4f16-be0e-f2efd1b2c7b7/log client_ip=100.100.45.12","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.671577593Z"}

应用的日志流

属性 类型 描述
follow boolean 当新日志产生时将它们发送出去
job_id uuid string 唯一标识
lines integer 从缓冲区要返回的行数
process_type string 只返回给定进程类型的 log

实例:—————————————————————请求————————————————————

  1. GET /apps/f7064b9f-c968-4f16-be0e-f2efd1b2c7b7/log?lines=10 HTTP/1.1
  2. Accept: text/event-stream
  3. Authorization: Basic OnMzY3IzdA==
  4. Content-Type: application/json

—————————————————————响应————————————————————

  1. Content-Type: text/plain
  1. data: {"event":"message","data":{"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request completed\" component=controller req_id=312895c5-4b45-4e65-b906-a46ee9bf3599 status=200 duration=1.274184ms","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.66574836Z"}}
  2. data: {"event":"message","data":{"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request started\" component=controller req_id=cea0a133-93c9-4ff6-b532-cd719c888eb6 method=GET path=/apps/adcccdb4-b1a4-4209-a03a-762f4e021632 client_ip=100.100.45.12","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.667514227Z"}}
  3. data: {"event":"message","data":{"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request completed\" component=controller req_id=cea0a133-93c9-4ff6-b532-cd719c888eb6 status=200 duration=1.132266ms","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.66782991Z"}}
  4. data: {"event":"message","data":{"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request started\" req_id=7cce8772-bdad-485e-ac35-320465d70b6e component=controller method=GET path=/apps client_ip=100.100.45.12","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.668616602Z"}}
  5. data: {"event":"message","data":{"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request completed\" req_id=7cce8772-bdad-485e-ac35-320465d70b6e component=controller status=200 duration=750.095µs","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.669398265Z"}}
  6. data: {"event":"message","data":{"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request started\" component=controller req_id=99c6ab06-b4be-4996-8321-9f41847ac50c method=GET path=/apps/controller client_ip=100.100.45.12","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.670213173Z"}}
  7. data: {"event":"message","data":{"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request completed\" component=controller req_id=99c6ab06-b4be-4996-8321-9f41847ac50c status=200 duration=492.8µs","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.670729161Z"}}
  8. data: {"event":"message","data":{"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request started\" component=controller req_id=0738164d-2c09-41ae-a391-b550c0710fae method=GET path=/apps/f7064b9f-c968-4f16-be0e-f2efd1b2c7b7/log client_ip=100.100.45.12","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.671577593Z"}}
  9. data: {"event":"message","data":{"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request completed\" component=controller req_id=0738164d-2c09-41ae-a391-b550c0710fae status=200 duration=7.132192ms","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.678703917Z"}}
  10. data: {"event":"message","data":{"host_id":"host","job_id":"host-9869a97a-ef83-4c39-91a2-ca3110f91079","msg":"t=2015-12-16T02:20:56+0000 lvl=info msg=\"request started\" req_id=2809d7e8-dcc6-4457-971e-307ebb5919e5 component=controller method=GET path=/apps/f7064b9f-c968-4f16-be0e-f2efd1b2c7b7/log client_ip=100.100.45.12","process_type":"web","source":"app","stream":"stdout","timestamp":"2015-12-16T02:20:56.679319917Z"}}
  11. data: {"event":"eof"}

中间件

中间件是进程所使用的镜像的固定引用。

属性 类型 描述
id uuid string 唯一标示
type string 中间件类型
uri uri string 用于获取中间件的uri
created_at date-time string 对象的创建时间

创建中间件

实例:—————————————————————请求————————————————————

  1. POST /artifacts HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json
  1. {
  2. "type": "docker",
  3. "uri": "https://registry.hub.docker.com/flynn/slugrunner?id=039222f9884412eb0667988933caeb0ed06da28f71e3dff540a61d13d0d85ae0"
  4. }

—————————————————————响应————————————————————

  1. Content-Type: application/json
  1. {
  2. "id": "4d365e6cdb1d47b8b98c9cd9a7b047fd",
  3. "type": "docker",
  4. "uri": "https://registry.hub.docker.com/flynn/slugrunner?id=039222f9884412eb0667988933caeb0ed06da28f71e3dff540a61d13d0d85ae0",
  5. "created_at": "2015-01-29T18:53:26.889875Z"
  6. }

获取中间件列表

实例:—————————————————————请求————————————————————

  1. POST /artifacts HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json

—————————————————————响应————————————————————

  1. Content-Type: application/json
  1. [
  2. {
  3. "id": "4d365e6cdb1d47b8b98c9cd9a7b047fd",
  4. "type": "docker",
  5. "uri": "https://registry.hub.docker.com/flynn/slugrunner?id=039222f9884412eb0667988933caeb0ed06da28f71e3dff540a61d13d0d85ae0",
  6. "created_at": "2015-01-29T18:53:26.889875Z"
  7. },
  8. {
  9. "id": "8b6548e25bc8477e905deee8a33eab2a",
  10. "type": "docker",
  11. "uri": "https://registry.hub.docker.com/flynn/dashboard?id=04b11c64060562a786281b73481049c7867658fc979d62c102e9a095fd73aadd",
  12. "created_at": "2015-01-29T18:53:25.000437Z"
  13. },
  14. {
  15. "id": "03f9d97aeab94f2b9bb23f4ade0eb270",
  16. "type": "docker",
  17. "uri": "https://registry.hub.docker.com/flynn/taffy?id=f9fec4547fcec06160a32da164cad79541b1e2edd96c4a55dee7fc64814a8b26",
  18. "created_at": "2015-01-29T18:53:24.983953Z"
  19. },
  20. {
  21. "id": "74010365c551463386bae39cf4ad0a47",
  22. "type": "docker",
  23. "uri": "https://registry.hub.docker.com/flynn/receiver?id=c2cfc8c7715c8300f3d0d1c318eb7a2fbeba6fd678a5a7d7ab8bd0f1659fad2f",
  24. "created_at": "2015-01-29T18:53:22.469009Z"
  25. },
  26. {
  27. "id": "73d37c1bdacd432f9e5c3cbe121c365e",
  28. "type": "docker",
  29. "uri": "https://registry.hub.docker.com/flynn/router?id=9ff4d42de0758dfe3278dbc0877e08b596c5f726cbb06819ff99fe4fdb448aa5",
  30. "created_at": "2015-01-29T18:53:21.728047Z"
  31. },
  32. {
  33. "id": "afe339ec9a0f46b28cfa5dff383e5179",
  34. "type": "docker",
  35. "uri": "https://registry.hub.docker.com/flynn/blobstore?id=75231ad60a567fa118cc003462612abc37a4646e5688ced2e7308f0951392f87",
  36. "created_at": "2015-01-29T18:53:21.711605Z"
  37. },
  38. {
  39. "id": "61b804fd0f9c42359ac8d8e3131d16bf",
  40. "type": "docker",
  41. "uri": "https://registry.hub.docker.com/flynn/postgresql?id=5cb8db666db41d1f86091c06d709f282295ded77e854241bef6ebee25fda09d0",
  42. "created_at": "2015-01-29T18:53:20.055663Z"
  43. },
  44. {
  45. "id": "1b7c8dcfd0b14755a452367e5f6723b6",
  46. "type": "docker",
  47. "uri": "https://registry.hub.docker.com/flynn/controller?id=e65f0f3d5e5853f2fc1f60758fb134d8ba7b746da0d8f4fdda473ff5a57fee6c",
  48. "created_at": "2015-01-29T18:53:20.024582Z"
  49. }
  50. ]

Formation

Formation 是一个正在运行的版本。https://flynn.io/schema/controller/formation#

属性 类型 描述
app uuid string 唯一标示
release uuid string 唯一标示
processes object 每种进程所运行的进程数
created_at date-time string 对象的创建时间
updated_at date-time string 对象最新更新时间

更新 Formation

实例:—————————————————————请求————————————————————

  1. PUT /apps/7406a4d71a0c43d3ac4b39f006cb0342/formations/689ce5b9ad1541ab975d51cba1e051d0 HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json
  1. {
  2. "app": "7406a4d71a0c43d3ac4b39f006cb0342",
  3. "release": "689ce5b9ad1541ab975d51cba1e051d0",
  4. "processes": {
  5. "foo": 1
  6. }
  7. }

—————————————————————响应————————————————————

  1. Content-Type: application/json
  1. {
  2. "app": "7406a4d71a0c43d3ac4b39f006cb0342",
  3. "release": "689ce5b9ad1541ab975d51cba1e051d0",
  4. "processes": {
  5. "foo": 1
  6. },
  7. "created_at": "2015-01-29T18:53:26.907195Z",
  8. "updated_at": "2015-01-29T18:53:26.907195Z"
  9. }

获取 Formation

实例:—————————————————————请求————————————————————

  1. GET /apps/7406a4d71a0c43d3ac4b39f006cb0342/formations/689ce5b9ad1541ab975d51cba1e051d0 HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json

—————————————————————响应————————————————————

  1. Content-Type: application/json
  1. {
  2. "app": "7406a4d71a0c43d3ac4b39f006cb0342",
  3. "release": "689ce5b9ad1541ab975d51cba1e051d0",
  4. "processes": {
  5. "foo": 1
  6. },
  7. "created_at": "2015-01-29T18:53:26.907195Z",
  8. "updated_at": "2015-01-29T18:53:26.907195Z"
  9. }

获取 Formation 列表

实例:—————————————————————请求————————————————————

  1. GET /apps/7406a4d71a0c43d3ac4b39f006cb0342/formations HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json

—————————————————————响应————————————————————

  1. Content-Type: application/json
  1. [
  2. {
  3. "app": "7406a4d71a0c43d3ac4b39f006cb0342",
  4. "release": "689ce5b9ad1541ab975d51cba1e051d0",
  5. "processes": {
  6. "foo": 1
  7. },
  8. "updated_at": "2015-01-29T18:53:26.907195Z"
  9. }
  10. ]

删除 Formation

实例:—————————————————————请求————————————————————

  1. DELETE /apps/7406a4d71a0c43d3ac4b39f006cb0342/formations/40202cf3b0e946a4b2c4db42a0c14194 HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json

—————————————————————响应————————————————————

  1. Content-Type: text/plain; charset=utf-8

扩展的 Expanded

Formation 是一个正在运行的版本。

属性 类型 描述
app object 应用是进程的组成及其依赖和元数据的命名空间
app.id uuid string 唯一标示
app.name string matching ^[a-z\d]+(-[a-z\d]+)*$ 应用名称
app.protected boolean 若为真,则应用可以受保护不被删除
app.meta object 用户自定义元数据
app.strategy string all-at-once one-by-one postgres discoverd-meta
app.release uuid string 唯一标示
app.deploy_timeout integer 部署超时时间(默认30秒)
app.created_at date-time string 对象创建时间
app.updated_at date-time string 对象更新时间
release object
release.id uuid string 唯一标示
release.artifact uuid string 唯一标示
release.meta object 用户自定义元数据
release.env object 环境变量
release.processes object
release.created_at date-time string 对象创建时间
artifact object 中间件是进程所使用的镜像的固定引用
artifact.id uuid string 唯一标示
artifact.type string docker
artifact.uri uri string 唯一标示
artifact.created_at date-time string 对象的创建时间
processes object 每种进程所运行的进程数
updated_at date-time string 对象最新更新时间

获取扩展的 formation

实例:—————————————————————请求————————————————————

  1. GET /apps/adcccdb4-b1a4-4209-a03a-762f4e021632/formations/47154f8c-a604-469d-ae6a-e431990ddee8?expand=true HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json

—————————————————————响应————————————————————

  1. Content-Type: application/json
  1. {
  2. "app": {
  3. "id": "adcccdb4-b1a4-4209-a03a-762f4e021632",
  4. "name": "my-app-1450232456657062340",
  5. "meta": null
  6. },
  7. "release": {
  8. "id": "47154f8c-a604-469d-ae6a-e431990ddee8",
  9. "artifact": "c1889f55-c244-43ce-af70-ead357daa6ec",
  10. "env": {
  11. "some": "info"
  12. },
  13. "processes": {
  14. "foo": {
  15. "cmd": [
  16. "ls",
  17. "-l"
  18. ],
  19. "env": {
  20. "BAR": "baz"
  21. },
  22. "resources": {
  23. "max_fd": {
  24. "request": 10000,
  25. "limit": 10000
  26. },
  27. "memory": {
  28. "request": 1073741824,
  29. "limit": 1073741824
  30. }
  31. }
  32. }
  33. }
  34. },
  35. "artifact": {
  36. "id": "c1889f55-c244-43ce-af70-ead357daa6ec",
  37. "type": "docker",
  38. "uri": "https://dl.flynn.io/tuf?name=flynn/slugrunner&id=dc1dadc66c31a1957bad101a22c4b607b2dd4f8f42ae5593ec28f3eef45e7b97"
  39. },
  40. "processes": {
  41. "foo": 1
  42. },
  43. "updated_at": "2015-12-16T02:21:06.748757Z"
  44. }

获取运行的 formation 列表

实例:—————————————————————请求————————————————————

  1. GET /formations?active=true HTTP/1.1
  2. Authorization: Basic OnMzY3IzdA==
  3. Content-Type: application/json

—————————————————————响应————————————————————

  1. Content-Type: application/json
  1. [
  2. {
  3. "app": {
  4. "id": "adcccdb4-b1a4-4209-a03a-762f4e021632",
  5. "name": "my-app-1450232456657062340",
  6. "meta": null
  7. },
  8. "release": {
  9. "id": "47154f8c-a604-469d-ae6a-e431990ddee8",
  10. "artifact": "c1889f55-c244-43ce-af70-ead357daa6ec",
  11. "env": {
  12. "some": "info"
  13. },
  14. "processes": {
  15. "foo": {
  16. "cmd": [
  17. "ls",
  18. "-l"
  19. ],
  20. "env": {
  21. "BAR": "baz"
  22. },
  23. "max_fd": {
  24. "request": 10000,
  25. "limit": 10000
  26. },
  27. "memory": {
  28. "request": 1073741824,
  29. "limit": 1073741824
  30. }
  31. }
  32. }
  33. }
  34. },
  35. "artifact": {
  36. "id": "c1889f55-c244-43ce-af70-ead357daa6ec",
  37. "type": "docker",
  38. "uri": "https://dl.flynn.io/tuf?name=flynn/slugrunner&id=dc1dadc66c31a1957bad101a22c4b607b2dd4f8f42ae5593ec28f3eef45e7b97"
  39. },
  40. "processes": {
  41. "foo": 1
  42. },
  43. "updated_at": "2015-12-16T02:21:06.748757Z"
  44. },
  45. {
  46. "app": {
  47. "id": "28a8aed1-a50d-446e-b4ad-38ca3e95fb8f",
  48. "name": "status",
  49. "meta": null
  50. },
  51. "release": {
  52. "id": "fff9dd4b-9f38-4f71-b3c5-5cd5fc19d31a",
  53. "artifact": "e88714df-27b5-40aa-900e-717384fddcdd",
  54. "env": {
  55. "AUTH_KEY": "44335767c99fb93b23c9a1500bf1ebeb"
  56. },
  57. "processes": {
  58. "web": {
  59. "ports": [
  60. {
  61. "port": 80,
  62. "proto": "tcp",
  63. "service": {
  64. "name": "status-web",
  65. "create": true
  66. }
  67. }
  68. ],
  69. "resources": {
  70. "max_fd": {
  71. "request": 10000,
  72. "limit": 10000
  73. },
  74. "memory": {
  75. "request": 1073741824,
  76. "limit": 1073741824
  77. }
  78. }
  79. }
  80. }
  81. },
  82. "artifact": {
  83. "id": "e88714df-27b5-40aa-900e-717384fddcdd",
  84. "type": "docker",
  85. "uri": "https://dl.flynn.io/tuf?name=flynn/status&id=33c003b37b2919a841d6e14a6335ff440607957efeb2e9022dce05a36f86203f"
  86. },
  87. "processes": {
  88. "web": 1
  89. },
  90. "updated_at": "2015-12-16T02:20:50.513318Z"
  91. },
  92. {
  93. "app": {
  94. "id": "52e4cac9-3e4a-42ab-8b87-b714403aafc6",
  95. "name": "dashboard",
  96. "meta": null
  97. },
  98. "release": {
  99. "id": "93f1f03e-30c4-4c1f-8c4b-7c0c7e295421",
  100. "artifact": "ec791440-fa5b-4d8e-903a-94999f634ea1",
  101. "env": {
  102. "APP_NAME": "dashboard",
  103. "CA_CERT": "-----BEGIN CERTIFICATE-----\nMIIDBDCCAe6gAwIBAgIRAP6BP9TQKrq0l1CCcSI4gb4wCwYJKoZIhvcNAQELMC0x\nDjAMBgNVBAoTBUZseW5uMRswGQYDVQQLExJGbHlubiBFcGhlbWVyYWwgQ0EwHhcN\nMTUxMjE2MDIyMDQxWhcNMjAxMjE0MDIyMDQxWjAtMQ4wDAYDVQQKEwVGbHlubjEb\nMBkGA1UECxMSRmx5bm4gRXBoZW1lcmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\nAQ8AMIIBCgKCAQEAn+KUccUSVeWoJZTlOxqaiXacGECGAPETxfmnL9ep1rA/4DWi\n2OTpZoeSFdyL1yV5KJxPkq6XMNyl/BR72SOomCmoFRnZzDih//+gfuJAFVGaF1j9\nFOIX+VyO8jyFzqk2vZg9R+ncRyFgjEgpHn0gDdt4WLWDxPpfFMClEZU6Mpu02ngj\n1kmlNgzajl71qhhKtrv3W7ACKh6O3fMSBg4n/ZiVnVQjdkejHskV5R43FH4bpZzP\nhb82rI6FNBNOCKqwbQ/AdGGVvJSzXPypvzCMkGghhx8pckoZw7DONXhSojfIO6Kt\nlxUYO1Odmnb+nyJjxGyidSperhfm+CuSFPn2BwIDAQABoyMwITAOBgNVHQ8BAf8E\nBAMCAAYwDwYDVR0TAQH/BAUwAwEB/zALBgkqhkiG9w0BAQsDggEBAGvEqq1ko+pE\nS5RBHmTWW6mJom9rA+aii9n88lMhbdjikeVFkQkH6Qi8zR5O4hCdDUC4qYUp+rIF\nZ4XZ9Ogl4CcR1gEPGu1KX2EnjVKloS1LThugCuP5YJgQ5qoMsQs681s1ZpPd/0gh\ntjASQy1Y72wY1SxVWqJzkuzf8mMDg52I4wwD9Eif2zq1/+sJa9mdilhvd0Wp+hDV\n6qN6xbH65V2VKwDrkD2p7CIn3NmknYhmw+obezqRkSl6N5Is/QPVg59bOu0evWfS\nDyaOehm1EmmRVehNj8IR0noFwUMbIASnpTescLd4Nz9pEjbgHQ+m6Swe8hnaZ3dd\n1TvxABm/4VY=\n-----END CERTIFICATE-----\n",
  104. "CONTROLLER_DOMAIN": "controller.dev.localflynn.com",
  105. "CONTROLLER_KEY": "s3cr3t",
  106. "DEFAULT_ROUTE_DOMAIN": "dev.localflynn.com",
  107. "LOGIN_TOKEN": "c8414bceb41bd679535c76f87472a8c2",
  108. "SECURE_COOKIES": "true",
  109. "SESSION_SECRET": "f180d52702a70f23a5eb6b1d87d5ab3a",
  110. "URL": "https://dashboard.dev.localflynn.com"
  111. },
  112. "processes": {
  113. "web": {
  114. "ports": [
  115. {
  116. "port": 80,
  117. "proto": "tcp",
  118. "service": {
  119. "name": "dashboard-web",
  120. "create": true,
  121. "check": {
  122. "type": "http",
  123. "status.omitempty": 0
  124. }
  125. }
  126. }
  127. ],
  128. "resources": {
  129. "max_fd": {
  130. "request": 10000,
  131. "limit": 10000
  132. },
  133. "memory": {
  134. "request": 1073741824,
  135. "limit": 1073741824
  136. }
  137. }
  138. }
  139. }
  140. },
  141. "artifact": {
  142. "id": "ec791440-fa5b-4d8e-903a-94999f634ea1",
  143. "type": "docker",
  144. "uri": "https://dl.flynn.io/tuf?name=flynn/dashboard&id=d602235982d4d3e4a75253aae15f5ced25d2a6b3585518b644788ac5f0f943ec"
  145. },
  146. "processes": {
  147. "web": 1
  148. },
  149. "updated_at": "2015-12-16T02:20:50.47223Z"
  150. },
  151. {
  152. "app": {
  153. "id": "3ccdfb02-1dfb-4148-9ade-caa9ac918947",
  154. "name": "logaggregator",
  155. "meta": null
  156. },
  157. "release": {
  158. "id": "d755489a-89ce-4c8c-b717-73d5589bab41",
  159. "artifact": "08d14942-65c0-456e-b1ef-e7d46717dcd4",
  160. "processes": {
  161. "app": {
  162. "cmd": [
  163. "-logaddr",
  164. ":514",
  165. "-apiaddr",
  166. ":80"
  167. ],
  168. "ports": [
  169. {
  170. "port": 80,
  171. "proto": "tcp"
  172. },
  173. {
  174. "port": 514,
  175. "proto": "tcp"
  176. }
  177. ],
  178. "resources": {
  179. "max_fd": {
  180. "request": 10000,
  181. "limit": 10000
  182. },
  183. "memory": {
  184. "request": 1073741824,
  185. "limit": 1073741824
  186. }
  187. }
  188. }
  189. }
  190. },
  191. "artifact": {
  192. "id": "08d14942-65c0-456e-b1ef-e7d46717dcd4",
  193. "type": "docker",
  194. "uri": "https://dl.flynn.io/tuf?name=flynn/logaggregator&id=cd30beb1606288f61eae7a4fe83ad3652689e644d9bb3e8bc10ca22d8ca0652b"
  195. },
  196. "processes": {
  197. "app": 1
  198. },
  199. "updated_at": "2015-12-16T02:20:50.392915Z"
  200. },
  201. {
  202. "app": {
  203. "id": "86750e3a-927f-4146-8651-4c8b7cc2de01",
  204. "name": "gitreceive",
  205. "meta": null
  206. },
  207. "release": {
  208. "id": "ea333a70-5971-467a-ba92-1d2e724db07f",
  209. "artifact": "1a5bf802-3337-48b3-b812-b994f1cde371",
  210. "env": {
  211. "CONTROLLER_KEY": "s3cr3t",
  212. "SLUGBUILDER_IMAGE_URI": "https://dl.flynn.io/tuf?name=flynn/slugbuilder&id=304a939ca74764b7e356133d7559cc245207deca8c65e782d4a043f14a566cae",
  213. "SLUGRUNNER_IMAGE_URI": "https://dl.flynn.io/tuf?name=flynn/slugrunner&id=dc1dadc66c31a1957bad101a22c4b607b2dd4f8f42ae5593ec28f3eef45e7b97"
  214. },
  215. "processes": {
  216. "app": {
  217. "ports": [
  218. {
  219. "port": 0,
  220. "proto": "tcp",
  221. "service": {
  222. "name": "gitreceive",
  223. "create": true
  224. }
  225. }
  226. ],
  227. "resources": {
  228. "max_fd": {
  229. "request": 10000,
  230. "limit": 10000
  231. },
  232. "memory": {
  233. "request": 1073741824,
  234. "limit": 1073741824
  235. }
  236. }
  237. }
  238. }
  239. },
  240. "artifact": {
  241. "id": "1a5bf802-3337-48b3-b812-b994f1cde371",
  242. "type": "docker",
  243. "uri": "https://dl.flynn.io/tuf?name=flynn/gitreceive&id=426e13b19a91af29a373f59d7edae7e54fe9d035961738d342e4b2c001027cde"
  244. },
  245. "processes": {
  246. "app": 1
  247. },
  248. "updated_at": "2015-12-16T02:20:47.071423Z"
  249. },
  250. {
  251. "app": {
  252. "id": "aaae4e4b-dc79-4753-bc99-71e40c7d24dd",
  253. "name": "router",
  254. "meta": null
  255. },
  256. "release": {
  257. "id": "c8268dcf-8f16-48e5-9c40-797a399dac99",
  258. "artifact": "48953db6-1c0a-4af2-b687-7fe6971fcf84",
  259. "env": {
  260. "COOKIE_KEY": "7AaXi7KZDeWu4FotDN+7wi6RbHWywW6ClN2qap78cSg=",
  261. "DATABASE_URL": "postgres://975487bc5a45fc80ade5765db668d873:46aabd4df6f39a1a23e63d9a76dece78@leader.postgres.discoverd:5432/6e63ce03061c8788f766994d9a9be92a",
  262. "FLYNN_POSTGRES": "postgres",
  263. "PGDATABASE": "6e63ce03061c8788f766994d9a9be92a",
  264. "PGHOST": "leader.postgres.discoverd",
  265. "PGPASSWORD": "46aabd4df6f39a1a23e63d9a76dece78",
  266. "PGUSER": "975487bc5a45fc80ade5765db668d873",
  267. "TLSCERT": "-----BEGIN CERTIFICATE-----\nMIIDSjCCAjSgAwIBAgIQDH8zACle7B+pqJB3QfwthDALBgkqhkiG9w0BAQswLTEO\nMAwGA1UEChMFRmx5bm4xGzAZBgNVBAsTEkZseW5uIEVwaGVtZXJhbCBDQTAeFw0x\nNTEyMTYwMjIwNDJaFw0yMDEyMTQwMjIwNDJaMC0xDjAMBgNVBAoTBUZseW5uMRsw\nGQYDVQQDExJkZXYubG9jYWxmbHlubi5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB\nDwAwggEKAoIBAQC3NsEp+fYsbgr94cOBVnSK3ZcHBobwcCdzNvNqh6y1V9wn7x4C\nS6Rk0pn1Zz/FS1F+uA8KMVUzwWCCSl/jW4BNAqbLbVi4I5oap8mCDQDt+MDPZyn5\noOCn6vj5OCJXva3RmhJRocF88oXcH4lXWUyfKMOb+0/+tRC7lg5gqBxnvkiJrW7D\nyq0+FoZViBgrN3JcxAgWFx9FK8sITzWpgPqJvJiS4Ry54o8hBTQCKyFCHTwdoufd\nKyBwm6tNn/KLhUXcAEsBD3qvdI0AEX9rssGxVErCualgPaBAvDCFz2H+wwvKnHpK\nCcwIflE04YYOjCHphq9j7FIzd5/+fp0Ng53pAgMBAAGjajBoMA4GA1UdDwEB/wQE\nAwIAoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMDMGA1UdEQQs\nMCqCEmRldi5sb2NhbGZseW5uLmNvbYIUKi5kZXYubG9jYWxmbHlubi5jb20wCwYJ\nKoZIhvcNAQELA4IBAQAIR7k3teJZ5c2eLUlcfLSZiigz+RaZeqxHHt6fZXA9P9XS\n+m8NSIUffdfOXaXjokYTYc91RqGhxVGUUopEA7P64QkEJRpu4qcfq6CXxDoExyf5\ncumrzrBZmTvExqlGBbyviz7T4c7IZAe0U3zYCoaVd1Ss84mY8DA37oqM2Y1pH7Tc\nzwBprXDqAfwt70xoYFWQZoK6SbS+qCQkc+0K9HW0ZzGRwqMTbAoPOTn9D2c9f9o5\nuM9KkiTuvY3T1Kimb848IVvhBfEofeHXZspc9HWqfLJM8wIpMJCaDwcDBN+yFku6\nqqaRa9SXkZLNrB+eCqsVOUzBsmK+sgUL6jmM+Pfc\n-----END CERTIFICATE-----\n",
  268. "TLSKEY": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAtzbBKfn2LG4K/eHDgVZ0it2XBwaG8HAnczbzaoestVfcJ+8e\nAkukZNKZ9Wc/xUtRfrgPCjFVM8Fggkpf41uATQKmy21YuCOaGqfJgg0A7fjAz2cp\n+aDgp+r4+TgiV72t0ZoSUaHBfPKF3B+JV1lMnyjDm/tP/rUQu5YOYKgcZ75Iia1u\nw8qtPhaGVYgYKzdyXMQIFhcfRSvLCE81qYD6ibyYkuEcueKPIQU0AishQh08HaLn\n3SsgcJurTZ/yi4VF3ABLAQ96r3SNABF/a7LBsVRKwrmpYD2gQLwwhc9h/sMLypx6\nSgnMCH5RNOGGDowh6YavY+xSM3ef/n6dDYOd6QIDAQABAoIBAGEZTsRdal9frsmg\n1gl89WUHTVx21BsnhXDlZZpG73xoZRBxBPl4d1bL2raZks2QPk+nYqknPh2g1fIX\nUrxfKR8nUZisigGFNM39sKkRFTYJyL3i0fcvkQDNYkhKvMC9kRptylmjHbWHnvPr\nbtFxTU9ovkqzpVC7S3Pvcg0961f7NgUqM5bfzWlgZYDATtNTpngc6/8bUgG8xhdL\nLsfd84FJcC/0k09Gxu5GPuwvcws1Iag39+Rkz2G9KmOEnN8dywLLedWPQ8A6fIjP\ngSSYTPWRBEF7V6/yRb7a0z1M+SJUrA0vDYJsa2P2ry0YslJi1O9ipOeBmmCddVjN\n21SywoECgYEA45mlj46ySdKhB7iRDaD+M1Ffo9vaCniGjZxEH+sPWXet3gr/hTGN\nmsQngU66v/Gj6clTSOlkOImQHT7Q0/GeHTDEAVEXJNTX8NllElJe6LjOUyqc7kUN\n/zASp3YOHWVC8y3cNy8ScydUhO5hkaVJcpqO0RWxnWnqV6m2OOtcyvkCgYEAzhNA\ntxEpP/7qMz2/Kx7LflRXtMAIfecIlLmq4mw0pnMCebCCXOp7/Lw7VOLIz1JfzGtW\n2b6BTspzbTW16rjedA65+Pj/EdmXxtL7KIfDlnmab7cSQ3Vi/Tmbza4Z+etZ8Yy2\nRwA2Ni8IPS2y8NukcAJH+fGjIAbS/FqgR6KJtnECgYB955scpRWfnPMTsFgdr/ev\nL862eIJP1Iiqgc110rS1C22VLYRYjCcHfIdWEtVgJS5Fv+dgqCuW0xJz+zHObRTI\nlRd4mwEwkMW8KKau0f5KwyDwBNy3OmAZ0OAg3z/Dpya4G6B8rn+IUDODLdOvnD3b\nNgDXTSbqK5NFV07Egf7dEQKBgHdthvrRckOJW3dY2JqH3U0YWkABbqpwo3N16sgQ\nB69TReL6XYK1zidZe1UlnVUxmx1gM9Q7aLsd7ykikIw4mYtPIY5d140juqdajH4f\nuEVTsiH+ShJYTIcOxPG9bYZ+VAD+GIEraT+boD28Z1DZKgJUABylYnFkIxBnAS6i\nzwaxAoGAa3TWYsK0VUrn1EwlI9zzCLW8myjzyPLgpEQ6264ETNSw4K42M2fthcS4\nzlVMrPJ5yhftxCkxbXNFp74lt5Nhryv9K3RWdnL6aXoxR4juhfXBPUBPK+bk/g6F\nohfHj/PeDJFBe0MWC1Q4x7jbeHgqXQ9q7mun+9xH8ZziMdknHc4=\n-----END RSA PRIVATE KEY-----\n"
  269. },
  270. "processes": {
  271. "app": {
  272. "cmd": [
  273. "-http-port",
  274. "80",
  275. "-https-port",
  276. "443",
  277. "-tcp-range-start",
  278. "3000",
  279. "-tcp-range-end",
  280. "3500"
  281. ],
  282. "omni": true,
  283. "host_network": true,
  284. "resources": {
  285. "max_fd": {
  286. "request": 10000,
  287. },
  288. "memory": {
  289. "request": 1073741824,
  290. "limit": 1073741824
  291. }
  292. }
  293. }
  294. }
  295. },
  296. "artifact": {
  297. "id": "48953db6-1c0a-4af2-b687-7fe6971fcf84",
  298. "type": "docker",
  299. "uri": "https://dl.flynn.io/tuf?name=flynn/router&id=35dd76cf940ed67fdb4f373f79fc79dda327a0fb36d3dffb3894cb5f981b4a21"
  300. },
  301. "processes": {
  302. "app": 1
  303. },
  304. "updated_at": "2015-12-16T02:20:47.037485Z"
  305. },
  306. {
  307. "app": {
  308. "id": "0b5fb9b4-af2b-462e-aaca-cc64591573e5",
  309. "name": "blobstore",
  310. "meta": null
  311. },
  312. "release": {
  313. "id": "53815de9-8a78-4ab1-909e-a465242f57e7",
  314. "artifact": "a436a3d6-a2c5-430e-961d-96518dacddff",
  315. "env": {
  316. "DATABASE_URL": "postgres://8a4906b3587c5faabef321d34936ac3a:6ac0c933a4abba2a2f8ec0e87ccb8f68@leader.postgres.discoverd:5432/d2f1b01c72f997dc2dbc0e1bc6c4c6ec",
  317. "FLYNN_POSTGRES": "postgres",
  318. "PGDATABASE": "d2f1b01c72f997dc2dbc0e1bc6c4c6ec",
  319. "PGHOST": "leader.postgres.discoverd",
  320. "PGPASSWORD": "6ac0c933a4abba2a2f8ec0e87ccb8f68",
  321. "PGUSER": "8a4906b3587c5faabef321d34936ac3a"
  322. },
  323. "processes": {
  324. "web": {
  325. "ports": [
  326. {
  327. "port": 80,
  328. "proto": "tcp"
  329. }
  330. ],
  331. "resources": {
  332. "max_fd": {
  333. "request": 10000,
  334. "limit": 10000
  335. },
  336. "memory": {
  337. "request": 1073741824,
  338. "limit": 1073741824
  339. }
  340. }
  341. }
  342. }
  343. },
  344. "artifact": {
  345. "id": "a436a3d6-a2c5-430e-961d-96518dacddff",
  346. "type": "docker",
  347. "uri": "https://dl.flynn.io/tuf?name=flynn/blobstore&id=8b27756a551d5dd5e29181209b842c71288494d2fd7aded04fe7608c74bf4f9c"
  348. },
  349. "processes": {
  350. "web": 1
  351. },
  352. "updated_at": "2015-12-16T02:20:46.608041Z"
  353. },
  354. {
  355. "app": {
  356. "id": "f7064b9f-c968-4f16-be0e-f2efd1b2c7b7",
  357. "name": "controller",
  358. "meta": null
  359. },
  360. "release": {
  361. "id": "9afcffd7-6278-47c9-a2f0-1326b42b4a03",
  362. "artifact": "c8400666-26d9-493f-9630-3d34045f8498",
  363. "env": {
  364. "AUTH_KEY": "s3cr3t",
  365. "CA_CERT": "-----BEGIN CERTIFICATE-----\nMIIDBDCCAe6gAwIBAgIRAP6BP9TQKrq0l1CCcSI4gb4wCwYJKoZIhvcNAQELMC0x\nDjAMBgNVBAoTBUZseW5uMRswGQYDVQQLExJGbHlubiBFcGhlbWVyYWwgQ0EwHhcN\nMTUxMjE2MDIyMDQxWhcNMjAxMjE0MDIyMDQxWjAtMQ4wDAYDVQQKEwVGbHlubjEb\nMBkGA1UECxMSRmx5bm4gRXBoZW1lcmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\nAQ8AMIIBCgKCAQEAn+KUccUSVeWoJZTlOxqaiXacGECGAPETxfmnL9ep1rA/4DWi\n2OTpZoeSFdyL1yV5KJxPkq6XMNyl/BR72SOomCmoFRnZzDih//+gfuJAFVGaF1j9\nFOIX+VyO8jyFzqk2vZg9R+ncRyFgjEgpHn0gDdt4WLWDxPpfFMClEZU6Mpu02ngj\n1kmlNgzajl71qhhKtrv3W7ACKh6O3fMSBg4n/ZiVnVQjdkejHskV5R43FH4bpZzP\nhb82rI6FNBNOCKqwbQ/AdGGVvJSzXPypvzCMkGghhx8pckoZw7DONXhSojfIO6Kt\nlxUYO1Odmnb+nyJjxGyidSperhfm+CuSFPn2BwIDAQABoyMwITAOBgNVHQ8BAf8E\nBAMCAAYwDwYDVR0TAQH/BAUwAwEB/zALBgkqhkiG9w0BAQsDggEBAGvEqq1ko+pE\nS5RBHmTWW6mJom9rA+aii9n88lMhbdjikeVFkQkH6Qi8zR5O4hCdDUC4qYUp+rIF\nZ4XZ9Ogl4CcR1gEPGu1KX2EnjVKloS1LThugCuP5YJgQ5qoMsQs681s1ZpPd/0gh\ntjASQy1Y72wY1SxVWqJzkuzf8mMDg52I4wwD9Eif2zq1/+sJa9mdilhvd0Wp+hDV\n6qN6xbH65V2VKwDrkD2p7CIn3NmknYhmw+obezqRkSl6N5Is/QPVg59bOu0evWfS\nDyaOehm1EmmRVehNj8IR0noFwUMbIASnpTescLd4Nz9pEjbgHQ+m6Swe8hnaZ3dd\n1TvxABm/4VY=\n-----END CERTIFICATE-----\n",
  366. "DATABASE_URL": "postgres://df60a79e03b92c3157aaad47dab10278:623f1831ed89cd811ea1da0fb985bd81@leader.postgres.discoverd:5432/33c5b220c9eed7307d65a2b367236d10",
  367. "DEFAULT_ROUTE_DOMAIN": "dev.localflynn.com",
  368. "FLYNN_POSTGRES": "postgres",
  369. "NAME_SEED": "e53b1785be43a8569707",
  370. "PGDATABASE": "33c5b220c9eed7307d65a2b367236d10",
  371. "PGHOST": "leader.postgres.discoverd",
  372. "PGPASSWORD": "623f1831ed89cd811ea1da0fb985bd81",
  373. "PGUSER": "df60a79e03b92c3157aaad47dab10278"
  374. },
  375. "processes": {
  376. "scheduler": {
  377. "cmd": [
  378. "scheduler"
  379. ],
  380. "ports": [
  381. "port": 0,
  382. "proto": "tcp"
  383. }
  384. ],
  385. "omni": true,
  386. "service": "controller-scheduler",
  387. "resurrect": true,
  388. "resources": {
  389. "max_fd": {
  390. "request": 10000,
  391. "limit": 10000
  392. },
  393. "memory": {
  394. "request": 1073741824,
  395. "limit": 1073741824
  396. }
  397. }
  398. },
  399. "web": {
  400. "cmd": [
  401. "controller"
  402. ],
  403. "ports": [
  404. {
  405. "port": 80,
  406. "proto": "tcp"
  407. }
  408. ],
  409. "resurrect": true,
  410. "resources": {
  411. "max_fd": {
  412. "request": 10000,
  413. "limit": 10000
  414. },
  415. "memory": {
  416. "request": 1073741824,
  417. "limit": 1073741824
  418. }
  419. }
  420. },
  421. "worker": {
  422. "cmd": [
  423. "worker"
  424. ],
  425. "ports": [
  426. {
  427. "port": 0,
  428. "proto": "tcp"
  429. }
  430. ],
  431. "resources": {
  432. "max_fd": {
  433. "request": 10000,
  434. "limit": 10000
  435. },
  436. "memory": {
  437. "request": 1073741824,
  438. "limit": 1073741824
  439. }
  440. }
  441. }
  442. }
  443. },
  444. "artifact": {
  445. "id": "c8400666-26d9-493f-9630-3d34045f8498",
  446. "type": "docker",
  447. "uri": "https://dl.flynn.io/tuf?name=flynn/controller&id=38242063cc75f2f6e3cfc15ce44899d103191c0be9b11403e44ee4bf4749db72"
  448. },
  449. "processes": {
  450. "scheduler": 1,
  451. "web": 1,
  452. "worker": 1
  453. },
  454. "updated_at": "2015-12-16T02:20:44.205169Z"
  455. },
  456. {
  457. "app": {
  458. "id": "4940a4fe-3acc-4be7-aa97-7c3f982ba552",
  459. "name": "discoverd",
  460. "meta": null
  461. },
  462. "release": {
  463. "id": "dd6a3a63-a920-4954-8a0b-7f6e9e4e1b79",
  464. "artifact": "b2b4c646-aef0-4b3b-a501-cd282c31299e",
  465. "env": {
  466. "DISCOVERD": "none",
  467. "DISCOVERD_PEERS": "10.0.2.15:1111,"
  468. },
  469. "processes": {
  470. "app": {
  471. "ports": [
  472. {
  473. "port": 1111,
  474. "proto": "tcp"
  475. },
  476. {
  477. "port": 53,
  478. "proto": "tcp"
  479. }
  480. ],
  481. "data": true,
  482. "omni": true,
  483. "host_network": true,
  484. "service": "discoverd",
  485. "resurrect": true,
  486. "resources": {
  487. "max_fd": {
  488. "request": 10000,
  489. "limit": 10000
  490. },
  491. "memory": {
  492. "request": 1073741824,
  493. "limit": 1073741824
  494. }
  495. }
  496. }
  497. }
  498. },
  499. "artifact": {
  500. "id": "b2b4c646-aef0-4b3b-a501-cd282c31299e",
  501. "type": "docker",
  502. "uri": "https://dl.flynn.io/tuf?name=flynn/discoverd&id=da0bd1401a6df09efb904a852992cd3a19b657223347bad6b427350e52c254a4"
  503. },
  504. "processes": {
  505. "app": 1
  506. },
  507. "updated_at": "2015-12-16T02:20:44.193653Z"
  508. },
  509. {
  510. "app": {
  511. "id": "291b591e-ea67-4393-9dd8-f8b8f79ea34c",
  512. "name": "flannel",
  513. "meta": null
  514. },
  515. "release": {
  516. "id": "ce17ef61-be09-4f60-b12d-d8aa87eb0a82",
  517. "artifact": "172410eb-4e75-4597-a366-efe596b0af27",
  518. "env": {
  519. "DISCOVERD": "none"
  520. },
  521. "processes": {
  522. "app": {
  523. "ports": [
  524. {
  525. "port": 5002,
  526. "proto": "tcp"
  527. }
  528. ],
  529. "omni": true,
  530. "host_network": true,
  531. "resurrect": true,
  532. "resources": {
  533. "max_fd": {
  534. "request": 10000,
  535. "limit": 10000
  536. },
  537. "memory": {
  538. "request": 1073741824,
  539. "limit": 1073741824
  540. }
  541. }
  542. }
  543. }
  544. },
  545. "artifact": {
  546. "id": "172410eb-4e75-4597-a366-efe596b0af27",
  547. "type": "docker",
  548. "uri": "https://dl.flynn.io/tuf?name=flynn/flannel&id=7d6c9acf4dc854210cc753c6a8c889899200b35fd45f50fb35d1bb9189c92510"
  549. },
  550. "processes": {
  551. "app": 1
  552. },
  553. "updated_at": "2015-12-16T02:20:44.170687Z"
  554. },
  555. {
  556. "app": {
  557. "id": "2b18fac0-cb75-4243-ba0e-1a96d5e2ddda",
  558. "name": "postgres",
  559. "meta": null
  560. },
  561. "release": {
  562. "id": "6244ff18-44a3-4db1-a0d4-ceab0abded24",
  563. "artifact": "e3e69c33-dd0c-4381-b9a9-30cf0c417ce7",
  564. "env": {
  565. "FLYNN_POSTGRES": "postgres",
  566. "PGDATABASE": "postgres",
  567. "PGHOST": "leader.postgres.discoverd",
  568. "PGPASSWORD": "2b12bf3d5a0bfae0ed5723947e21af7b",
  569. "PGUSER": "flynn"
  570. },
  571. "processes": {
  572. "postgres": {
  573. "cmd": [
  574. "postgres"
  575. ],
  576. "env": {
  577. "SINGLETON": "true"
  578. },
  579. "ports": [
  580. {
  581. "port": 5432,
  582. "proto": "tcp"
  583. }
  584. ],
  585. "data": true,
  586. "service": "postgres",
  587. "resurrect": true,
  588. "resources": {
  589. "max_fd": {
  590. "request": 10000,
  591. "limit": 10000
  592. },
  593. "memory": {
  594. "request": 1073741824,
  595. "limit": 1073741824
  596. }
  597. }
  598. },
  599. "web": {
  600. "cmd": [
  601. "api"
  602. ],
  603. "ports": [
  604. {
  605. "port": 80,
  606. "proto": "tcp"
  607. }
  608. ],
  609. "resources": {
  610. "max_fd": {
  611. "request": 10000,
  612. "limit": 10000
  613. },
  614. "memory": {
  615. "request": 1073741824,
  616. "limit": 1073741824
  617. }
  618. }
  619. }
  620. }
  621. },
  622. "artifact": {
  623. "id": "e3e69c33-dd0c-4381-b9a9-30cf0c417ce7",
  624. "type": "docker",
  625. "uri": "https://dl.flynn.io/tuf?name=flynn/postgresql&id=7447010d0a300f45d6785bb6cef4858500821d7afcb8febaabefbe55bf03fd0f"
  626. },
  627. "processes": {
  628. "postgres": 1,
  629. "web": 1
  630. },
  631. "updated_at": "2015-12-16T02:20:44.152134Z"
  632. ]

部署

https://flynn.io/schema/controller/deployment#

属性 类型 描述
id uuid string 唯一标示
app uuid string 唯一标示
old_release object 唯一标示
new_release date-time string 唯一标示
status date-time string pending running complete failed
strategy uuid string all-at-once one-by-one postgres discoverd-meta
processes uuid string 每种进程运行的进程数
deploy_timeout integer 部署超时时间(默认30秒)
created_at date-time string 对象的创建时间
finished_at date-time string
name string null
url url string null

实例:—————————————————————请求————————————————————

POST /apps/7406a4d71a0c43d3ac4b39f006cb0342/deploy HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json
{
  "id": "40202cf3b0e946a4b2c4db42a0c14194"
}
Content-Type: application/json

获取部署

实例:—————————————————————请求————————————————————

GET /deployments/aab1ee14-776d-4ba4-979b-1b4bda2d9b35 HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": "aab1ee14-776d-4ba4-979b-1b4bda2d9b35",
  "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
  "old_release": "47154f8c-a604-469d-ae6a-e431990ddee8",
  "new_release": "77e9e956-ecf9-427f-a031-222c2f394fb8",
  "strategy": "all-at-once",
  "status": "pending",
  "processes": {
    "foo": 1
  },
  "deploy_timeout": 30,
  "created_at": "2015-12-16T02:21:16.782263Z"
}

列出所有部署

实例:—————————————————————请求————————————————————

GET /apps/adcccdb4-b1a4-4209-a03a-762f4e021632/deployments HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
[
  {
    "id": "aab1ee14-776d-4ba4-979b-1b4bda2d9b35",
    "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
    "old_release": "47154f8c-a604-469d-ae6a-e431990ddee8",
    "new_release": "77e9e956-ecf9-427f-a031-222c2f394fb8",
    "strategy": "all-at-once",
    "status": "pending",
    "processes": {
      "foo": 1
    },
    "deploy_timeout": 30,
    "created_at": "2015-12-16T02:21:16.782263Z"
  }
]

新任务

新任务描述了一个所需流程配置

运行任务

实例:—————————————————————请求————————————————————

POST /apps/7406a4d71a0c43d3ac4b39f006cb0342/jobs HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json
{
  "release": "40202cf3b0e946a4b2c4db42a0c14194",
  "cmd": [
    "echo",
    "$BODY"
  ],
  "env": {
    "BODY": "Hello!"
  }
}

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": "flynn-cef74685c83b47889c69fa95451e75b3",
  "release": "40202cf3b0e946a4b2c4db42a0c14194",
  "cmd": [
    "echo",
    "$BODY"
  ]
}

任务

一个任务就是容器中的一个单进程。https://flynn.io/schema/controller/job#

属性 类型 描述
id uuid string 唯一标示
app uuid string 唯一标示
release uuid string 唯一标示
type string 进程类型名字
state string 客户端指定元数据
cmd array of strings shell命令
meta object 客户端指定元数据
exit_status integer 任务退出状态
created_at date-time string 对象创建时间
updated_at date-time string 对象最新更新时间

获取任务列表

实例:—————————————————————请求————————————————————

GET /apps/7406a4d71a0c43d3ac4b39f006cb0342/jobs HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/jsonb
[
  {
    "id": "flynn-68940e0fe9664ce0b369baaeb10b4cc4",
    "app": "7406a4d71a0c43d3ac4b39f006cb0342",
    "release": "40202cf3b0e946a4b2c4db42a0c14194",
    "type": "foo",
    "state": "starting",
    "created_at": "2015-01-29T18:53:28.595924Z",
    "updated_at": "2015-01-29T18:53:28.595924Z"
  },
  {
    "id": "flynn-cef74685c83b47889c69fa95451e75b3",
    "app": "7406a4d71a0c43d3ac4b39f006cb0342",
    "release": "40202cf3b0e946a4b2c4db42a0c14194",
    "state": "starting",
    "created_at": "2015-01-29T18:53:27.81058Z",
    "updated_at": "2015-01-29T18:53:27.81058Z"
  },
  {
    "id": "flynn-c96be7a9527047e4b11e3c19d3bef904",
    "app": "7406a4d71a0c43d3ac4b39f006cb0342",
    "release": "689ce5b9ad1541ab975d51cba1e051d0",
    "type": "foo",
    "state": "crashed",
    "created_at": "2015-01-29T18:53:26.933346Z",
    "updated_at": "2015-01-29T18:53:27.954494Z"
  }
]

更新任务

实例:—————————————————————请求————————————————————

PUT /apps/7406a4d71a0c43d3ac4b39f006cb0342/jobs/flynn-cef74685c83b47889c69fa95451e75b3 HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/
{
  "id": "flynn-cef74685c83b47889c69fa95451e75b3",
  "app": "7406a4d71a0c43d3ac4b39f006cb0342",
  "release": "40202cf3b0e946a4b2c4db42a0c14194",
  "state": "down"
}

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": "flynn-cef74685c83b47889c69fa95451e75b3",
  "app": "7406a4d71a0c43d3ac4b39f006cb0342",
  "release": "40202cf3b0e946a4b2c4db42a0c14194",
  "state": "down",
  "created_at": "2015-01-29T18:53:27.81058Z",
  "updated_at": "2015-01-29T18:53:28.723854Z"
}

获取任务

实例:—————————————————————请求————————————————————

GET /apps/adcccdb4-b1a4-4209-a03a-762f4e021632/jobs/host-40cc2d07-7a48-4fda-9790-ba9768a3f616 HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": "host-40cc2d07-7a48-4fda-9790-ba9768a3f616",
  "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
  "release": "77e9e956-ecf9-427f-a031-222c2f394fb8",
  "state": "down",
  "created_at": "2015-12-16T02:21:16.799294Z",
  "updated_at": "2015-12-16T02:21:16.811094Z"
}

删除任务

实例:—————————————————————请求————————————————————

DELETE /apps/7406a4d71a0c43d3ac4b39f006cb0342/jobs/flynn-cef74685c83b47889c69fa95451e75b3 HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: text/plain; charset=utf-8

属性 类型 描述
port integer null
proto string tcp udp

进程类型

https://flynn.io/schema/controller/process_type#

属性 类型 描述
cmd array of strings shell命令
env object 环境变量
entrypoint array of strings null
ports array of objects null
ports[].port integer null
ports[].proto string null
data boolean null
omni boolean null

提供程序

属性 类型 描述
id uuid string 唯一标识符
created_at date-time string 对象的创建时间戳
updated_at date-time string 对象最后更新的时间戳
name string null
url uri string null

创建提供程序

实例:—————————————————————请求————————————————————

POST /providers HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json
{
  "url": "http://example-provider-1422557608732167310.discoverd:12345/providers/1422557608732167310",
  "name": "example-provider-1422557608732167310"
}

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": "7277db2655e44b4ba7128ff5ff01a0ff",
  "url": "http://example-provider-1422557608732167310.discoverd:12345/providers/1422557608732167310",
  "name": "example-provider-1422557608732167310",
  "created_at": "2015-01-29T18:53:28.733018Z",
  "updated_at": "2015-01-29T18:53:28.733018Z"
}

获取提供程序

实例:—————————————————————请求————————————————————

GET /providers/7277db2655e44b4ba7128ff5ff01a0ff HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": "7277db2655e44b4ba7128ff5ff01a0ff",
  "url": "http://example-provider-1422557608732167310.discoverd:12345/providers/1422557608732167310",
  "name": "example-provider-1422557608732167310",
  "created_at": "2015-01-29T18:53:28.733018Z",
  "updated_at": "2015-01-29T18:53:28.733018Z"
}

获取提供程序列表

实例:—————————————————————请求————————————————————

GET /providers HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
[
  {
    "id": "7277db2655e44b4ba7128ff5ff01a0ff",
    "url": "http://example-provider-1422557608732167310.discoverd:12345/providers/1422557608732167310",
    "name": "example-provider-1422557608732167310",
    "created_at": "2015-01-29T18:53:28.733018Z",
    "updated_at": "2015-01-29T18:53:28.733018Z"
  },
  {
    "id": "d9ba709dc3e7413db3cba9b86e7cf325",
    "url": "http://pg-api.discoverd/databases",
    "name": "postgres",
    "created_at": "2015-01-29T18:53:20.031975Z",
    "updated_at": "2015-01-29T18:53:20.031975Z"
  }
]

版本

https://flynn.io/schema/controller/release#

属性 类型 描述
id uuid string 唯一标识
artifact uuid string 唯一标识
meta object 客户指定元数据
env object 环境变量
processes object
created_at object 对象的创建时间戳

获取应用初始化版本

实例:—————————————————————请求————————————————————

GET /apps/gitreceive/release HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": "8a9760deeba7486c987267196edd9032",
  "artifact": "74010365c551463386bae39cf4ad0a47",
  "processes": {
    "app": {
      "env": {
        "CONTROLLER_AUTH_KEY": "s3cr3t",
        "SLUGBUILDER_IMAGE_URI": "https://registry.hub.docker.com/flynn/slugbuilder?id=a4a8a9489eacbad331ced4ad5b4b63238c7592d42d30b04058aac914912344f3",
        "SLUGRUNNER_IMAGE_URI": "https://registry.hub.docker.com/flynn/slugrunner?id=039222f9884412eb0667988933caeb0ed06da28f71e3dff540a61d13d0d85ae0",
        "SSH_PRIVATE_KEYS": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAvVM5o2jcAO9qN/Bza+omOXxqJlPySHkxGEmpBBGOJ/thjF63\njrx4nsDAYB8x5fkVYNR4QPqIEfAAvvRAK1walOPrvPcrtp/TAD1csYYADIj11gs7\nD5VcNo46H9gc8Bw7ZQN+vB20/ZfhjdJHVVS3oi1co74rBIwEQq3FEQUTMEsLESJb\nzr4JqllKq4VsDHUqxEcIUVllnt0l/3Y1ou9kp2s0EGIzbGL8W0ku8V+PrG3/3iI9\n8eEQ043hawSrQTYY8zCQxQvss3GlKpMQDT4y14gS6gnD6F9Xf26ZOqVvkezshDtR\n8hrsSnaAB2JO3WCvu4101nE2Ahqm5SlogrL8rwIDAQABAoIBAG5b5wtEAophBK+a\n8A0FrkZwKYgyAtcQHfgkZ+tBOHZB6HjkdWc0obMYdIsTZAjECxwoffiSkWKzXhvx\nUL51r+D+gtnh0o9f1qUbH78zdy/XXkXowgKxc9ExUtxhI20rZ8vYH7YUMv5n3EjJ\nPF+XRHu6qXehUH4UCB++H1Nue+L3ulk9GViGO3/PXSbF0awVl3c2VKvgrGvMkgKP\nT+JH7KZj318m3DM+w4xGBpvhNAcTHf7+WXO+IToGect/be5aQ4dDycnp28Sb0vdR\nvgmMEMrP+AqkHiaduGWyXjWpLImdJoxqTZT9Y/XxIT4u9e4PEVcuC2QL0PinyY5C\nDSq20iECgYEA6dJaAcpeKMRcr4cVxogC6JUGjxIBK8YTZoowsfWjYMDsG92SP8Bg\nNT0QHFSDIzC+UB8SG705bRes+T2woqeTiwudikOKsEl4ey1NbAPc5o1JFqKv5M3V\nOeSeyOOviZMCKM2WksOE/T1P8vGcnHJyu7fc1/FRnJn/GiO1Negu+DkCgYEAz0ho\nxmDaq+ekkoYNkIQyVPgrT9v7u9V8A9fZ3O0wCcFQiTpQ7YhrwPkItfZZsm26BqkR\nOsj+78PQlX9iGLmIDvkmRV2FilG3tZhLFiLpOSiq9pQegbzDdThrWYpPNgDINkDs\nmOjK67Eb1anywVPpLCtCDWT87wgdQCI1cBosjCcCgYEAvcqsnH9y5oxc320606db\nFQbCCCeJI8rnvHe3Bvxn3QU7oXK8X1r7vLsP9K70sv/Buq89t55kmpR5JuZYFe8H\n5/lJqw0f6e/5B6LCEUcha1KLXQA43fPle9SCvnVx6q2VNyGJcx+ZNyUpW/2aLbMI\nRi7755xNrluhocoSMOuCFKECgYAA0OYoscTqnFTXhtOS2BJipz90ZwdMrAB6+2SO\nLBjeUPaCM8qRxNG3xsM0BC5CN5Bd6lh5BMWMKBcwH3pBYqmYdX6jE0UtUDkK6/iP\ns797TB+wLNEZ7aZPVdOGXLcHHWWsYQENcQ0rdF0JsEuWW0A1vk3aQ6WDQ2LqF7hi\nIpg+TQKBgQDalWyZwwbIYI8K6BB2wA8PkZV46egnLQCqaGmhPdJcdE7tBjmdTGgj\nVZ0d77Cxik08hsQofyXjB6zufih/zan4VV37pBgQ7SZFBgOEu8ScqMz1EpeVCFC3\nFvOUZ0ed0/mql57JqsYKJ3ZroKMAJZs0wLKYOLZ8N88fVNJdmWI16g==\n-----END RSA PRIVATE KEY-----\n-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFGhKRLx3WqbFxYc9RMwIaJK/xa7WWcj90p2q/3DTNdPoAoGCCqGSM49\nAwEHoUQDQgAE7m4eZSDcX7hJ0+iyv8m1t0f/BkQW6tBO3McnTYWjoU07JN/mxYlk\nAfiET9Yqq5viMFr2ydOKXGlVU5khmjiOnA==\n-----END EC PRIVATE KEY-----\n"
      },
      "ports": [
        {
          "port": 0,
          "proto": "tcp",
          "range_end": 0
        }
      ]
    }
  },
  "created_at": "2015-01-29T18:53:22.471286Z"
}

设置应用版本

实例:—————————————————————请求————————————————————

PUT /apps/7406a4d71a0c43d3ac4b39f006cb0342/release HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json
{
  "id": "689ce5b9ad1541ab975d51cba1e051d0"
}

—————————————————————响应————————————————————

Content-Type: application/json

获取应用版本

实例:—————————————————————请求————————————————————

GET /apps/7406a4d71a0c43d3ac4b39f006cb0342/release HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": "689ce5b9ad1541ab975d51cba1e051d0",
  "artifact": "4d365e6cdb1d47b8b98c9cd9a7b047fd",
  "env": {
    "some": "info"
  },
  "processes": {
    "foo": {
      "cmd": [
        "ls",
        "-l"
      ],
      "env": {
        "BAR": "baz"
      }
    }
  },
  "created_at": "2015-01-29T18:53:26.89224Z"
}

创建版本

实例:—————————————————————请求————————————————————

POST /releases HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json
{
  "artifact": "4d365e6cdb1d47b8b98c9cd9a7b047fd",
  "env": {
    "some": "info"
  },
  "processes": {
    "foo": {
      "cmd": [
        "ls",
        "-l"
      ],
      "env": {
        "BAR": "baz"
      }
    }
  }
}

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": "689ce5b9ad1541ab975d51cba1e051d0",
  "artifact": "4d365e6cdb1d47b8b98c9cd9a7b047fd",
  "env": {
    "some": "info"
  },
  "processes": {
    "foo": {
      "cmd": [
        "ls",
        "-l"
      ],
      "env": {
        "BAR": "baz"
      }
    }
  },
  "created_at": "2015-01-29T18:53:26.89224Z"
}

获取版本列表

实例:—————————————————————请求————————————————————

GET /releases HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
[
  {
    "id": "689ce5b9ad1541ab975d51cba1e051d0",
    "artifact": "4d365e6cdb1d47b8b98c9cd9a7b047fd",
    "env": {
      "some": "info"
    },
    "processes": {
      "foo": {
        "cmd": [
          "ls",
          "-l"
        ],
        "env": {
          "BAR": "baz"
        }
      }
    },
    "created_at": "2015-01-29T18:53:26.89224Z"
  },
  {
    "id": "258c9a2f43124c76b85ba24fa127dc3b",
    "artifact": "8b6548e25bc8477e905deee8a33eab2a",
    "env": {
      "APP_NAME": "dashboard",
      "CA_CERT": "-----BEGIN CERTIFICATE-----\nMIIC5DCCAc6gAwIBAgIRAL1sRMV4diGUf9Lztaw9/OkwCwYJKoZIhvcNAQELMB0x\nDjAMBgNVBAoTBUZseW5uMQswCQYDVQQLEwJDQTAeFw0xNTAxMjkxODUzMjNaFw0y\nMDAxMjgxODUzMjNaMB0xDjAMBgNVBAoTBUZseW5uMQswCQYDVQQLEwJDQTCCASIw\nDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJeMZ5RC7Aan+JImyIDEN4dfikjO\nr323YWPdYiLM7bi/o4x6Lp2+LOeeV+1Y7xky3gybuekBtNveEp6wHg3pqXCvAfxV\nQ4EGDXs0/9RyXNCgHsiDmnftB1OtmjPTZjtbgDWVhkJZcq1X6hlcTgD9rs1HOVmg\n7m/gPCa0avI30QTajb2/DBQbKIQovY7vcQLaPbhqknVK1WZoCnxDomT0ueFllD8h\n6p/sJ5qk/ZQF2WL8gL9elQOUm/K7jUjkfLbHN3hzx2QQgNqlTDKMgPApMri5UjUa\nnxdLoYOPiUj0QZmMyZkaYwG0cyGp/8MuEzY6F/dgSEt1gemS5lGI7s+TDNECAwEA\nAaMjMCEwDgYDVR0PAQH/BAQDAgAGMA8GA1UdEwEB/wQFMAMBAf8wCwYJKoZIhvcN\nAQELA4IBAQAjiAj10RbsCxzp0wp79g/BLRaYcypFWnjenn6aWUD2pvc7oK2n8XX1\nbhSym0O4aUlTbx1lc+N4R+MI/Hx83MPFEMXNoLGMnwZ+6IxYKuoXnqt6rFdm2kh4\nOUABwknyNx4jLFniAEIlPa+fcbHacgJtkxm85OpdW9kVrZU3Af7NaXl9u1TDJ0ww\nwtOlMRGBMByuKxU5zwXBz28rgmBIZ2F3w5guZxnNUDKuk8z9WIowJumB+DymDYxh\nSSAfL2jHwdDBeZK5XMmXRobWpf4oSm2z6Nx+0RWHms8tKTQXUDOlwLdMMho1jj/l\nJAvqe8tmpQBg90lc3bCCLmaeJG3nkfSA\n-----END CERTIFICATE-----\n",
      "CONTROLLER_DOMAIN": "controller.dev.localflynn.com",
      "CONTROLLER_KEY": "s3cr3t",
      "DEFAULT_ROUTE_DOMAIN": "dev.localflynn.com",
      "LOGIN_TOKEN": "a9b51e131d3f444074aa35425eb8fdc3",
      "SECURE_COOKIES": "true",
      "SESSION_SECRET": "4fd6d9c447b02a5e3b8d03ab818652d9",
      "STATIC_PATH": "/app",
      "URL": "https://dashboard.dev.localflynn.com"
    },
    "processes": {
      "web": {
        "ports": [
          {
            "port": 80,
            "proto": "tcp",
            "range_end": 0
          }
        ]
      }
    },
    "created_at": "2015-01-29T18:53:25.003718Z"
  },
  {
    "id": "b9aa14dd9fbe4ea6a06acd88da3b3c80",
    "artifact": "03f9d97aeab94f2b9bb23f4ade0eb270",
    "env": {
      "CONTROLLER_AUTH_KEY": "s3cr3t",
      "SLUGBUILDER_IMAGE_URI": "https://registry.hub.docker.com/flynn/slugbuilder?id=a4a8a9489eacbad331ced4ad5b4b63238c7592d42d30b04058aac914912344f3",
      "SLUGRUNNER_IMAGE_URI": "https://registry.hub.docker.com/flynn/slugrunner?id=039222f9884412eb0667988933caeb0ed06da28f71e3dff540a61d13d0d85ae0"
    },
    "created_at": "2015-01-29T18:53:24.986924Z"
  },
  {
    "id": "8a9760deeba7486c987267196edd9032",
    "artifact": "74010365c551463386bae39cf4ad0a47",
    "processes": {
      "app": {
        "env": {
          "CONTROLLER_AUTH_KEY": "s3cr3t",
          "SLUGBUILDER_IMAGE_URI": "https://registry.hub.docker.com/flynn/slugbuilder?id=a4a8a9489eacbad331ced4ad5b4b63238c7592d42d30b04058aac914912344f3",
          "SLUGRUNNER_IMAGE_URI": "https://registry.hub.docker.com/flynn/slugrunner?id=039222f9884412eb0667988933caeb0ed06da28f71e3dff540a61d13d0d85ae0",
          "SSH_PRIVATE_KEYS": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAvVM5o2jcAO9qN/Bza+omOXxqJlPySHkxGEmpBBGOJ/thjF63\njrx4nsDAYB8x5fkVYNR4QPqIEfAAvvRAK1walOPrvPcrtp/TAD1csYYADIj11gs7\nD5VcNo46H9gc8Bw7ZQN+vB20/ZfhjdJHVVS3oi1co74rBIwEQq3FEQUTMEsLESJb\nzr4JqllKq4VsDHUqxEcIUVllnt0l/3Y1ou9kp2s0EGIzbGL8W0ku8V+PrG3/3iI9\n8eEQ043hawSrQTYY8zCQxQvss3GlKpMQDT4y14gS6gnD6F9Xf26ZOqVvkezshDtR\n8hrsSnaAB2JO3WCvu4101nE2Ahqm5SlogrL8rwIDAQABAoIBAG5b5wtEAophBK+a\n8A0FrkZwKYgyAtcQHfgkZ+tBOHZB6HjkdWc0obMYdIsTZAjECxwoffiSkWKzXhvx\nUL51r+D+gtnh0o9f1qUbH78zdy/XXkXowgKxc9ExUtxhI20rZ8vYH7YUMv5n3EjJ\nPF+XRHu6qXehUH4UCB++H1Nue+L3ulk9GViGO3/PXSbF0awVl3c2VKvgrGvMkgKP\nT+JH7KZj318m3DM+w4xGBpvhNAcTHf7+WXO+IToGect/be5aQ4dDycnp28Sb0vdR\nvgmMEMrP+AqkHiaduGWyXjWpLImdJoxqTZT9Y/XxIT4u9e4PEVcuC2QL0PinyY5C\nDSq20iECgYEA6dJaAcpeKMRcr4cVxogC6JUGjxIBK8YTZoowsfWjYMDsG92SP8Bg\nNT0QHFSDIzC+UB8SG705bRes+T2woqeTiwudikOKsEl4ey1NbAPc5o1JFqKv5M3V\nOeSeyOOviZMCKM2WksOE/T1P8vGcnHJyu7fc1/FRnJn/GiO1Negu+DkCgYEAz0ho\nxmDaq+ekkoYNkIQyVPgrT9v7u9V8A9fZ3O0wCcFQiTpQ7YhrwPkItfZZsm26BqkR\nOsj+78PQlX9iGLmIDvkmRV2FilG3tZhLFiLpOSiq9pQegbzDdThrWYpPNgDINkDs\nmOjK67Eb1anywVPpLCtCDWT87wgdQCI1cBosjCcCgYEAvcqsnH9y5oxc320606db\nFQbCCCeJI8rnvHe3Bvxn3QU7oXK8X1r7vLsP9K70sv/Buq89t55kmpR5JuZYFe8H\n5/lJqw0f6e/5B6LCEUcha1KLXQA43fPle9SCvnVx6q2VNyGJcx+ZNyUpW/2aLbMI\nRi7755xNrluhocoSMOuCFKECgYAA0OYoscTqnFTXhtOS2BJipz90ZwdMrAB6+2SO\nLBjeUPaCM8qRxNG3xsM0BC5CN5Bd6lh5BMWMKBcwH3pBYqmYdX6jE0UtUDkK6/iP\ns797TB+wLNEZ7aZPVdOGXLcHHWWsYQENcQ0rdF0JsEuWW0A1vk3aQ6WDQ2LqF7hi\nIpg+TQKBgQDalWyZwwbIYI8K6BB2wA8PkZV46egnLQCqaGmhPdJcdE7tBjmdTGgj\nVZ0d77Cxik08hsQofyXjB6zufih/zan4VV37pBgQ7SZFBgOEu8ScqMz1EpeVCFC3\nFvOUZ0ed0/mql57JqsYKJ3ZroKMAJZs0wLKYOLZ8N88fVNJdmWI16g==\n-----END RSA PRIVATE KEY-----\n-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIFGhKRLx3WqbFxYc9RMwIaJK/xa7WWcj90p2q/3DTNdPoAoGCCqGSM49\nAwEHoUQDQgAE7m4eZSDcX7hJ0+iyv8m1t0f/BkQW6tBO3McnTYWjoU07JN/mxYlk\nAfiET9Yqq5viMFr2ydOKXGlVU5khmjiOnA==\n-----END EC PRIVATE KEY-----\n"
        },
        "ports": [
          {
            "port": 0,
            "proto": "tcp",
            "range_end": 0
          }
        ]
      }
    },
    "created_at": "2015-01-29T18:53:22.471286Z"
  },
  {
    "id": "2222dd828450483d96b425b8b1294040",
    "artifact": "73d37c1bdacd432f9e5c3cbe121c365e",
    "processes": {
      "app": {
        "cmd": [
          "-httpaddr",
          ":80",
          "-httpsaddr",
          ":443",
          "-tcp-range-start",
          "3000",
          "-tcp-range-end",
          "3500"
        ],
        "omni": true,
        "host_network": true
      }
    },
    "created_at": "2015-01-29T18:53:21.730018Z"
  },
  {
    "id": "e48208857b6e42c1baaba738e766ec7e",
    "artifact": "afe339ec9a0f46b28cfa5dff383e5179",
    "env": {
      "FLYNN_POSTGRES": "pg",
      "PGDATABASE": "c69edca77f27f07c70f10521dc1b9271",
      "PGPASSWORD": "5883fcfe1603a1bc54883cab0e835b6e",
      "PGUSER": "af3dd154197bb764a5fb377fa6d39f31"
    },
    "processes": {
      "web": {
        "ports": [
          {
            "port": 80,
            "proto": "tcp",
            "range_end": 0
          }
        ]
      }
    },
    "created_at": "2015-01-29T18:53:21.713992Z"
  },
  {
    "id": "fdaba774be0a4332bfb5be1d440cdc60",
    "artifact": "61b804fd0f9c42359ac8d8e3131d16bf",
    "processes": {
      "postgres": {
        "cmd": [
          "postgres"
        ],
        "ports": [
          {
            "port": 5432,
            "proto": "tcp",
            "range_end": 0
          }
        ],
        "data": true
      },
      "web": {
        "cmd": [
          "api"
        ],
        "ports": [
          {
            "port": 80,
            "proto": "tcp",
            "range_end": 0
          }
        ]
      }
    },
    "created_at": "2015-01-29T18:53:20.058243Z"
  },
  {
    "id": "a665aa801cbb45f4a41831b66416f4b9",
    "artifact": "1b7c8dcfd0b14755a452367e5f6723b6",
    "env": {
      "AUTH_KEY": "s3cr3t",
      "BACKOFF_PERIOD": "",
      "DEFAULT_ROUTE_DOMAIN": "dev.localflynn.com",
      "FLYNN_POSTGRES": "pg",
      "NAME_SEED": "f09d8d597f0a39acf991",
      "PGDATABASE": "51b7cf0edd53ca6921147823f40737eb",
      "PGPASSWORD": "4bbb7b6bdff41444d876e02e9bfc7133",
      "PGUSER": "f331aec77952871eeec5f7b5f16253bd"
    },
    "processes": {
      "deployer": {
        "cmd": [
          "deployer"
        ]
      },
      "scheduler": {
        "cmd": [
          "scheduler"
        ],
        "omni": true
      },
      "web": {
        "cmd": [
          "controller"
        ],
        "ports": [
          {
            "port": 80,
            "proto": "tcp",
            "range_end": 0
          }
        ]
      }
    },
    "created_at": "2015-01-29T18:53:20.02833Z"
  }
]

属性 类型 描述
apps array of uuid string
config object

创建资源

实例:—————————————————————请求————————————————————

POST /providers/7277db2655e44b4ba7128ff5ff01a0ff/resources HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json
{
  "config": {
  }
}
Content-Type: application/json

资源

https://flynn.io/schema/controller/resource#

添加资源

实例:—————————————————————请求————————————————————

PUT /providers/0952f692-2667-4be0-a159-9d68382a262c/resources/cc9f3342-bed0-4ed3-840e-c462e05808c6 HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json
{
  "id": "cc9f3342-bed0-4ed3-840e-c462e05808c6",
  "provider": "0952f692-2667-4be0-a159-9d68382a262c",
  "external_id": "/foo/bar",
  "env": {
    "FOO": "BAR"
  },
  "apps": [
    "adcccdb4-b1a4-4209-a03a-762f4e021632"
  ]
}

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": "cc9f3342-bed0-4ed3-840e-c462e05808c6",
  "provider": "0952f692-2667-4be0-a159-9d68382a262c",
  "external_id": "/foo/bar",
  "env": {
    "FOO": "BAR"
  },
  "apps": [
    "adcccdb4-b1a4-4209-a03a-762f4e021632"
  ],
  "created_at": "2015-12-16T02:21:16.838613Z"
}

实例:—————————————————————请求————————————————————

GET /apps/7406a4d71a0c43d3ac4b39f006cb0342/resources HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
[
  {
    "id": "cc9f3342-bed0-4ed3-840e-c462e05808c6",
    "provider": "0952f692-2667-4be0-a159-9d68382a262c",
    "external_id": "/foo/bar",
    "env": {
      "FOO": "BAR"
    },
    "apps": [
      "adcccdb4-b1a4-4209-a03a-762f4e021632"
    ],
    "created_at": "2015-12-16T02:21:16.838613Z"
  }
]

获取资源

实例:—————————————————————请求————————————————————

GET /providers/7277db2655e44b4ba7128ff5ff01a0ff/resources/5489d2758d9b452783de686c0ca5fe9d HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": "5489d2758d9b452783de686c0ca5fe9d",
  "provider": "7277db2655e44b4ba7128ff5ff01a0ff",
  "env": {
    "some": "data"
  },
  "created_at": "2015-01-29T18:53:28.757571Z"
}

获取资源列表

实例:—————————————————————请求————————————————————

GET /providers/7277db2655e44b4ba7128ff5ff01a0ff/resources HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
[
  {
    "id": "5489d2758d9b452783de686c0ca5fe9d",
    "provider": "7277db2655e44b4ba7128ff5ff01a0ff",
    "env": {
      "some": "data"
    },
    "created_at": "2015-01-29T18:53:28.757571Z"
  }
]

删除资源

实例:—————————————————————请求————————————————————

DELETE /providers/0952f692-2667-4be0-a159-9d68382a262c/resources/ HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: text/plain; charset=utf-8

路由

属性 类型 描述
id uuid string 唯一标示
parent_ref uuid string 唯一标示
type string
service uuid string 唯一标示
domain string 路由域名。仅适用于HTTP路由。
tls_cert string 路由可选的TLS公证书。仅用于HTTP路由。
tls_key string 路由可选的TLS私钥。仅用于HTTP路由。
sticky boolean 无论路由是否使用粘性会话。仅用于HTTP路由。
port integer TCP端口上监听TCP路由。
created_at date-time string 对象创建的时间
updated_at date-time string 对象最新更新时间

创建路由

实例:—————————————————————请求————————————————————

POST /apps/7406a4d71a0c43d3ac4b39f006cb0342/routes HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json
{
  "type": "http",
  "config": {
    "domain": "http://example.com",
    "service": "my-app-1422557606845347930-web"
  }
}

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": "http/a9b9f04336ce0181a08e774e01113b31",
  "parent_ref": "controller/apps/7406a4d71a0c43d3ac4b39f006cb0342",
  "type": "http",
  "config": {
    "domain": "http://example.com",
    "service": "my-app-1422557606845347930-web"
  },
  "created_at": "2015-01-29T18:53:26.870533465Z",
  "updated_at": "2015-01-29T18:53:26.870533465Z"
}

获取路由

实例:—————————————————————请求————————————————————

GET /apps/7406a4d71a0c43d3ac4b39f006cb0342/routes/http/a9b9f04336ce0181a08e774e01113b31 HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": "http/a9b9f04336ce0181a08e774e01113b31",
  "parent_ref": "controller/apps/7406a4d71a0c43d3ac4b39f006cb0342",
  "type": "http",
  "config": {
    "domain": "http://example.com",
    "service": "my-app-1422557606845347930-web"
  },
  "created_at": "2015-01-29T18:53:26.870533465Z",
  "updated_at": "2015-01-29T18:53:26.870533465Z"
}

更新路由

实例:—————————————————————请求————————————————————

PUT /apps/adcccdb4-b1a4-4209-a03a-762f4e021632/routes/http/5bfb9c8b-ae1f-4a5a-af0c-94fa2996d543 HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json
{
  "type": "http",
  "id": "5bfb9c8b-ae1f-4a5a-af0c-94fa2996d543",
  "parent_ref": "controller/apps/adcccdb4-b1a4-4209-a03a-762f4e021632",
  "service": "my-app-1450232456657062340-other",
  "created_at": "2015-12-16T02:21:06.704111Z",
  "updated_at": "2015-12-16T02:21:06.704111Z",
  "domain": "http://example.com",
  "sticky": true,
  "path": "/"
}

—————————————————————响应————————————————————

Content-Type: application/json
{
  "type": "http",
  "id": "5bfb9c8b-ae1f-4a5a-af0c-94fa2996d543",
  "parent_ref": "controller/apps/adcccdb4-b1a4-4209-a03a-762f4e021632",
  "service": "my-app-1450232456657062340-other",
  "created_at": "2015-12-16T02:21:06.704111Z",
  "updated_at": "2015-12-16T02:21:06.71424Z",
  "domain": "http://example.com",
  "sticky": true,
  "path": "/"
}

获取路由列表

实例:—————————————————————请求————————————————————

GET /apps/7406a4d71a0c43d3ac4b39f006cb0342/routes HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
[
  {
    "id": "http/a9b9f04336ce0181a08e774e01113b31",
    "parent_ref": "controller/apps/7406a4d71a0c43d3ac4b39f006cb0342",
    "type": "http",
    "config": {
      "domain": "http://example.com",
      "service": "my-app-1422557606845347930-web"
    },
    "created_at": "2015-01-29T18:53:26.870533465Z",
    "updated_at": "2015-01-29T18:53:26.870533465Z"
  },
  {
    "id": "http/55b43353e8ae0779b3579ef7661bee91",
    "parent_ref": "controller/apps/7406a4d71a0c43d3ac4b39f006cb0342",
    "type": "http",
    "config": {
      "domain": "my-app-1422557606845347930.dev.localflynn.com",
      "service": "my-app-1422557606845347930-web"
    },
    "created_at": "2015-01-29T18:53:26.847692447Z",
    "updated_at": "2015-01-29T18:53:26.847692447Z"
  }
]

删除路由

实例:—————————————————————请求————————————————————

DELETE /apps/7406a4d71a0c43d3ac4b39f006cb0342/routes/http/a9b9f04336ce0181a08e774e01113b31 HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: text/plain; charset=utf-8

错误

https://flynn.io/schema/controller/error#

属性 类型 描述
code string not_found object_not_found object_exists syntax_error validation_error unknown_error
message string
detail boolean

创建无效应用

实例:—————————————————————请求————————————————————

POST /apps HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json
{
  "name": "this is not valid",
  "protected": false
}

—————————————————————响应————————————————————

Content-Type: application/json
{
  "code": "validation_error",
  "message": "name String must match the pattern: \"^[a-z\\d]+(-[a-z\\d]+)*$\".",
  "detail": {
    "field": "name"
  }
}

事件

属性 类型 描述
id integer
app uuid string 唯一标志符
object_type string app app_deletion app_release deployment job scale release artifact provider resource resource_deletion key key_deletion route route_deletion domain_migration
object_id uuid string 唯一标志符
data object
created_at date-time string 对象创建时间戳

事件流

属性 类型 描述
app_id uuid string 唯一标志符
object_types string app app_deletion app_release deployment job scale release artifact provider resource resource_deletion key key_deletion route route_deletion domain_migration
past boolean 返回之前运行的事件
count integer 限制返回的之前运行事件的数量

实例:—————————————————————请求————————————————————

GET /events?count=10&past=true HTTP/1.1
Accept: text/event-stream
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json
Last-Event-Id: 0

—————————————————————响应————————————————————

Content-Type: text/event-stream; charset=utf-8
data: {"id":102,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"job","object_id":"host-26c0ea34-e655-40d2-8d5e-c5694470af6c","data":{"id":"host-26c0ea34-e655-40d2-8d5e-c5694470af6c","app":"adcccdb4-b1a4-4209-a03a-762f4e021632","meta":{"bread":"with hemp"},"type":"foo","state":"up","release":"47154f8c-a604-469d-ae6a-e431990ddee8","created_at":"2015-12-16T02:21:06.765744Z","updated_at":"2015-12-16T02:21:07.689399Z"},"created_at":"2015-12-16T02:21:07.691418Z"}

data: {"id":103,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"job","object_id":"host-26c0ea34-e655-40d2-8d5e-c5694470af6c","data":{"id":"host-26c0ea34-e655-40d2-8d5e-c5694470af6c","app":"adcccdb4-b1a4-4209-a03a-762f4e021632","meta":{"bread":"with hemp"},"type":"foo","state":"down","release":"47154f8c-a604-469d-ae6a-e431990ddee8","created_at":"2015-12-16T02:21:06.765744Z","updated_at":"2015-12-16T02:21:07.704057Z","exit_status":2},"created_at":"2015-12-16T02:21:07.707269Z"}

data: {"id":104,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"job","object_id":"host-e6582097-9aee-4b6d-94fc-83c0a3d1b51c","data":{"id":"host-e6582097-9aee-4b6d-94fc-83c0a3d1b51c","app":"adcccdb4-b1a4-4209-a03a-762f4e021632","meta":{"bread":"with hemp"},"type":"foo","state":"starting","release":"47154f8c-a604-469d-ae6a-e431990ddee8","created_at":"2015-12-16T02:21:07.710312Z","updated_at":"2015-12-16T02:21:07.710312Z"},"created_at":"2015-12-16T02:21:07.711479Z"}

data: {"id":105,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"job","object_id":"host-e6582097-9aee-4b6d-94fc-83c0a3d1b51c","data":{"id":"host-e6582097-9aee-4b6d-94fc-83c0a3d1b51c","app":"adcccdb4-b1a4-4209-a03a-762f4e021632","meta":{"bread":"with hemp"},"type":"foo","state":"up","release":"47154f8c-a604-469d-ae6a-e431990ddee8","created_at":"2015-12-16T02:21:07.710312Z","updated_at":"2015-12-16T02:21:08.529747Z"},"created_at":"2015-12-16T02:21:08.531191Z"}

data: {"id":106,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"job","object_id":"host-e6582097-9aee-4b6d-94fc-83c0a3d1b51c","data":{"id":"host-e6582097-9aee-4b6d-94fc-83c0a3d1b51c","app":"adcccdb4-b1a4-4209-a03a-762f4e021632","meta":{"bread":"with hemp"},"type":"foo","state":"down","release":"47154f8c-a604-469d-ae6a-e431990ddee8","created_at":"2015-12-16T02:21:07.710312Z","updated_at":"2015-12-16T02:21:08.534753Z","exit_status":2},"created_at":"2015-12-16T02:21:08.5359Z"}

data: {"id":107,"object_type":"release","object_id":"77e9e956-ecf9-427f-a031-222c2f394fb8","data":{"id":"77e9e956-ecf9-427f-a031-222c2f394fb8","env":{"some":"info"},"artifact":"c1889f55-c244-43ce-af70-ead357daa6ec","processes":{"foo":{"cmd":["ls","-l"],"env":{"BAR":"baz"},"resources":{"max_fd":{"limit":10000,"request":10000},"memory":{"limit":1073741824,"request":1073741824}}}},"created_at":"2015-12-16T02:21:16.775714Z"},"created_at":"2015-12-16T02:21:16.775714Z"}

data: {"id":108,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"deployment","object_id":"aab1ee14-776d-4ba4-979b-1b4bda2d9b35","data":{"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","status":"pending","release":"77e9e956-ecf9-427f-a031-222c2f394fb8","deployment":"aab1ee14-776d-4ba4-979b-1b4bda2d9b35"},"created_at":"2015-12-16T02:21:16.784374Z"}

data: {"id":109,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"job","object_id":"host-40cc2d07-7a48-4fda-9790-ba9768a3f616","data":{"id":"host-40cc2d07-7a48-4fda-9790-ba9768a3f616","app":"adcccdb4-b1a4-4209-a03a-762f4e021632","state":"starting","release":"77e9e956-ecf9-427f-a031-222c2f394fb8","created_at":"2015-12-16T02:21:16.799294Z","updated_at":"2015-12-16T02:21:16.799294Z"},"created_at":"2015-12-16T02:21:16.806296Z"}

data: {"id":110,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"job","object_id":"host-40cc2d07-7a48-4fda-9790-ba9768a3f616","data":{"id":"host-40cc2d07-7a48-4fda-9790-ba9768a3f616","app":"adcccdb4-b1a4-4209-a03a-762f4e021632","state":"down","release":"77e9e956-ecf9-427f-a031-222c2f394fb8","created_at":"2015-12-16T02:21:16.799294Z","updated_at":"2015-12-16T02:21:16.811094Z"},"created_at":"2015-12-16T02:21:16.812493Z"}

data: {"id":111,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"resource","object_id":"cc9f3342-bed0-4ed3-840e-c462e05808c6","data":{"id":"cc9f3342-bed0-4ed3-840e-c462e05808c6","env":{"FOO":"BAR"},"apps":["adcccdb4-b1a4-4209-a03a-762f4e021632"],"provider":"0952f692-2667-4be0-a159-9d68382a262c","created_at":"2015-12-16T02:21:16.838613Z","external_id":"/foo/bar"},"created_at":"2015-12-16T02:21:16.838613Z"}

data: {"id":112,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"deployment","object_id":"aab1ee14-776d-4ba4-979b-1b4bda2d9b35","data":{"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","status":"running","release":"77e9e956-ecf9-427f-a031-222c2f394fb8","job_type":"foo","job_state":"starting","deployment":"aab1ee14-776d-4ba4-979b-1b4bda2d9b35"},"created_at":"2015-12-16T02:21:17.017287Z"}

data: {"id":113,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"scale","object_id":"adcccdb4-b1a4-4209-a03a-762f4e021632:77e9e956-ecf9-427f-a031-222c2f394fb8","data":{"release":"77e9e956-ecf9-427f-a031-222c2f394fb8","processes":{"foo":1}},"created_at":"2015-12-16T02:21:17.018787Z"}

data: {"id":114,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"job","object_id":"host-8ba33370-e3b5-4b09-8eaa-629279403202","data":{"id":"host-8ba33370-e3b5-4b09-8eaa-629279403202","app":"adcccdb4-b1a4-4209-a03a-762f4e021632","meta":{"bread":"with hemp"},"type":"foo","state":"starting","release":"77e9e956-ecf9-427f-a031-222c2f394fb8","created_at":"2015-12-16T02:21:17.062294Z","updated_at":"2015-12-16T02:21:17.062294Z"},"created_at":"2015-12-16T02:21:17.064426Z"}

data: {"id":115,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"route_deletion","object_id":"32cd199d-9e83-48e6-96c2-05ab7167eab8","data":{"id":"32cd199d-9e83-48e6-96c2-05ab7167eab8","path":"/","type":"http","domain":"my-app-1450232456657062340.dev.localflynn.com","service":"my-app-1450232456657062340-web","created_at":"2015-12-16T02:20:56.661301Z","parent_ref":"controller/apps/adcccdb4-b1a4-4209-a03a-762f4e021632","updated_at":"2015-12-16T02:20:56.661301Z"},"created_at":"2015-12-16T02:21:17.532255Z"}

data: {"id":116,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"resource_deletion","object_id":"cc9f3342-bed0-4ed3-840e-c462e05808c6","data":{"id":"cc9f3342-bed0-4ed3-840e-c462e05808c6","env":{"FOO":"BAR"},"apps":["adcccdb4-b1a4-4209-a03a-762f4e021632"],"provider":"0952f692-2667-4be0-a159-9d68382a262c","created_at":"2015-12-16T02:21:16.838613Z","external_id":"/foo/bar"},"created_at":"2015-12-16T02:21:17.537413Z"}

data: {"id":117,"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","object_type":"app_deletion","object_id":"adcccdb4-b1a4-4209-a03a-762f4e021632","data":{"error":"","app_deletion":{"app":"adcccdb4-b1a4-4209-a03a-762f4e021632","deleted_routes":[{"id":"32cd199d-9e83-48e6-96c2-05ab7167eab8","path":"/","type":"http","domain":"my-app-1450232456657062340.dev.localflynn.com","service":"my-app-1450232456657062340-web","created_at":"2015-12-16T02:20:56.661301Z","parent_ref":"controller/apps/adcccdb4-b1a4-4209-a03a-762f4e021632","updated_at":"2015-12-16T02:20:56.661301Z"}],"deleted_resources":[{"id":"cc9f3342-bed0-4ed3-840e-c462e05808c6","env":{"FOO":"BAR"},"apps":["adcccdb4-b1a4-4209-a03a-762f4e021632"],"provider":"0952f692-2667-4be0-a159-9d68382a262c","created_at":"2015-12-16T02:21:16.838613Z","external_id":"/foo/bar"}]}},"created_at":"2015-12-16T02:21:17.564196Z"}

列出事件

属性 类型 描述
app_id uuid string 唯一标志符
object_types string app app_deletion app_release deployment job scale release artifact provider resource resource_deletion key key_deletion route route_deletion domain_migration
before_id integer 只返回发生在指定 ID 事件之前的事件
since_id integer 只返回发生在指定 ID 事件之后的事件
count integer 限制返回的之前运行事件的数量

实例:—————————————————————请求————————————————————

GET /events?count=10 HTTP/1.1
Accept: application/json
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: text/event-stream; charset=utf-8
[
  {
    "id": 111,
    "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
    "object_type": "resource",
    "object_id": "cc9f3342-bed0-4ed3-840e-c462e05808c6",
    "data": {
      "id": "cc9f3342-bed0-4ed3-840e-c462e05808c6",
      "env": {
        "FOO": "BAR"
      },
      "apps": [
        "adcccdb4-b1a4-4209-a03a-762f4e021632"
      ],
      "provider": "0952f692-2667-4be0-a159-9d68382a262c",
      "created_at": "2015-12-16T02:21:16.838613Z",
      "external_id": "/foo/bar"
    },
    "created_at": "2015-12-16T02:21:16.838613Z"
  },
  {
    "id": 110,
    "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
    "object_type": "job",
    "object_id": "host-40cc2d07-7a48-4fda-9790-ba9768a3f616",
    "data": {
      "id": "host-40cc2d07-7a48-4fda-9790-ba9768a3f616",
      "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
      "state": "down",
      "release": "77e9e956-ecf9-427f-a031-222c2f394fb8",
      "created_at": "2015-12-16T02:21:16.799294Z",
      "updated_at": "2015-12-16T02:21:16.811094Z"
    },
    "created_at": "2015-12-16T02:21:16.812493Z"
  },
  {
    "id": 109,
    "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
    "object_type": "job",
    "object_id": "host-40cc2d07-7a48-4fda-9790-ba9768a3f616",
    "data": {
      "id": "host-40cc2d07-7a48-4fda-9790-ba9768a3f616",
      "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
      "state": "starting",
      "release": "77e9e956-ecf9-427f-a031-222c2f394fb8",
      "created_at": "2015-12-16T02:21:16.799294Z",
      "updated_at": "2015-12-16T02:21:16.799294Z"
    },
    "created_at": "2015-12-16T02:21:16.806296Z"
  },
  {
    "id": 108,
    "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
    "object_type": "deployment",
    "object_id": "aab1ee14-776d-4ba4-979b-1b4bda2d9b35",
    "data": {
      "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
      "status": "pending",
      "release": "77e9e956-ecf9-427f-a031-222c2f394fb8",
      "deployment": "aab1ee14-776d-4ba4-979b-1b4bda2d9b35"
    },
    "created_at": "2015-12-16T02:21:16.784374Z"
  },
  {
    "id": 107,
    "object_type": "release",
    "object_id": "77e9e956-ecf9-427f-a031-222c2f394fb8",
    "data": {
      "id": "77e9e956-ecf9-427f-a031-222c2f394fb8",
      "env": {
        "some": "info"
      },
      "artifact": "c1889f55-c244-43ce-af70-ead357daa6ec",
      "processes": {
        "foo": {
          "cmd": [
            "ls",
            "-l"
          ],
          "env": {
            "BAR": "baz"
          },
          "resources": {
            "max_fd": {
              "limit": 10000,
              "request": 10000
            },
            "memory": {
              "limit": 1073741824,
              "request": 1073741824
            }
          }
        }
      },
      "created_at": "2015-12-16T02:21:16.775714Z"
    },
    "created_at": "2015-12-16T02:21:16.775714Z"
  },
  {
    "id": 106,
    "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
    "object_type": "job",
    "object_id": "host-e6582097-9aee-4b6d-94fc-83c0a3d1b51c",
    "data": {
      "id": "host-e6582097-9aee-4b6d-94fc-83c0a3d1b51c",
      "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
      "meta": {
        "bread": "with hemp"
      },
      "type": "foo",
      "state": "down",
      "release": "47154f8c-a604-469d-ae6a-e431990ddee8",
      "created_at": "2015-12-16T02:21:07.710312Z",
      "updated_at": "2015-12-16T02:21:08.534753Z",
      "exit_status": 2
    },
    "created_at": "2015-12-16T02:21:08.5359Z"
  },
  {
    "id": 105,
    "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
    "object_type": "job",
    "object_id": "host-e6582097-9aee-4b6d-94fc-83c0a3d1b51c",
    "data": {
      "id": "host-e6582097-9aee-4b6d-94fc-83c0a3d1b51c",
      "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
      "meta": {
        "bread": "with hemp"
      },
      "type": "foo",
      "state": "up",
      "release": "47154f8c-a604-469d-ae6a-e431990ddee8",
      "created_at": "2015-12-16T02:21:07.710312Z",
      "updated_at": "2015-12-16T02:21:08.529747Z"
    },
    "created_at": "2015-12-16T02:21:08.531191Z"
  },
  {
    "id": 104,
    "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
    "object_type": "job",
    "object_id": "host-e6582097-9aee-4b6d-94fc-83c0a3d1b51c",
    "data": {
      "id": "host-e6582097-9aee-4b6d-94fc-83c0a3d1b51c",
      "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
      "meta": {
        "bread": "with hemp"
      },
      "type": "foo",
      "state": "starting",
      "release": "47154f8c-a604-469d-ae6a-e431990ddee8",
      "created_at": "2015-12-16T02:21:07.710312Z",
      "updated_at": "2015-12-16T02:21:07.710312Z"
    },
    "created_at": "2015-12-16T02:21:07.711479Z"
  },
  {
    "id": 103,
    "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
    "object_type": "job",
    "object_id": "host-26c0ea34-e655-40d2-8d5e-c5694470af6c",
    "data": {
      "id": "host-26c0ea34-e655-40d2-8d5e-c5694470af6c",
      "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
      "meta": {
        "bread": "with hemp"
      },
      "type": "foo",
      "state": "down",
      "release": "47154f8c-a604-469d-ae6a-e431990ddee8",
      "created_at": "2015-12-16T02:21:06.765744Z",
      "updated_at": "2015-12-16T02:21:07.704057Z",
      "exit_status": 2
    },
    "created_at": "2015-12-16T02:21:07.707269Z"
  },
  {
    "id": 102,
    "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
    "object_type": "job",
    "object_id": "host-26c0ea34-e655-40d2-8d5e-c5694470af6c",
    "data": {
      "id": "host-26c0ea34-e655-40d2-8d5e-c5694470af6c",
      "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
      "meta": {
        "bread": "with hemp"
      },
      "type": "foo",
      "state": "up",
      "release": "47154f8c-a604-469d-ae6a-e431990ddee8",
      "created_at": "2015-12-16T02:21:06.765744Z",
      "updated_at": "2015-12-16T02:21:07.689399Z"
    },
    "created_at": "2015-12-16T02:21:07.691418Z"
  }
]

获取事件

实例:—————————————————————请求————————————————————

GET /events/111 HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/json
{
  "id": 111,
  "app": "adcccdb4-b1a4-4209-a03a-762f4e021632",
  "object_type": "resource",
  "object_id": "cc9f3342-bed0-4ed3-840e-c462e05808c6",
  "data": {
    "id": "cc9f3342-bed0-4ed3-840e-c462e05808c6",
    "env": {
      "FOO": "BAR"
    },
    "apps": [
      "adcccdb4-b1a4-4209-a03a-762f4e021632"
    ],
    "provider": "0952f692-2667-4be0-a159-9d68382a262c",
    "created_at": "2015-12-16T02:21:16.838613Z",
    "external_id": "/foo/bar"
  },
  "created_at": "2015-12-16T02:21:16.838613Z"
}

CA 证书

获取 CA 证书

实例:—————————————————————请求————————————————————

GET /ca-cert HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Type: application/x-x509-ca-cert
-----BEGIN CERTIFICATE-----
MIIDBDCCAe6gAwIBAgIRAP6BP9TQKrq0l1CCcSI4gb4wCwYJKoZIhvcNAQELMC0x
DjAMBgNVBAoTBUZseW5uMRswGQYDVQQLExJGbHlubiBFcGhlbWVyYWwgQ0EwHhcN
MTUxMjE2MDIyMDQxWhcNMjAxMjE0MDIyMDQxWjAtMQ4wDAYDVQQKEwVGbHlubjEb
MBkGA1UECxMSRmx5bm4gRXBoZW1lcmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAn+KUccUSVeWoJZTlOxqaiXacGECGAPETxfmnL9ep1rA/4DWi
2OTpZoeSFdyL1yV5KJxPkq6XMNyl/BR72SOomCmoFRnZzDih//+gfuJAFVGaF1j9
FOIX+VyO8jyFzqk2vZg9R+ncRyFgjEgpHn0gDdt4WLWDxPpfFMClEZU6Mpu02ngj
1kmlNgzajl71qhhKtrv3W7ACKh6O3fMSBg4n/ZiVnVQjdkejHskV5R43FH4bpZzP
hb82rI6FNBNOCKqwbQ/AdGGVvJSzXPypvzCMkGghhx8pckoZw7DONXhSojfIO6Kt
lxUYO1Odmnb+nyJjxGyidSperhfm+CuSFPn2BwIDAQABoyMwITAOBgNVHQ8BAf8E
BAMCAAYwDwYDVR0TAQH/BAUwAwEB/zALBgkqhkiG9w0BAQsDggEBAGvEqq1ko+pE
S5RBHmTWW6mJom9rA+aii9n88lMhbdjikeVFkQkH6Qi8zR5O4hCdDUC4qYUp+rIF
Z4XZ9Ogl4CcR1gEPGu1KX2EnjVKloS1LThugCuP5YJgQ5qoMsQs681s1ZpPd/0gh
tjASQy1Y72wY1SxVWqJzkuzf8mMDg52I4wwD9Eif2zq1/+sJa9mdilhvd0Wp+hDV
6qN6xbH65V2VKwDrkD2p7CIn3NmknYhmw+obezqRkSl6N5Is/QPVg59bOu0evWfS
DyaOehm1EmmRVehNj8IR0noFwUMbIASnpTescLd4Nz9pEjbgHQ+m6Swe8hnaZ3dd
1TvxABm/4VY=
-----END CERTIFICATE-----

备份

获取集群备份

下载集群的全备份实例:—————————————————————请求————————————————————

GET /backup HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json

—————————————————————响应————————————————————

Content-Disposition: attachment; filename="flynn-backup-2015-12-16_022126.tar"
Content-Type: application/tar

https://flynn.io/schema/controller/domain_migration#

属性 类型 描述
id uuid string 唯一标志符
old_tls_cert string 旧域名的 TLS 证书,迁移任务时会设置它
tls_cert string 域名的 TLS 证书,若没有会生成一个
old_domain uri string 旧的迁出的域名
domain uri string 新的迁入的域名
created_at date-time string 对象创建时间戳
finished_at date-time string 迁入完成时间

迁移集群域名

将集群域名迁移的任务排队。从 domain_migration 事件流来看什么时候完成集群域名迁移。实例:—————————————————————请求————————————————————

PUT /domain HTTP/1.1
Authorization: Basic OnMzY3IzdA==
Content-Type: application/json
{
  "id": "",
  "old_domain": "dev.localflynn.com",
  "domain": "127.0.0.1.xip.io"
}
{
  "id": "5d4c321b-fe6a-42df-867e-ea1a55282396",
  "old_tls_cert": {
    "ca_cert": "",
    "cert": "-----BEGIN CERTIFICATE-----\nMIIDSjCCAjSgAwIBAgIQDH8zACle7B+pqJB3QfwthDALBgkqhkiG9w0BAQswLTEO\nMAwGA1UEChMFRmx5bm4xGzAZBgNVBAsTEkZseW5uIEVwaGVtZXJhbCBDQTAeFw0x\nNTEyMTYwMjIwNDJaFw0yMDEyMTQwMjIwNDJaMC0xDjAMBgNVBAoTBUZseW5uMRsw\nGQYDVQQDExJkZXYubG9jYWxmbHlubi5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB\nDwAwggEKAoIBAQC3NsEp+fYsbgr94cOBVnSK3ZcHBobwcCdzNvNqh6y1V9wn7x4C\nS6Rk0pn1Zz/FS1F+uA8KMVUzwWCCSl/jW4BNAqbLbVi4I5oap8mCDQDt+MDPZyn5\noOCn6vj5OCJXva3RmhJRocF88oXcH4lXWUyfKMOb+0/+tRC7lg5gqBxnvkiJrW7D\nyq0+FoZViBgrN3JcxAgWFx9FK8sITzWpgPqJvJiS4Ry54o8hBTQCKyFCHTwdoufd\nKyBwm6tNn/KLhUXcAEsBD3qvdI0AEX9rssGxVErCualgPaBAvDCFz2H+wwvKnHpK\nCcwIflE04YYOjCHphq9j7FIzd5/+fp0Ng53pAgMBAAGjajBoMA4GA1UdDwEB/wQE\nAwIAoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMDMGA1UdEQQs\nMCqCEmRldi5sb2NhbGZseW5uLmNvbYIUKi5kZXYubG9jYWxmbHlubi5jb20wCwYJ\nKoZIhvcNAQELA4IBAQAIR7k3teJZ5c2eLUlcfLSZiigz+RaZeqxHHt6fZXA9P9XS\n+m8NSIUffdfOXaXjokYTYc91RqGhxVGUUopEA7P64QkEJRpu4qcfq6CXxDoExyf5\ncumrzrBZmTvExqlGBbyviz7T4c7IZAe0U3zYCoaVd1Ss84mY8DA37oqM2Y1pH7Tc\nzwBprXDqAfwt70xoYFWQZoK6SbS+qCQkc+0K9HW0ZzGRwqMTbAoPOTn9D2c9f9o5\nuM9KkiTuvY3T1Kimb848IVvhBfEofeHXZspc9HWqfLJM8wIpMJCaDwcDBN+yFku6\nqqaRa9SXkZLNrB+eCqsVOUzBsmK+sgUL6jmM+Pfc\n-----END CERTIFICATE-----\n",
    "pin": "",
    "key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAtzbBKfn2LG4K/eHDgVZ0it2XBwaG8HAnczbzaoestVfcJ+8e\nAkukZNKZ9Wc/xUtRfrgPCjFVM8Fggkpf41uATQKmy21YuCOaGqfJgg0A7fjAz2cp\n+aDgp+r4+TgiV72t0ZoSUaHBfPKF3B+JV1lMnyjDm/tP/rUQu5YOYKgcZ75Iia1u\nw8qtPhaGVYgYKzdyXMQIFhcfRSvLCE81qYD6ibyYkuEcueKPIQU0AishQh08HaLn\n3SsgcJurTZ/yi4VF3ABLAQ96r3SNABF/a7LBsVRKwrmpYD2gQLwwhc9h/sMLypx6\nSgnMCH5RNOGGDowh6YavY+xSM3ef/n6dDYOd6QIDAQABAoIBAGEZTsRdal9frsmg\n1gl89WUHTVx21BsnhXDlZZpG73xoZRBxBPl4d1bL2raZks2QPk+nYqknPh2g1fIX\nUrxfKR8nUZisigGFNM39sKkRFTYJyL3i0fcvkQDNYkhKvMC9kRptylmjHbWHnvPr\nbtFxTU9ovkqzpVC7S3Pvcg0961f7NgUqM5bfzWlgZYDATtNTpngc6/8bUgG8xhdL\nLsfd84FJcC/0k09Gxu5GPuwvcws1Iag39+Rkz2G9KmOEnN8dywLLedWPQ8A6fIjP\ngSSYTPWRBEF7V6/yRb7a0z1M+SJUrA0vDYJsa2P2ry0YslJi1O9ipOeBmmCddVjN\n21SywoECgYEA45mlj46ySdKhB7iRDaD+M1Ffo9vaCniGjZxEH+sPWXet3gr/hTGN\nmsQngU66v/Gj6clTSOlkOImQHT7Q0/GeHTDEAVEXJNTX8NllElJe6LjOUyqc7kUN\n/zASp3YOHWVC8y3cNy8ScydUhO5hkaVJcpqO0RWxnWnqV6m2OOtcyvkCgYEAzhNA\ntxEpP/7qMz2/Kx7LflRXtMAIfecIlLmq4mw0pnMCebCCXOp7/Lw7VOLIz1JfzGtW\n2b6BTspzbTW16rjedA65+Pj/EdmXxtL7KIfDlnmab7cSQ3Vi/Tmbza4Z+etZ8Yy2\nRwA2Ni8IPS2y8NukcAJH+fGjIAbS/FqgR6KJtnECgYB955scpRWfnPMTsFgdr/ev\nL862eIJP1Iiqgc110rS1C22VLYRYjCcHfIdWEtVgJS5Fv+dgqCuW0xJz+zHObRTI\nlRd4mwEwkMW8KKau0f5KwyDwBNy3OmAZ0OAg3z/Dpya4G6B8rn+IUDODLdOvnD3b\nNgDXTSbqK5NFV07Egf7dEQKBgHdthvrRckOJW3dY2JqH3U0YWkABbqpwo3N16sgQ\nB69TReL6XYK1zidZe1UlnVUxmx1gM9Q7aLsd7ykikIw4mYtPIY5d140juqdajH4f\nuEVTsiH+ShJYTIcOxPG9bYZ+VAD+GIEraT+boD28Z1DZKgJUABylYnFkIxBnAS6i\nzwaxAoGAa3TWYsK0VUrn1EwlI9zzCLW8myjzyPLgpEQ6264ETNSw4K42M2fthcS4\nzlVMrPJ5yhftxCkxbXNFp74lt5Nhryv9K3RWdnL6aXoxR4juhfXBPUBPK+bk/g6F\nohfHj/PeDJFBe0MWC1Q4x7jbeHgqXQ9q7mun+9xH8ZziMdknHc4=\n-----END RSA PRIVATE KEY-----\n"
  },
  "old_domain": "dev.localflynn.com",
  "domain": "127.0.0.1.xip.io",
  "created_at": "2015-12-16T02:21:26.911192Z"
}