centurion 1.4.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/centurion/deploy.rb +21 -0
- data/lib/centurion/version.rb +1 -1
- data/spec/deploy_spec.rb +104 -1
- data/spec/dogestry_spec.rb +4 -2
- metadata +2 -2
data/lib/centurion/deploy.rb
CHANGED
@@ -138,19 +138,40 @@ module Centurion::Deploy
|
|
138
138
|
|
139
139
|
private
|
140
140
|
|
141
|
+
# By default we always use on-failure policy.
|
142
|
+
def build_host_config_restart_policy(host_config={})
|
143
|
+
host_config['RestartPolicy'] = {}
|
144
|
+
|
145
|
+
restart_policy_name = fetch(:restart_policy_name) || 'on-failure'
|
146
|
+
restart_policy_name = 'on-failure' unless ["always", "on-failure", "no"].include?(restart_policy_name)
|
147
|
+
|
148
|
+
restart_policy_max_retry_count = fetch(:restart_policy_max_retry_count) || 10
|
149
|
+
|
150
|
+
host_config['RestartPolicy']['Name'] = restart_policy_name
|
151
|
+
host_config['RestartPolicy']['MaximumRetryCount'] = restart_policy_max_retry_count if restart_policy_name == 'on-failure'
|
152
|
+
|
153
|
+
host_config
|
154
|
+
end
|
155
|
+
|
141
156
|
def start_container_with_config(target_server, volumes, port_bindings, container_config)
|
142
157
|
info "Creating new container for #{container_config['Image'][0..7]}"
|
143
158
|
new_container = target_server.create_container(container_config, fetch(:name))
|
144
159
|
|
145
160
|
host_config = {}
|
161
|
+
|
146
162
|
# Map some host volumes if needed
|
147
163
|
host_config['Binds'] = volumes if volumes && !volumes.empty?
|
164
|
+
|
148
165
|
# Bind the ports
|
149
166
|
host_config['PortBindings'] = port_bindings
|
167
|
+
|
150
168
|
# DNS if specified
|
151
169
|
dns = fetch(:custom_dns)
|
152
170
|
host_config['Dns'] = dns if dns
|
153
171
|
|
172
|
+
# Restart Policy
|
173
|
+
host_config = build_host_config_restart_policy(host_config)
|
174
|
+
|
154
175
|
info "Starting new container #{new_container['Id'][0..7]}"
|
155
176
|
target_server.start_container(new_container['Id'], host_config)
|
156
177
|
|
data/lib/centurion/version.rb
CHANGED
data/spec/deploy_spec.rb
CHANGED
@@ -241,7 +241,110 @@ describe Centurion::Deploy do
|
|
241
241
|
'abc123456',
|
242
242
|
{
|
243
243
|
'PortBindings' => bindings,
|
244
|
-
'Dns' => '8.8.8.8'
|
244
|
+
'Dns' => '8.8.8.8',
|
245
|
+
'RestartPolicy' => {
|
246
|
+
'Name' => 'on-failure',
|
247
|
+
'MaximumRetryCount' => 10
|
248
|
+
}
|
249
|
+
}
|
250
|
+
).once
|
251
|
+
|
252
|
+
test_deploy.start_new_container(server, 'image_id', bindings, {}, nil, nil)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
describe '#start_container_with_restart_policy' do
|
257
|
+
let(:bindings) { {'80/tcp'=>[{'HostIp'=>'0.0.0.0', 'HostPort'=>'80'}]} }
|
258
|
+
|
259
|
+
before do
|
260
|
+
allow(server).to receive(:container_config_for).and_return({
|
261
|
+
'Image' => 'image_id',
|
262
|
+
'Hostname' => server.hostname,
|
263
|
+
})
|
264
|
+
|
265
|
+
allow(server).to receive(:create_container).and_return({
|
266
|
+
'Id' => 'abc123456'
|
267
|
+
})
|
268
|
+
|
269
|
+
allow(server).to receive(:inspect_container)
|
270
|
+
end
|
271
|
+
|
272
|
+
it 'pass no restart policy to start_container' do
|
273
|
+
expect(server).to receive(:start_container).with(
|
274
|
+
'abc123456',
|
275
|
+
{
|
276
|
+
'PortBindings' => bindings,
|
277
|
+
'RestartPolicy' => {
|
278
|
+
'Name' => 'on-failure',
|
279
|
+
'MaximumRetryCount' => 10
|
280
|
+
}
|
281
|
+
}
|
282
|
+
).once
|
283
|
+
|
284
|
+
test_deploy.start_new_container(server, 'image_id', bindings, {}, nil, nil)
|
285
|
+
end
|
286
|
+
|
287
|
+
it 'pass "always" restart policy to start_container' do
|
288
|
+
allow(test_deploy).to receive(:fetch).with(:restart_policy_name).and_return('always')
|
289
|
+
|
290
|
+
expect(server).to receive(:start_container).with(
|
291
|
+
'abc123456',
|
292
|
+
{
|
293
|
+
'PortBindings' => bindings,
|
294
|
+
'RestartPolicy' => {
|
295
|
+
'Name' => 'always'
|
296
|
+
}
|
297
|
+
}
|
298
|
+
).once
|
299
|
+
|
300
|
+
test_deploy.start_new_container(server, 'image_id', bindings, {}, nil, nil)
|
301
|
+
end
|
302
|
+
|
303
|
+
it 'pass "on-failure with 50 retries" restart policy to start_container' do
|
304
|
+
allow(test_deploy).to receive(:fetch).with(:restart_policy_name).and_return('on-failure')
|
305
|
+
allow(test_deploy).to receive(:fetch).with(:restart_policy_max_retry_count).and_return(50)
|
306
|
+
|
307
|
+
expect(server).to receive(:start_container).with(
|
308
|
+
'abc123456',
|
309
|
+
{
|
310
|
+
'PortBindings' => bindings,
|
311
|
+
'RestartPolicy' => {
|
312
|
+
'Name' => 'on-failure',
|
313
|
+
'MaximumRetryCount' => 50
|
314
|
+
}
|
315
|
+
}
|
316
|
+
).once
|
317
|
+
|
318
|
+
test_deploy.start_new_container(server, 'image_id', bindings, {}, nil, nil)
|
319
|
+
end
|
320
|
+
|
321
|
+
it 'pass "no" restart policy to start_container' do
|
322
|
+
allow(test_deploy).to receive(:fetch).with(:restart_policy_name).and_return('no')
|
323
|
+
|
324
|
+
expect(server).to receive(:start_container).with(
|
325
|
+
'abc123456',
|
326
|
+
{
|
327
|
+
'PortBindings' => bindings,
|
328
|
+
'RestartPolicy' => {
|
329
|
+
'Name' => 'no'
|
330
|
+
}
|
331
|
+
}
|
332
|
+
).once
|
333
|
+
|
334
|
+
test_deploy.start_new_container(server, 'image_id', bindings, {}, nil, nil)
|
335
|
+
end
|
336
|
+
|
337
|
+
it 'pass "garbage" restart policy to start_container' do
|
338
|
+
allow(test_deploy).to receive(:fetch).with(:restart_policy_name).and_return('garbage')
|
339
|
+
|
340
|
+
expect(server).to receive(:start_container).with(
|
341
|
+
'abc123456',
|
342
|
+
{
|
343
|
+
'PortBindings' => bindings,
|
344
|
+
'RestartPolicy' => {
|
345
|
+
'Name' => 'on-failure',
|
346
|
+
'MaximumRetryCount' => 10
|
347
|
+
}
|
245
348
|
}
|
246
349
|
).once
|
247
350
|
|
data/spec/dogestry_spec.rb
CHANGED
@@ -50,8 +50,10 @@ describe Centurion::Dogestry do
|
|
50
50
|
|
51
51
|
describe '#pull' do
|
52
52
|
it 'returns correct value' do
|
53
|
-
|
54
|
-
|
53
|
+
if registry.which('dogestry')
|
54
|
+
expect(registry).to receive(:echo).with("dogestry pull #{registry.s3_url} #{repo}")
|
55
|
+
registry.pull(repo, {})
|
56
|
+
end
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: centurion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -21,7 +21,7 @@ authors:
|
|
21
21
|
autorequire:
|
22
22
|
bindir: bin
|
23
23
|
cert_chain: []
|
24
|
-
date: 2015-01-
|
24
|
+
date: 2015-01-09 00:00:00.000000000 Z
|
25
25
|
dependencies:
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: trollop
|