marathon-api 0.9.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.simplecov +2 -2
- data/.travis.yml +1 -1
- data/README.md +40 -14
- data/bin/marathon +242 -0
- data/fixtures/marathon_docker_sample_2.json +2 -1
- data/fixtures/vcr/Marathon_App/_restart/restarts_an_app.yml +32 -0
- data/fixtures/vcr/Marathon_Group/_changes/changes_the_group.yml +61 -0
- data/fixtures/vcr/Marathon_Group/_delete/deletes_the_group.yml +32 -0
- data/fixtures/vcr/Marathon_Group/_delete/fails_deleting_not_existing_app.yml +32 -0
- data/fixtures/vcr/Marathon_Group/_get/fails_getting_not_existing_app.yml +32 -0
- data/fixtures/vcr/Marathon_Group/_get/gets_the_group.yml +32 -0
- data/fixtures/vcr/Marathon_Group/_list/lists_apps.yml +33 -0
- data/fixtures/vcr/Marathon_Group/_start/fails_getting_not_existing_group.yml +32 -0
- data/fixtures/vcr/Marathon_Group/_start/starts_the_group.yml +35 -0
- data/lib/marathon.rb +33 -5
- data/lib/marathon/app.rb +72 -22
- data/lib/marathon/base.rb +32 -0
- data/lib/marathon/connection.rb +32 -22
- data/lib/marathon/constraint.rb +39 -0
- data/lib/marathon/container.rb +41 -0
- data/lib/marathon/container_docker.rb +33 -0
- data/lib/marathon/container_docker_port_mapping.rb +32 -0
- data/lib/marathon/container_volume.rb +31 -0
- data/lib/marathon/deployment.rb +5 -15
- data/lib/marathon/deployment_info.rb +20 -0
- data/lib/marathon/error.rb +8 -2
- data/lib/marathon/group.rb +166 -0
- data/lib/marathon/health_check.rb +35 -0
- data/lib/marathon/queue.rb +4 -13
- data/lib/marathon/task.rb +15 -12
- data/lib/marathon/util.rb +47 -3
- data/lib/marathon/version.rb +1 -1
- data/marathon-api.gemspec +4 -3
- data/spec/marathon/app_spec.rb +108 -50
- data/spec/marathon/base_spec.rb +53 -0
- data/spec/marathon/connection_spec.rb +1 -1
- data/spec/marathon/constraint_spec.rb +27 -0
- data/spec/marathon/container_docker_port_mapping_spec.rb +55 -0
- data/spec/marathon/container_docker_spec.rb +42 -0
- data/spec/marathon/container_spec.rb +40 -0
- data/spec/marathon/container_volume_spec.rb +50 -0
- data/spec/marathon/deployment_info_spec.rb +43 -0
- data/spec/marathon/deployment_spec.rb +15 -16
- data/spec/marathon/error_spec.rb +17 -0
- data/spec/marathon/group_spec.rb +172 -0
- data/spec/marathon/health_check_spec.rb +50 -0
- data/spec/marathon/marathon_spec.rb +31 -0
- data/spec/marathon/queue_spec.rb +2 -2
- data/spec/marathon/task_spec.rb +24 -11
- data/spec/marathon/util_spec.rb +21 -1
- metadata +58 -6
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Marathon::HealthCheck do
|
4
|
+
|
5
|
+
describe '#init' do
|
6
|
+
subject { described_class.new({'protocol' => 'TCP'}) }
|
7
|
+
|
8
|
+
its(:protocol) { should == 'TCP' }
|
9
|
+
its(:portIndex) { should == 0 }
|
10
|
+
its(:timeoutSeconds) { should == 20 }
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#to_s with protocol==HTTP' do
|
14
|
+
subject { described_class.new({'protocol' => 'HTTP', 'portIndex' => 0, 'path' => '/ping'}) }
|
15
|
+
|
16
|
+
let(:expected_string) do
|
17
|
+
'Marathon::HealthCheck { :protocol => HTTP :portIndex => 0 :path => /ping }'
|
18
|
+
end
|
19
|
+
|
20
|
+
its(:to_s) { should == expected_string }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#to_s with protocol==TCP' do
|
24
|
+
subject { described_class.new({'protocol' => 'TCP', 'portIndex' => 0, 'path' => '/ping'}) }
|
25
|
+
|
26
|
+
let(:expected_string) do
|
27
|
+
'Marathon::HealthCheck { :protocol => TCP :portIndex => 0 }'
|
28
|
+
end
|
29
|
+
|
30
|
+
its(:to_s) { should == expected_string }
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#to_s with protocol==COMMAND' do
|
34
|
+
subject { described_class.new({'protocol' => 'COMMAND', 'command' => 'true'}) }
|
35
|
+
|
36
|
+
let(:expected_string) do
|
37
|
+
'Marathon::HealthCheck { :protocol => COMMAND :command => true }'
|
38
|
+
end
|
39
|
+
|
40
|
+
its(:to_s) { should == expected_string }
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#to_json' do
|
44
|
+
subject { described_class.new({'protocol' => 'HTTP', 'portIndex' => 0, 'path' => '/ping'}) }
|
45
|
+
|
46
|
+
its(:to_json) { should == '{"gracePeriodSeconds":300,"intervalSeconds":60,"maxConsecutiveFailures":3,' \
|
47
|
+
+ '"path":"/ping","portIndex":0,"protocol":"HTTP","timeoutSeconds":20}' }
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -24,6 +24,37 @@ describe Marathon do
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
describe '.options=' do
|
28
|
+
subject { described_class }
|
29
|
+
|
30
|
+
it 'sets new options' do
|
31
|
+
described_class.options = {:foo => 'bar'}
|
32
|
+
expect(described_class.options).to eq({:foo => 'bar'})
|
33
|
+
|
34
|
+
# reset connection after running this spec
|
35
|
+
described_class.options = nil
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'resets connection' do
|
39
|
+
old_connection = described_class.connection
|
40
|
+
described_class.options = {:foo => 'bar'}
|
41
|
+
|
42
|
+
expect(described_class.connection).not_to be(old_connection)
|
43
|
+
|
44
|
+
# reset connection after running this spec
|
45
|
+
described_class.options = nil
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'adds :basic_auth options for :username and :password' do
|
49
|
+
described_class.options = {:username => 'user', :password => 'password'}
|
50
|
+
expect(described_class.connection.options)
|
51
|
+
.to eq({:basic_auth => {:username => 'user', :password => 'password'}})
|
52
|
+
|
53
|
+
# reset connection after running this spec
|
54
|
+
described_class.options = nil
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
27
58
|
describe '.info' do
|
28
59
|
subject { described_class }
|
29
60
|
|
data/spec/marathon/queue_spec.rb
CHANGED
@@ -19,7 +19,7 @@ describe Marathon::Queue do
|
|
19
19
|
|
20
20
|
it 'has delay' do
|
21
21
|
expect(subject.delay).to be_instance_of(Hash)
|
22
|
-
expect(subject.delay[
|
22
|
+
expect(subject.delay[:overdue]).to be(true)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -30,7 +30,7 @@ describe Marathon::Queue do
|
|
30
30
|
}) }
|
31
31
|
|
32
32
|
let(:expected_string) do
|
33
|
-
'Marathon::Queue { :appId => /app/foo :delay => {
|
33
|
+
'Marathon::Queue { :appId => /app/foo :delay => {:overdue=>true} }'
|
34
34
|
end
|
35
35
|
|
36
36
|
its(:to_s) { should == expected_string }
|
data/spec/marathon/task_spec.rb
CHANGED
@@ -4,16 +4,29 @@ describe Marathon::Task do
|
|
4
4
|
|
5
5
|
describe '#to_s' do
|
6
6
|
subject { described_class.new({
|
7
|
-
'id'
|
8
|
-
'appId'
|
9
|
-
'host'
|
7
|
+
'id' => 'task-id-foo',
|
8
|
+
'appId' => '/app/foo',
|
9
|
+
'host' => 'foo-host',
|
10
|
+
'ports' => [31000, 31001],
|
11
|
+
'version' => 'foo-version'
|
10
12
|
}) }
|
11
13
|
|
12
14
|
let(:expected_string) do
|
13
15
|
"Marathon::Task { :id => task-id-foo :appId => /app/foo :host => foo-host }"
|
14
16
|
end
|
15
17
|
|
18
|
+
let(:expected_pretty_string) do
|
19
|
+
"Task ID: task-id-foo\n" + \
|
20
|
+
"App ID: /app/foo\n" + \
|
21
|
+
"Host: foo-host\n" + \
|
22
|
+
"Ports: 31000,31001\n" + \
|
23
|
+
"Staged at: \n" + \
|
24
|
+
"Started at: \n" + \
|
25
|
+
"Version: foo-version"
|
26
|
+
end
|
27
|
+
|
16
28
|
its(:to_s) { should == expected_string }
|
29
|
+
its(:to_pretty_s) { should == expected_pretty_string }
|
17
30
|
end
|
18
31
|
|
19
32
|
describe '#to_json' do
|
@@ -42,7 +55,7 @@ describe Marathon::Task do
|
|
42
55
|
})
|
43
56
|
end
|
44
57
|
task.delete!
|
45
|
-
expect(task.info[
|
58
|
+
expect(task.info[:deleted]).to be(true)
|
46
59
|
end
|
47
60
|
end
|
48
61
|
|
@@ -51,18 +64,18 @@ describe Marathon::Task do
|
|
51
64
|
|
52
65
|
it 'raises error when run with strange status' do
|
53
66
|
expect {
|
54
|
-
|
67
|
+
subject.list('foo')
|
55
68
|
}.to raise_error(Marathon::Error::ArgumentError)
|
56
69
|
end
|
57
70
|
|
58
71
|
it 'lists tasks', :vcr do
|
59
|
-
tasks =
|
72
|
+
tasks = subject.list
|
60
73
|
expect(tasks.size).to be_within(1).of(2)
|
61
74
|
expect(tasks.first).to be_instance_of(described_class)
|
62
75
|
end
|
63
76
|
|
64
77
|
it 'lists running tasks', :vcr do
|
65
|
-
tasks =
|
78
|
+
tasks = subject.list('running')
|
66
79
|
expect(tasks.size).to be_within(1).of(2)
|
67
80
|
expect(tasks.first).to be_instance_of(described_class)
|
68
81
|
end
|
@@ -72,7 +85,7 @@ describe Marathon::Task do
|
|
72
85
|
subject { described_class }
|
73
86
|
|
74
87
|
it 'gets tasks of an app', :vcr do
|
75
|
-
tasks =
|
88
|
+
tasks = subject.get('/ubuntu2')
|
76
89
|
expect(tasks.size).to eq(1)
|
77
90
|
expect(tasks.first).to be_instance_of(described_class)
|
78
91
|
expect(tasks.first.appId).to eq('/ubuntu2')
|
@@ -83,8 +96,8 @@ describe Marathon::Task do
|
|
83
96
|
subject { described_class }
|
84
97
|
|
85
98
|
it 'kills a tasks of an app', :vcr do
|
86
|
-
tasks =
|
87
|
-
task =
|
99
|
+
tasks = subject.get('/ubuntu2')
|
100
|
+
task = subject.delete('/ubuntu2', tasks.first.id)
|
88
101
|
task.id == tasks.first.id
|
89
102
|
end
|
90
103
|
end
|
@@ -93,7 +106,7 @@ describe Marathon::Task do
|
|
93
106
|
subject { described_class }
|
94
107
|
|
95
108
|
it 'kills all tasks of an app', :vcr do
|
96
|
-
|
109
|
+
subject.delete_all('/ubuntu2')
|
97
110
|
end
|
98
111
|
end
|
99
112
|
|
data/spec/marathon/util_spec.rb
CHANGED
@@ -41,4 +41,24 @@ describe Marathon::Util do
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
|
44
|
+
describe '.keywordize_hash' do
|
45
|
+
subject { described_class }
|
46
|
+
|
47
|
+
it 'keywordizes the hash' do
|
48
|
+
expect(subject.keywordize_hash({
|
49
|
+
'foo' => 'bar',
|
50
|
+
'f00' => {'w00h00' => 'yeah'},
|
51
|
+
'bang' => [{'tricky' => 'one'}],
|
52
|
+
'env' => {'foo' => 'bar'},
|
53
|
+
'null' => nil
|
54
|
+
})).to eq({
|
55
|
+
:foo => 'bar',
|
56
|
+
:f00 => {:w00h00 => 'yeah'},
|
57
|
+
:bang => [{:tricky => 'one'}],
|
58
|
+
:env => {'foo' => 'bar'},
|
59
|
+
:null => nil
|
60
|
+
})
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marathon-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Bechstein
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.11'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: trollop
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -166,8 +180,9 @@ dependencies:
|
|
166
180
|
version: '0'
|
167
181
|
description: A simple REST client for the Marathon Remote API
|
168
182
|
email:
|
169
|
-
-
|
170
|
-
executables:
|
183
|
+
- felix.bechstein@otto.de
|
184
|
+
executables:
|
185
|
+
- marathon
|
171
186
|
extensions: []
|
172
187
|
extra_rdoc_files: []
|
173
188
|
files:
|
@@ -180,6 +195,7 @@ files:
|
|
180
195
|
- README.md
|
181
196
|
- Rakefile
|
182
197
|
- TESTING.md
|
198
|
+
- bin/marathon
|
183
199
|
- fixtures/marathon_docker_sample.json
|
184
200
|
- fixtures/marathon_docker_sample_2.json
|
185
201
|
- fixtures/vcr/Marathon/_info/returns_the_info_hash.yml
|
@@ -192,6 +208,7 @@ files:
|
|
192
208
|
- fixtures/vcr/Marathon_App/_get/gets_the_app.yml
|
193
209
|
- fixtures/vcr/Marathon_App/_list/lists_apps.yml
|
194
210
|
- fixtures/vcr/Marathon_App/_restart/fails_restarting_not_existing_app.yml
|
211
|
+
- fixtures/vcr/Marathon_App/_restart/restarts_an_app.yml
|
195
212
|
- fixtures/vcr/Marathon_App/_start/fails_getting_not_existing_app.yml
|
196
213
|
- fixtures/vcr/Marathon_App/_start/starts_the_app.yml
|
197
214
|
- fixtures/vcr/Marathon_App/_tasks/has_tasks.yml
|
@@ -202,6 +219,14 @@ files:
|
|
202
219
|
- fixtures/vcr/Marathon_EventSubscriptions/_list/lists_callbacks.yml
|
203
220
|
- fixtures/vcr/Marathon_EventSubscriptions/_register/registers_callback.yml
|
204
221
|
- fixtures/vcr/Marathon_EventSubscriptions/_unregister/unregisters_callback.yml
|
222
|
+
- fixtures/vcr/Marathon_Group/_changes/changes_the_group.yml
|
223
|
+
- fixtures/vcr/Marathon_Group/_delete/deletes_the_group.yml
|
224
|
+
- fixtures/vcr/Marathon_Group/_delete/fails_deleting_not_existing_app.yml
|
225
|
+
- fixtures/vcr/Marathon_Group/_get/fails_getting_not_existing_app.yml
|
226
|
+
- fixtures/vcr/Marathon_Group/_get/gets_the_group.yml
|
227
|
+
- fixtures/vcr/Marathon_Group/_list/lists_apps.yml
|
228
|
+
- fixtures/vcr/Marathon_Group/_start/fails_getting_not_existing_group.yml
|
229
|
+
- fixtures/vcr/Marathon_Group/_start/starts_the_group.yml
|
205
230
|
- fixtures/vcr/Marathon_Leader/_delete/delete/.yml
|
206
231
|
- fixtures/vcr/Marathon_Leader/_get/get/.yml
|
207
232
|
- fixtures/vcr/Marathon_Queue/_list/lists_queue.yml
|
@@ -212,10 +237,19 @@ files:
|
|
212
237
|
- fixtures/vcr/Marathon_Task/_list/lists_tasks.yml
|
213
238
|
- lib/marathon.rb
|
214
239
|
- lib/marathon/app.rb
|
240
|
+
- lib/marathon/base.rb
|
215
241
|
- lib/marathon/connection.rb
|
242
|
+
- lib/marathon/constraint.rb
|
243
|
+
- lib/marathon/container.rb
|
244
|
+
- lib/marathon/container_docker.rb
|
245
|
+
- lib/marathon/container_docker_port_mapping.rb
|
246
|
+
- lib/marathon/container_volume.rb
|
216
247
|
- lib/marathon/deployment.rb
|
248
|
+
- lib/marathon/deployment_info.rb
|
217
249
|
- lib/marathon/error.rb
|
218
250
|
- lib/marathon/event_subscriptions.rb
|
251
|
+
- lib/marathon/group.rb
|
252
|
+
- lib/marathon/health_check.rb
|
219
253
|
- lib/marathon/leader.rb
|
220
254
|
- lib/marathon/queue.rb
|
221
255
|
- lib/marathon/task.rb
|
@@ -223,17 +257,26 @@ files:
|
|
223
257
|
- lib/marathon/version.rb
|
224
258
|
- marathon-api.gemspec
|
225
259
|
- spec/marathon/app_spec.rb
|
260
|
+
- spec/marathon/base_spec.rb
|
226
261
|
- spec/marathon/connection_spec.rb
|
262
|
+
- spec/marathon/constraint_spec.rb
|
263
|
+
- spec/marathon/container_docker_port_mapping_spec.rb
|
264
|
+
- spec/marathon/container_docker_spec.rb
|
265
|
+
- spec/marathon/container_spec.rb
|
266
|
+
- spec/marathon/container_volume_spec.rb
|
267
|
+
- spec/marathon/deployment_info_spec.rb
|
227
268
|
- spec/marathon/deployment_spec.rb
|
228
269
|
- spec/marathon/error_spec.rb
|
229
270
|
- spec/marathon/event_subscriptions_spec.rb
|
271
|
+
- spec/marathon/group_spec.rb
|
272
|
+
- spec/marathon/health_check_spec.rb
|
230
273
|
- spec/marathon/leader_spec.rb
|
231
274
|
- spec/marathon/marathon_spec.rb
|
232
275
|
- spec/marathon/queue_spec.rb
|
233
276
|
- spec/marathon/task_spec.rb
|
234
277
|
- spec/marathon/util_spec.rb
|
235
278
|
- spec/spec_helper.rb
|
236
|
-
homepage: https://github.com/
|
279
|
+
homepage: https://github.com/otto-de/marathon-api
|
237
280
|
licenses:
|
238
281
|
- MIT
|
239
282
|
metadata: {}
|
@@ -253,16 +296,25 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
253
296
|
version: '0'
|
254
297
|
requirements: []
|
255
298
|
rubyforge_project:
|
256
|
-
rubygems_version: 2.
|
299
|
+
rubygems_version: 2.4.3
|
257
300
|
signing_key:
|
258
301
|
specification_version: 4
|
259
302
|
summary: A simple REST client for the Marathon Remote API
|
260
303
|
test_files:
|
261
304
|
- spec/marathon/app_spec.rb
|
305
|
+
- spec/marathon/base_spec.rb
|
262
306
|
- spec/marathon/connection_spec.rb
|
307
|
+
- spec/marathon/constraint_spec.rb
|
308
|
+
- spec/marathon/container_docker_port_mapping_spec.rb
|
309
|
+
- spec/marathon/container_docker_spec.rb
|
310
|
+
- spec/marathon/container_spec.rb
|
311
|
+
- spec/marathon/container_volume_spec.rb
|
312
|
+
- spec/marathon/deployment_info_spec.rb
|
263
313
|
- spec/marathon/deployment_spec.rb
|
264
314
|
- spec/marathon/error_spec.rb
|
265
315
|
- spec/marathon/event_subscriptions_spec.rb
|
316
|
+
- spec/marathon/group_spec.rb
|
317
|
+
- spec/marathon/health_check_spec.rb
|
266
318
|
- spec/marathon/leader_spec.rb
|
267
319
|
- spec/marathon/marathon_spec.rb
|
268
320
|
- spec/marathon/queue_spec.rb
|