marathon-api 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/Rakefile +11 -6
- data/bin/marathon +49 -41
- data/fixtures/vcr/Marathon/_info/returns_the_info_hash.yml +10 -2
- data/fixtures/vcr/Marathon/_ping/ping/.yml +7 -1
- data/fixtures/vcr/Marathon_App/_changes/changes_the_app.yml +21 -5
- data/fixtures/vcr/Marathon_App/_changes/fails_with_stange_attributes.yml +8 -2
- data/fixtures/vcr/Marathon_App/_delete/deletes_the_app.yml +11 -3
- data/fixtures/vcr/Marathon_App/_delete/fails_deleting_not_existing_app.yml +9 -1
- data/fixtures/vcr/Marathon_App/_get/fails_getting_not_existing_app.yml +9 -1
- data/fixtures/vcr/Marathon_App/_get/gets_the_app.yml +10 -2
- data/fixtures/vcr/Marathon_App/_list/lists_apps.yml +11 -4
- data/fixtures/vcr/Marathon_App/_restart/fails_restarting_not_existing_app.yml +9 -1
- data/fixtures/vcr/Marathon_App/_restart/restarts_an_app.yml +9 -3
- data/fixtures/vcr/Marathon_App/_start/fails_getting_not_existing_app.yml +9 -1
- data/fixtures/vcr/Marathon_App/_start/starts_the_app.yml +12 -4
- data/fixtures/vcr/Marathon_App/_version/gets_a_version.yml +19 -7
- data/fixtures/vcr/Marathon_App/_versions/gets_versions.yml +9 -3
- data/fixtures/vcr/Marathon_Deployment/_delete/cleans_app_from_marathon.yml +38 -0
- data/fixtures/vcr/Marathon_Deployment/_delete/deletes_deployments.yml +20 -8
- data/fixtures/vcr/Marathon_Deployment/_list/lists_deployments.yml +34 -14
- data/fixtures/vcr/Marathon_EventSubscriptions/_list/lists_callbacks.yml +10 -2
- data/fixtures/vcr/Marathon_EventSubscriptions/_register/registers_callback.yml +10 -2
- data/fixtures/vcr/Marathon_EventSubscriptions/_unregister/unregisters_callback.yml +10 -2
- data/fixtures/vcr/Marathon_Group/_changes/changes_the_group.yml +20 -8
- data/fixtures/vcr/Marathon_Group/_changes/previews_changes.yml +38 -0
- data/fixtures/vcr/Marathon_Group/_delete/deletes_the_group.yml +9 -3
- data/fixtures/vcr/Marathon_Group/_delete/fails_deleting_not_existing_app.yml +8 -2
- data/fixtures/vcr/Marathon_Group/_get/fails_getting_not_existing_app.yml +8 -2
- data/fixtures/vcr/Marathon_Group/_get/gets_the_group.yml +9 -3
- data/fixtures/vcr/Marathon_Group/_list/lists_apps.yml +12 -4
- data/fixtures/vcr/Marathon_Group/_start/fails_getting_not_existing_group.yml +8 -2
- data/fixtures/vcr/Marathon_Group/_start/starts_the_group.yml +9 -3
- data/fixtures/vcr/Marathon_Leader/_delete/delete/.yml +9 -1
- data/fixtures/vcr/Marathon_Leader/_get/get/.yml +10 -2
- data/fixtures/vcr/Marathon_Queue/_list/lists_queue.yml +9 -4
- data/fixtures/vcr/Marathon_Task/_delete/kills_a_tasks_of_an_app.yml +26 -10
- data/fixtures/vcr/Marathon_Task/_delete_all/kills_all_tasks_of_an_app.yml +10 -2
- data/fixtures/vcr/Marathon_Task/_get/gets_tasks_of_an_app.yml +10 -2
- data/fixtures/vcr/Marathon_Task/_list/lists_running_tasks.yml +10 -2
- data/fixtures/vcr/Marathon_Task/_list/lists_tasks.yml +10 -2
- data/lib/marathon/deployment.rb +5 -2
- data/lib/marathon/deployment_action.rb +23 -0
- data/lib/marathon/deployment_info.rb +17 -1
- data/lib/marathon/deployment_step.rb +21 -0
- data/lib/marathon/error.rb +1 -1
- data/lib/marathon/group.rb +13 -5
- data/lib/marathon/task.rb +7 -9
- data/lib/marathon/version.rb +1 -1
- data/lib/marathon.rb +2 -0
- data/spec/marathon/app_spec.rb +5 -7
- data/spec/marathon/deployment_action_spec.rb +25 -0
- data/spec/marathon/deployment_info_spec.rb +10 -1
- data/spec/marathon/deployment_spec.rb +7 -3
- data/spec/marathon/deployment_step_spec.rb +32 -0
- data/spec/marathon/event_subscriptions_spec.rb +2 -2
- data/spec/marathon/group_spec.rb +31 -19
- data/spec/marathon/leader_spec.rb +2 -4
- data/spec/marathon/queue_spec.rb +1 -2
- data/spec/marathon/task_spec.rb +4 -10
- metadata +10 -3
- data/fixtures/vcr/Marathon_App/_tasks/has_tasks.yml +0 -30
@@ -12,12 +12,18 @@ http_interactions:
|
|
12
12
|
Accept:
|
13
13
|
- application/json
|
14
14
|
User-Agent:
|
15
|
-
- ub0r/Marathon-API
|
15
|
+
- ub0r/Marathon-API 1.1.0
|
16
16
|
response:
|
17
17
|
status:
|
18
18
|
code: 200
|
19
19
|
message: OK
|
20
20
|
headers:
|
21
|
+
Cache-Control:
|
22
|
+
- no-cache, no-store, must-revalidate
|
23
|
+
Pragma:
|
24
|
+
- no-cache
|
25
|
+
Expires:
|
26
|
+
- '0'
|
21
27
|
Content-Type:
|
22
28
|
- application/json
|
23
29
|
Transfer-Encoding:
|
@@ -26,8 +32,10 @@ http_interactions:
|
|
26
32
|
- Jetty(8.y.z-SNAPSHOT)
|
27
33
|
body:
|
28
34
|
encoding: UTF-8
|
29
|
-
string: '{"id":"/","apps":[
|
30
|
-
|
35
|
+
string: '{"id":"/","apps":[{"id":"/ubuntu","cmd":"while sleep 10; do date -u
|
36
|
+
+%T; done","args":null,"user":null,"env":{},"instances":1,"cpus":0.1,"mem":64.0,"disk":0.0,"executor":"","constraints":[],"uris":[],"storeUrls":[],"ports":[],"requirePorts":false,"backoffSeconds":1,"backoffFactor":1.15,"maxLaunchDelaySeconds":3600,"container":{"type":"DOCKER","volumes":[],"docker":{"image":"libmesos/ubuntu","network":null,"portMappings":null,"privileged":false,"parameters":[]}},"healthChecks":[],"dependencies":[],"upgradeStrategy":{"minimumHealthCapacity":1.0,"maximumOverCapacity":1.0},"labels":{},"version":"2015-03-17T11:56:26.532Z"},{"id":"/ubuntu2","cmd":"while
|
37
|
+
sleep 10; do date -u +%T; done","args":null,"user":null,"env":{},"instances":2,"cpus":0.1,"mem":64.0,"disk":0.0,"executor":"","constraints":[["hostname","GROUP_BY"]],"uris":[],"storeUrls":[],"ports":[],"requirePorts":false,"backoffSeconds":1,"backoffFactor":1.15,"maxLaunchDelaySeconds":3600,"container":{"type":"DOCKER","volumes":[],"docker":{"image":"libmesos/ubuntu","network":null,"portMappings":null,"privileged":false,"parameters":[]}},"healthChecks":[],"dependencies":[],"upgradeStrategy":{"minimumHealthCapacity":1.0,"maximumOverCapacity":1.0},"labels":{},"version":"2015-03-17T13:05:44.561Z"}],"groups":[{"id":"/test","apps":[],"groups":[],"dependencies":[],"version":"2015-03-17T13:06:07.888Z"},{"id":"/develop-ci","apps":[],"groups":[{"id":"/develop-ci/ops","apps":[],"groups":[],"dependencies":[],"version":"2015-03-17T13:06:07.888Z"}],"dependencies":[],"version":"2015-03-17T13:06:07.888Z"},{"id":"/spark","apps":[],"groups":[],"dependencies":[],"version":"2015-03-17T13:06:07.888Z"},{"id":"/test-group","apps":[{"id":"/test-group/app","cmd":"sleep
|
38
|
+
30","args":null,"user":null,"env":{},"instances":1,"cpus":1.0,"mem":128.0,"disk":0.0,"executor":"","constraints":[],"uris":[],"storeUrls":[],"ports":[10000],"requirePorts":false,"backoffSeconds":1,"backoffFactor":1.15,"maxLaunchDelaySeconds":3600,"container":null,"healthChecks":[],"dependencies":[],"upgradeStrategy":{"minimumHealthCapacity":1.0,"maximumOverCapacity":0.0},"labels":{},"version":"2015-03-17T13:06:07.888Z"}],"groups":[],"dependencies":[],"version":"2015-03-17T13:06:07.888Z"}],"dependencies":[],"version":"2015-03-17T13:06:07.888Z"}'
|
31
39
|
http_version:
|
32
|
-
recorded_at:
|
40
|
+
recorded_at: Tue, 17 Mar 2015 13:06:08 GMT
|
33
41
|
recorded_with: VCR 2.9.3
|
@@ -12,12 +12,18 @@ http_interactions:
|
|
12
12
|
Accept:
|
13
13
|
- application/json
|
14
14
|
User-Agent:
|
15
|
-
- ub0r/Marathon-API
|
15
|
+
- ub0r/Marathon-API 1.1.0
|
16
16
|
response:
|
17
17
|
status:
|
18
18
|
code: 404
|
19
19
|
message: Not Found
|
20
20
|
headers:
|
21
|
+
Cache-Control:
|
22
|
+
- no-cache, no-store, must-revalidate
|
23
|
+
Pragma:
|
24
|
+
- no-cache
|
25
|
+
Expires:
|
26
|
+
- '0'
|
21
27
|
Content-Type:
|
22
28
|
- application/json
|
23
29
|
Transfer-Encoding:
|
@@ -28,5 +34,5 @@ http_interactions:
|
|
28
34
|
encoding: UTF-8
|
29
35
|
string: '{"message":"Group ''/fooo group'' does not exist"}'
|
30
36
|
http_version:
|
31
|
-
recorded_at:
|
37
|
+
recorded_at: Tue, 17 Mar 2015 13:06:08 GMT
|
32
38
|
recorded_with: VCR 2.9.3
|
@@ -13,12 +13,18 @@ http_interactions:
|
|
13
13
|
Accept:
|
14
14
|
- application/json
|
15
15
|
User-Agent:
|
16
|
-
- ub0r/Marathon-API
|
16
|
+
- ub0r/Marathon-API 1.1.0
|
17
17
|
response:
|
18
18
|
status:
|
19
19
|
code: 201
|
20
20
|
message: Created
|
21
21
|
headers:
|
22
|
+
Cache-Control:
|
23
|
+
- no-cache, no-store, must-revalidate
|
24
|
+
Pragma:
|
25
|
+
- no-cache
|
26
|
+
Expires:
|
27
|
+
- '0'
|
22
28
|
Location:
|
23
29
|
- http://localhost:8080/v2/groups/test-group
|
24
30
|
Content-Type:
|
@@ -29,7 +35,7 @@ http_interactions:
|
|
29
35
|
- Jetty(8.y.z-SNAPSHOT)
|
30
36
|
body:
|
31
37
|
encoding: UTF-8
|
32
|
-
string: '{"version":"2015-03-
|
38
|
+
string: '{"version":"2015-03-17T13:06:07.888Z","deploymentId":"b8ec8dda-f910-4339-9aff-fde4b7da31d4"}'
|
33
39
|
http_version:
|
34
|
-
recorded_at:
|
40
|
+
recorded_at: Tue, 17 Mar 2015 13:06:08 GMT
|
35
41
|
recorded_with: VCR 2.9.3
|
@@ -11,11 +11,19 @@ http_interactions:
|
|
11
11
|
- application/json
|
12
12
|
Accept:
|
13
13
|
- application/json
|
14
|
+
User-Agent:
|
15
|
+
- ub0r/Marathon-API 1.1.0
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
17
19
|
message: OK
|
18
20
|
headers:
|
21
|
+
Cache-Control:
|
22
|
+
- no-cache, no-store, must-revalidate
|
23
|
+
Pragma:
|
24
|
+
- no-cache
|
25
|
+
Expires:
|
26
|
+
- '0'
|
19
27
|
Content-Type:
|
20
28
|
- application/json
|
21
29
|
Transfer-Encoding:
|
@@ -26,5 +34,5 @@ http_interactions:
|
|
26
34
|
encoding: UTF-8
|
27
35
|
string: '{"message":"Leadership abdicted"}'
|
28
36
|
http_version:
|
29
|
-
recorded_at:
|
37
|
+
recorded_at: Tue, 17 Mar 2015 13:06:09 GMT
|
30
38
|
recorded_with: VCR 2.9.3
|
@@ -11,11 +11,19 @@ http_interactions:
|
|
11
11
|
- application/json
|
12
12
|
Accept:
|
13
13
|
- application/json
|
14
|
+
User-Agent:
|
15
|
+
- ub0r/Marathon-API 1.1.0
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
17
19
|
message: OK
|
18
20
|
headers:
|
21
|
+
Cache-Control:
|
22
|
+
- no-cache, no-store, must-revalidate
|
23
|
+
Pragma:
|
24
|
+
- no-cache
|
25
|
+
Expires:
|
26
|
+
- '0'
|
19
27
|
Content-Type:
|
20
28
|
- application/json
|
21
29
|
Transfer-Encoding:
|
@@ -24,7 +32,7 @@ http_interactions:
|
|
24
32
|
- Jetty(8.y.z-SNAPSHOT)
|
25
33
|
body:
|
26
34
|
encoding: UTF-8
|
27
|
-
string: '{"leader":"mesos:8080"}'
|
35
|
+
string: '{"leader":"mesos-dev-f999998.lhotse.ov.otto.de:8080"}'
|
28
36
|
http_version:
|
29
|
-
recorded_at:
|
37
|
+
recorded_at: Tue, 17 Mar 2015 13:06:09 GMT
|
30
38
|
recorded_with: VCR 2.9.3
|
@@ -12,12 +12,18 @@ http_interactions:
|
|
12
12
|
Accept:
|
13
13
|
- application/json
|
14
14
|
User-Agent:
|
15
|
-
- ub0r/Marathon-API
|
15
|
+
- ub0r/Marathon-API 1.1.0
|
16
16
|
response:
|
17
17
|
status:
|
18
18
|
code: 200
|
19
19
|
message: OK
|
20
20
|
headers:
|
21
|
+
Cache-Control:
|
22
|
+
- no-cache, no-store, must-revalidate
|
23
|
+
Pragma:
|
24
|
+
- no-cache
|
25
|
+
Expires:
|
26
|
+
- '0'
|
21
27
|
Content-Type:
|
22
28
|
- application/json
|
23
29
|
Transfer-Encoding:
|
@@ -26,8 +32,7 @@ http_interactions:
|
|
26
32
|
- Jetty(8.y.z-SNAPSHOT)
|
27
33
|
body:
|
28
34
|
encoding: UTF-8
|
29
|
-
string: '{"queue":[
|
30
|
-
sleep 10; do date -u +%T; done","args":null,"user":null,"env":{},"instances":1,"cpus":0.1,"mem":64.0,"disk":0.0,"executor":"","constraints":[],"uris":[],"storeUrls":[],"ports":[10001],"requirePorts":false,"backoffSeconds":1,"backoffFactor":1.15,"maxLaunchDelaySeconds":3600,"container":{"type":"DOCKER","volumes":[],"docker":{"image":"libmesos/ubuntu","network":null,"portMappings":null,"privileged":false,"parameters":[]}},"healthChecks":[],"dependencies":[],"upgradeStrategy":{"minimumHealthCapacity":1.0,"maximumOverCapacity":1.0},"labels":{},"version":"2015-03-04T16:34:15.691Z"},"count":0}]}'
|
35
|
+
string: '{"queue":[]}'
|
31
36
|
http_version:
|
32
|
-
recorded_at:
|
37
|
+
recorded_at: Tue, 17 Mar 2015 13:06:09 GMT
|
33
38
|
recorded_with: VCR 2.9.3
|
@@ -11,11 +11,19 @@ http_interactions:
|
|
11
11
|
- application/json
|
12
12
|
Accept:
|
13
13
|
- application/json
|
14
|
+
User-Agent:
|
15
|
+
- ub0r/Marathon-API 1.1.0
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
17
19
|
message: OK
|
18
20
|
headers:
|
21
|
+
Cache-Control:
|
22
|
+
- no-cache, no-store, must-revalidate
|
23
|
+
Pragma:
|
24
|
+
- no-cache
|
25
|
+
Expires:
|
26
|
+
- '0'
|
19
27
|
Content-Type:
|
20
28
|
- application/json
|
21
29
|
Transfer-Encoding:
|
@@ -24,34 +32,42 @@ http_interactions:
|
|
24
32
|
- Jetty(8.y.z-SNAPSHOT)
|
25
33
|
body:
|
26
34
|
encoding: UTF-8
|
27
|
-
string: '{"tasks":[{"appId":"/ubuntu2","id":"ubuntu2.
|
35
|
+
string: '{"tasks":[{"appId":"/ubuntu2","id":"ubuntu2.52c55930-cca6-11e4-9cfc-080027d9edbf","host":"mesos-dev-f999999.lhotse.ov.otto.de","ports":[],"startedAt":"2015-03-17T13:05:46.755Z","stagedAt":"2015-03-17T13:05:45.326Z","version":"2015-03-17T13:05:39.490Z"},{"appId":"/ubuntu2","id":"ubuntu2.57c93911-cca6-11e4-9cfc-080027d9edbf","host":"mesos-dev-f999999.lhotse.ov.otto.de","ports":[],"startedAt":"2015-03-17T13:05:55.629Z","stagedAt":"2015-03-17T13:05:53.741Z","version":"2015-03-17T13:05:39.559Z"}]}'
|
28
36
|
http_version:
|
29
|
-
recorded_at: Tue,
|
37
|
+
recorded_at: Tue, 17 Mar 2015 13:06:10 GMT
|
30
38
|
- request:
|
31
|
-
method:
|
32
|
-
uri: http://localhost:8080/v2/
|
39
|
+
method: post
|
40
|
+
uri: http://localhost:8080/v2/tasks/delete
|
33
41
|
body:
|
34
|
-
encoding:
|
35
|
-
string: ''
|
42
|
+
encoding: UTF-8
|
43
|
+
string: '{"ids":["ubuntu2.52c55930-cca6-11e4-9cfc-080027d9edbf"]}'
|
36
44
|
headers:
|
37
45
|
Content-Type:
|
38
46
|
- application/json
|
39
47
|
Accept:
|
40
48
|
- application/json
|
49
|
+
User-Agent:
|
50
|
+
- ub0r/Marathon-API 1.1.0
|
41
51
|
response:
|
42
52
|
status:
|
43
53
|
code: 200
|
44
54
|
message: OK
|
45
55
|
headers:
|
56
|
+
Cache-Control:
|
57
|
+
- no-cache, no-store, must-revalidate
|
58
|
+
Pragma:
|
59
|
+
- no-cache
|
60
|
+
Expires:
|
61
|
+
- '0'
|
46
62
|
Content-Type:
|
47
63
|
- application/json
|
48
|
-
|
49
|
-
-
|
64
|
+
Content-Length:
|
65
|
+
- '0'
|
50
66
|
Server:
|
51
67
|
- Jetty(8.y.z-SNAPSHOT)
|
52
68
|
body:
|
53
69
|
encoding: UTF-8
|
54
|
-
string: '
|
70
|
+
string: ''
|
55
71
|
http_version:
|
56
|
-
recorded_at: Tue,
|
72
|
+
recorded_at: Tue, 17 Mar 2015 13:06:10 GMT
|
57
73
|
recorded_with: VCR 2.9.3
|
@@ -11,11 +11,19 @@ http_interactions:
|
|
11
11
|
- application/json
|
12
12
|
Accept:
|
13
13
|
- application/json
|
14
|
+
User-Agent:
|
15
|
+
- ub0r/Marathon-API 1.1.0
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
17
19
|
message: OK
|
18
20
|
headers:
|
21
|
+
Cache-Control:
|
22
|
+
- no-cache, no-store, must-revalidate
|
23
|
+
Pragma:
|
24
|
+
- no-cache
|
25
|
+
Expires:
|
26
|
+
- '0'
|
19
27
|
Content-Type:
|
20
28
|
- application/json
|
21
29
|
Transfer-Encoding:
|
@@ -24,7 +32,7 @@ http_interactions:
|
|
24
32
|
- Jetty(8.y.z-SNAPSHOT)
|
25
33
|
body:
|
26
34
|
encoding: UTF-8
|
27
|
-
string: '{"tasks":[{"id":"ubuntu2.
|
35
|
+
string: '{"tasks":[{"id":"ubuntu2.52c55930-cca6-11e4-9cfc-080027d9edbf","host":"mesos-dev-f999999.lhotse.ov.otto.de","ports":[],"startedAt":"2015-03-17T13:05:46.755Z","stagedAt":"2015-03-17T13:05:45.326Z","version":"2015-03-17T13:05:39.490Z"},{"id":"ubuntu2.57c93911-cca6-11e4-9cfc-080027d9edbf","host":"mesos-dev-f999999.lhotse.ov.otto.de","ports":[],"startedAt":"2015-03-17T13:05:55.629Z","stagedAt":"2015-03-17T13:05:53.741Z","version":"2015-03-17T13:05:39.559Z"}]}'
|
28
36
|
http_version:
|
29
|
-
recorded_at: Tue,
|
37
|
+
recorded_at: Tue, 17 Mar 2015 13:06:10 GMT
|
30
38
|
recorded_with: VCR 2.9.3
|
@@ -11,11 +11,19 @@ http_interactions:
|
|
11
11
|
- application/json
|
12
12
|
Accept:
|
13
13
|
- application/json
|
14
|
+
User-Agent:
|
15
|
+
- ub0r/Marathon-API 1.1.0
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
17
19
|
message: OK
|
18
20
|
headers:
|
21
|
+
Cache-Control:
|
22
|
+
- no-cache, no-store, must-revalidate
|
23
|
+
Pragma:
|
24
|
+
- no-cache
|
25
|
+
Expires:
|
26
|
+
- '0'
|
19
27
|
Content-Type:
|
20
28
|
- application/json
|
21
29
|
Transfer-Encoding:
|
@@ -24,7 +32,7 @@ http_interactions:
|
|
24
32
|
- Jetty(8.y.z-SNAPSHOT)
|
25
33
|
body:
|
26
34
|
encoding: UTF-8
|
27
|
-
string: '{"tasks":[{"appId":"/ubuntu2","id":"ubuntu2.
|
35
|
+
string: '{"tasks":[{"appId":"/ubuntu2","id":"ubuntu2.52c55930-cca6-11e4-9cfc-080027d9edbf","host":"mesos-dev-f999999.lhotse.ov.otto.de","ports":[],"startedAt":"2015-03-17T13:05:46.755Z","stagedAt":"2015-03-17T13:05:45.326Z","version":"2015-03-17T13:05:39.490Z"},{"appId":"/ubuntu2","id":"ubuntu2.57c93911-cca6-11e4-9cfc-080027d9edbf","host":"mesos-dev-f999999.lhotse.ov.otto.de","ports":[],"startedAt":"2015-03-17T13:05:55.629Z","stagedAt":"2015-03-17T13:05:53.741Z","version":"2015-03-17T13:05:39.559Z"}]}'
|
28
36
|
http_version:
|
29
|
-
recorded_at: Tue,
|
37
|
+
recorded_at: Tue, 17 Mar 2015 13:06:10 GMT
|
30
38
|
recorded_with: VCR 2.9.3
|
@@ -11,11 +11,19 @@ http_interactions:
|
|
11
11
|
- application/json
|
12
12
|
Accept:
|
13
13
|
- application/json
|
14
|
+
User-Agent:
|
15
|
+
- ub0r/Marathon-API 1.1.0
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
17
19
|
message: OK
|
18
20
|
headers:
|
21
|
+
Cache-Control:
|
22
|
+
- no-cache, no-store, must-revalidate
|
23
|
+
Pragma:
|
24
|
+
- no-cache
|
25
|
+
Expires:
|
26
|
+
- '0'
|
19
27
|
Content-Type:
|
20
28
|
- application/json
|
21
29
|
Transfer-Encoding:
|
@@ -24,7 +32,7 @@ http_interactions:
|
|
24
32
|
- Jetty(8.y.z-SNAPSHOT)
|
25
33
|
body:
|
26
34
|
encoding: UTF-8
|
27
|
-
string: '{"tasks":[{"appId":"/
|
35
|
+
string: '{"tasks":[{"appId":"/ubuntu","id":"ubuntu.a6c4d769-cc9c-11e4-9cfc-080027d9edbf","host":"mesos-dev-f999999.lhotse.ov.otto.de","ports":[],"startedAt":"2015-03-17T11:56:36.225Z","stagedAt":"2015-03-17T11:56:31.284Z","version":"2015-03-17T11:56:26.532Z"},{"appId":"/ubuntu2","id":"ubuntu2.52c55930-cca6-11e4-9cfc-080027d9edbf","host":"mesos-dev-f999999.lhotse.ov.otto.de","ports":[],"startedAt":"2015-03-17T13:05:46.755Z","stagedAt":"2015-03-17T13:05:45.326Z","version":"2015-03-17T13:05:39.490Z"},{"appId":"/ubuntu2","id":"ubuntu2.57c93911-cca6-11e4-9cfc-080027d9edbf","host":"mesos-dev-f999999.lhotse.ov.otto.de","ports":[],"startedAt":"2015-03-17T13:05:55.629Z","stagedAt":"2015-03-17T13:05:53.741Z","version":"2015-03-17T13:05:39.559Z"}]}'
|
28
36
|
http_version:
|
29
|
-
recorded_at: Tue,
|
37
|
+
recorded_at: Tue, 17 Mar 2015 13:06:09 GMT
|
30
38
|
recorded_with: VCR 2.9.3
|
@@ -11,11 +11,19 @@ http_interactions:
|
|
11
11
|
- application/json
|
12
12
|
Accept:
|
13
13
|
- application/json
|
14
|
+
User-Agent:
|
15
|
+
- ub0r/Marathon-API 1.1.0
|
14
16
|
response:
|
15
17
|
status:
|
16
18
|
code: 200
|
17
19
|
message: OK
|
18
20
|
headers:
|
21
|
+
Cache-Control:
|
22
|
+
- no-cache, no-store, must-revalidate
|
23
|
+
Pragma:
|
24
|
+
- no-cache
|
25
|
+
Expires:
|
26
|
+
- '0'
|
19
27
|
Content-Type:
|
20
28
|
- application/json
|
21
29
|
Transfer-Encoding:
|
@@ -24,7 +32,7 @@ http_interactions:
|
|
24
32
|
- Jetty(8.y.z-SNAPSHOT)
|
25
33
|
body:
|
26
34
|
encoding: UTF-8
|
27
|
-
string: '{"tasks":[{"appId":"/
|
35
|
+
string: '{"tasks":[{"appId":"/ubuntu","id":"ubuntu.a6c4d769-cc9c-11e4-9cfc-080027d9edbf","host":"mesos-dev-f999999.lhotse.ov.otto.de","ports":[],"startedAt":"2015-03-17T11:56:36.225Z","stagedAt":"2015-03-17T11:56:31.284Z","version":"2015-03-17T11:56:26.532Z"},{"appId":"/ubuntu2","id":"ubuntu2.52c55930-cca6-11e4-9cfc-080027d9edbf","host":"mesos-dev-f999999.lhotse.ov.otto.de","ports":[],"startedAt":"2015-03-17T13:05:46.755Z","stagedAt":"2015-03-17T13:05:45.326Z","version":"2015-03-17T13:05:39.490Z"},{"appId":"/ubuntu2","id":"ubuntu2.57c93911-cca6-11e4-9cfc-080027d9edbf","host":"mesos-dev-f999999.lhotse.ov.otto.de","ports":[],"startedAt":"2015-03-17T13:05:55.629Z","stagedAt":"2015-03-17T13:05:53.741Z","version":"2015-03-17T13:05:39.559Z"}]}'
|
28
36
|
http_version:
|
29
|
-
recorded_at: Tue,
|
37
|
+
recorded_at: Tue, 17 Mar 2015 13:06:09 GMT
|
30
38
|
recorded_with: VCR 2.9.3
|
data/lib/marathon/deployment.rb
CHANGED
@@ -2,13 +2,16 @@
|
|
2
2
|
# See https://mesosphere.github.io/marathon/docs/rest-api.html#deployments for full list of API's methods.
|
3
3
|
class Marathon::Deployment < Marathon::Base
|
4
4
|
|
5
|
-
ACCESSORS = %w[ id affectedApps
|
5
|
+
ACCESSORS = %w[ id affectedApps version currentStep totalSteps ]
|
6
|
+
attr_reader :steps, :currentActions
|
6
7
|
|
7
8
|
# Create a new deployment object.
|
8
9
|
# ++hash++: Hash including all attributes.
|
9
10
|
# See https://mesosphere.github.io/marathon/docs/rest-api.html#get-/v2/deployments for full details.
|
10
11
|
def initialize(hash)
|
11
12
|
super(hash, ACCESSORS)
|
13
|
+
@currentActions = (info[:currentActions] || []).map { |e| Marathon::DeploymentAction.new(e) }
|
14
|
+
@steps = (info[:steps] || []).map { |e| Marathon::DeploymentStep.new(e) }
|
12
15
|
end
|
13
16
|
|
14
17
|
# Cancel the deployment.
|
@@ -47,4 +50,4 @@ class Marathon::Deployment < Marathon::Base
|
|
47
50
|
alias :cancel :delete
|
48
51
|
alias :remove :delete
|
49
52
|
end
|
50
|
-
end
|
53
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# This class represents a Marathon Deployment action.
|
2
|
+
class Marathon::DeploymentAction < Marathon::Base
|
3
|
+
|
4
|
+
# Create a new deployment action object.
|
5
|
+
# ++hash++: Hash returned by API, including 'app' and 'type'
|
6
|
+
def initialize(hash)
|
7
|
+
super(hash, %w[app])
|
8
|
+
end
|
9
|
+
|
10
|
+
def type
|
11
|
+
info[:type] || info[:action]
|
12
|
+
end
|
13
|
+
alias :action :type
|
14
|
+
|
15
|
+
def to_pretty_s
|
16
|
+
"#{app}/#{type}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_s
|
20
|
+
"Marathon::DeploymentAction { :app => #{app} :type => #{type} }"
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -1,7 +1,11 @@
|
|
1
|
+
require 'timeout'
|
2
|
+
|
1
3
|
# This class represents a Marathon Deployment information.
|
2
4
|
# It is returned by asynchronious deployment calls.
|
3
5
|
class Marathon::DeploymentInfo < Marathon::Base
|
4
6
|
|
7
|
+
RECHECK_INTERVAL = 3
|
8
|
+
|
5
9
|
# Create a new deployment info object.
|
6
10
|
# ++hash++: Hash returned by API, including 'deploymentId' and 'version'
|
7
11
|
def initialize(hash)
|
@@ -9,6 +13,18 @@ class Marathon::DeploymentInfo < Marathon::Base
|
|
9
13
|
raise Marathon::Error::ArgumentError, 'version must not be nil' unless version
|
10
14
|
end
|
11
15
|
|
16
|
+
# Wait for a deployment to finish.
|
17
|
+
# ++timeout++: Timeout in seconds.
|
18
|
+
def wait(timeout = 60)
|
19
|
+
Timeout::timeout(timeout) do
|
20
|
+
deployments = nil
|
21
|
+
while deployments.nil? or deployments.select{|e| e.id == deploymentId}.size > 0 do
|
22
|
+
sleep(RECHECK_INTERVAL) unless deployments.nil?
|
23
|
+
deployments = Marathon::Deployment.list
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
12
28
|
def to_s
|
13
29
|
if deploymentId
|
14
30
|
"Marathon::DeploymentInfo { :version => #{version} :deploymentId => #{deploymentId} }"
|
@@ -17,4 +33,4 @@ class Marathon::DeploymentInfo < Marathon::Base
|
|
17
33
|
end
|
18
34
|
end
|
19
35
|
|
20
|
-
end
|
36
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# This class represents a Marathon Deployment step.
|
2
|
+
class Marathon::DeploymentStep < Marathon::Base
|
3
|
+
|
4
|
+
attr_reader :actions
|
5
|
+
|
6
|
+
# Create a new deployment step object.
|
7
|
+
# ++hash++: Hash returned by API, including 'actions'
|
8
|
+
def initialize(hash)
|
9
|
+
super(hash)
|
10
|
+
if hash.is_a?(Array)
|
11
|
+
@actions = info.map { |e| Marathon::DeploymentAction.new(e) }
|
12
|
+
else
|
13
|
+
@actions = (info[:actions] || []).map { |e| Marathon::DeploymentAction.new(e) }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
"Marathon::DeploymentStep { :actions => #{actions.map{|e| e.to_pretty_s}.join(',')} }"
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/lib/marathon/error.rb
CHANGED
data/lib/marathon/group.rb
CHANGED
@@ -17,7 +17,8 @@ class Marathon::Group < Marathon::Base
|
|
17
17
|
super(Marathon::Util.merge_keywordized_hash(DEFAULTS, hash), ACCESSORS)
|
18
18
|
raise ArgumentError, 'Group must have an id' unless id
|
19
19
|
refresh_attributes
|
20
|
-
raise ArgumentError, 'Group can have either groups or apps, not both'
|
20
|
+
raise ArgumentError, 'Group can have either groups or apps, not both' \
|
21
|
+
if apps.size > 0 and groups.size > 0 and id != '/'
|
21
22
|
end
|
22
23
|
|
23
24
|
# Reload attributes from marathon API.
|
@@ -54,7 +55,8 @@ class Marathon::Group < Marathon::Base
|
|
54
55
|
# ++hash++: Hash of attributes to change.
|
55
56
|
# ++force++: If the group is affected by a running deployment, then the update operation will fail.
|
56
57
|
# The current deployment can be overridden by setting the `force` query parameter.
|
57
|
-
|
58
|
+
# ++dry_run++: Get a preview of the deployment steps Marathon would run for a given group update.
|
59
|
+
def change!(hash, force = false, dry_run = false)
|
58
60
|
Marathon::Util.keywordize_hash!(hash)
|
59
61
|
if hash[:version] and hash.size > 1
|
60
62
|
# remove :version if it's not the only key
|
@@ -62,7 +64,7 @@ class Marathon::Group < Marathon::Base
|
|
62
64
|
else
|
63
65
|
new_hash = hash
|
64
66
|
end
|
65
|
-
self.class.change(id, new_hash, force)
|
67
|
+
self.class.change(id, new_hash, force, dry_run)
|
66
68
|
end
|
67
69
|
|
68
70
|
# Create a new version with parameters of an old version.
|
@@ -159,11 +161,17 @@ Version: #{version}
|
|
159
161
|
# ++hash++: Hash of attributes to change.
|
160
162
|
# ++force++: If the group is affected by a running deployment, then the update operation will fail.
|
161
163
|
# The current deployment can be overridden by setting the `force` query parameter.
|
162
|
-
|
164
|
+
# ++dry_run++: Get a preview of the deployment steps Marathon would run for a given group update.
|
165
|
+
def change(id, hash, force = false, dry_run = false)
|
163
166
|
query = {}
|
164
167
|
query[:force] = true if force
|
168
|
+
query[:dryRun] = true if dry_run
|
165
169
|
json = Marathon.connection.put("/v2/groups/#{id}", query, :body => hash)
|
166
|
-
|
170
|
+
if dry_run
|
171
|
+
json['steps'].map { |e| Marathon::DeploymentStep.new(e) }
|
172
|
+
else
|
173
|
+
Marathon::DeploymentInfo.new(json)
|
174
|
+
end
|
167
175
|
end
|
168
176
|
end
|
169
177
|
end
|
data/lib/marathon/task.rb
CHANGED
@@ -14,8 +14,7 @@ class Marathon::Task < Marathon::Base
|
|
14
14
|
# ++scale++: Scale the app down (i.e. decrement its instances setting by the number of tasks killed)
|
15
15
|
# after killing the specified tasks.
|
16
16
|
def delete!(scale = false)
|
17
|
-
new_task = self.class.delete(
|
18
|
-
@info = new_task.info
|
17
|
+
new_task = self.class.delete(id, scale)
|
19
18
|
end
|
20
19
|
alias :kill! :delete!
|
21
20
|
|
@@ -55,16 +54,15 @@ Version: #{version}
|
|
55
54
|
json.map { |j| new(j) }
|
56
55
|
end
|
57
56
|
|
58
|
-
# Kill the
|
59
|
-
# ++
|
60
|
-
# ++id++: Id of target task.
|
57
|
+
# Kill the given list of tasks and scale apps if requested.
|
58
|
+
# ++ids++: Id or list of ids with target tasks.
|
61
59
|
# ++scale++: Scale the app down (i.e. decrement its instances setting by the number of tasks killed)
|
62
60
|
# after killing the specified tasks.
|
63
|
-
def delete(
|
61
|
+
def delete(ids, scale = false)
|
64
62
|
query = {}
|
65
63
|
query[:scale] = true if scale
|
66
|
-
|
67
|
-
|
64
|
+
ids = [ids] if ids.is_a?(String)
|
65
|
+
Marathon.connection.post("/v2/tasks/delete", query, :body => {:ids => ids})
|
68
66
|
end
|
69
67
|
alias :remove :delete
|
70
68
|
alias :kill :delete
|
@@ -85,4 +83,4 @@ Version: #{version}
|
|
85
83
|
alias :kill_all :delete_all
|
86
84
|
end
|
87
85
|
|
88
|
-
end
|
86
|
+
end
|
data/lib/marathon/version.rb
CHANGED
data/lib/marathon.rb
CHANGED
@@ -21,6 +21,8 @@ module Marathon
|
|
21
21
|
require 'marathon/container'
|
22
22
|
require 'marathon/health_check'
|
23
23
|
require 'marathon/deployment_info'
|
24
|
+
require 'marathon/deployment_action'
|
25
|
+
require 'marathon/deployment_step'
|
24
26
|
require 'marathon/group'
|
25
27
|
require 'marathon/app'
|
26
28
|
require 'marathon/deployment'
|