nomade 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/nomade/deployer.rb +13 -11
- data/lib/nomade/http.rb +6 -5
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 768219b7b7d377ec2de09fe3230cb34637841bd53aec49ef68a7ad01a97b57bf
|
4
|
+
data.tar.gz: 13cc5e6ffd82d49247e65092ac8270beae7e942374f87cc37de39240f126e0c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 326a7ea66c3182410714d671305f97cb9fcb2a8fc3b63545c5a814508cdfd559316d2d76b11e9e80247fb86821f6f5924b9454762e7d40000487e3daf154e23f
|
7
|
+
data.tar.gz: 5f72400e42707128c066a188d90ced7791fbe104af2ef00062e89d62f253d27dd5287500a8e9ee41daf6c44febfd220644c5d1fe445f74eb013c5a4f5fb1f4c1
|
data/lib/nomade/deployer.rb
CHANGED
@@ -12,6 +12,9 @@ module Nomade
|
|
12
12
|
|
13
13
|
@timeout = opts.fetch(:timeout, 60 * 3)
|
14
14
|
|
15
|
+
@linger = opts.fetch(:linger, 8..28)
|
16
|
+
raise GeneralError.new("Linger needs to be a range, supplied with: #{@linger.class}") unless @linger.class == Range
|
17
|
+
|
15
18
|
@hooks = {
|
16
19
|
Nomade::Hooks::DEPLOY_RUNNING => [],
|
17
20
|
Nomade::Hooks::DEPLOY_FINISHED => [],
|
@@ -21,20 +24,18 @@ module Nomade
|
|
21
24
|
Nomade::Hooks::DISPATCH_FINISHED => [],
|
22
25
|
Nomade::Hooks::DISPATCH_FAILED => [],
|
23
26
|
}
|
24
|
-
add_hook(Nomade::Hooks::DEPLOY_FAILED, lambda {|
|
27
|
+
add_hook(Nomade::Hooks::DEPLOY_FAILED, lambda {|_hook_type, _nomad_job, messages|
|
25
28
|
@logger.error "Failing deploy:"
|
26
29
|
messages.each do |message|
|
27
30
|
@logger.error "- #{message}"
|
28
31
|
end
|
29
32
|
})
|
30
|
-
add_hook(Nomade::Hooks::DISPATCH_FAILED, lambda {|
|
33
|
+
add_hook(Nomade::Hooks::DISPATCH_FAILED, lambda {|_hook_type, _nomad_job, messages|
|
31
34
|
@logger.error "Failing dispatch:"
|
32
35
|
messages.each do |message|
|
33
36
|
@logger.error "- #{message}"
|
34
37
|
end
|
35
38
|
})
|
36
|
-
|
37
|
-
self
|
38
39
|
end
|
39
40
|
|
40
41
|
def init_job(template_file, image_full_name, template_variables = {})
|
@@ -155,6 +156,8 @@ module Nomade
|
|
155
156
|
end
|
156
157
|
|
157
158
|
def stop!(purge = false)
|
159
|
+
check_for_job_init
|
160
|
+
|
158
161
|
@http.stop_job(@nomad_job, purge)
|
159
162
|
end
|
160
163
|
|
@@ -183,7 +186,7 @@ module Nomade
|
|
183
186
|
@logger.info "Checking cluster for connectivity and capacity.."
|
184
187
|
plan_data = @http.plan_job(@nomad_job)
|
185
188
|
|
186
|
-
sum_of_changes = plan_data["Annotations"]["DesiredTGUpdates"].map { |
|
189
|
+
sum_of_changes = plan_data["Annotations"]["DesiredTGUpdates"].map { |_group_name, task_group_updates|
|
187
190
|
task_group_updates["Stop"] +
|
188
191
|
task_group_updates["Place"] +
|
189
192
|
task_group_updates["Migrate"] +
|
@@ -356,7 +359,7 @@ module Nomade
|
|
356
359
|
end
|
357
360
|
|
358
361
|
@logger.info "Checking cluster for connectivity and capacity.."
|
359
|
-
|
362
|
+
_plan_data = @http.plan_job(@nomad_job)
|
360
363
|
|
361
364
|
dispatch_job = @http.dispatch_job(@nomad_job, payload_data: payload_data, payload_metadata: payload_metadata)
|
362
365
|
@evaluation_id = dispatch_job["EvalID"]
|
@@ -398,7 +401,6 @@ module Nomade
|
|
398
401
|
|
399
402
|
announced_completed = []
|
400
403
|
promoted = false
|
401
|
-
failed = false
|
402
404
|
succesful_deployment = nil
|
403
405
|
while(succesful_deployment == nil) do
|
404
406
|
json = @http.deployment_request(@deployment_id)
|
@@ -408,9 +410,9 @@ module Nomade
|
|
408
410
|
|
409
411
|
desired_canaries = task_data["DesiredCanaries"]
|
410
412
|
desired_total = task_data["DesiredTotal"]
|
411
|
-
|
413
|
+
_placed_allocations = task_data["PlacedAllocs"]
|
412
414
|
healthy_allocations = task_data["HealthyAllocs"]
|
413
|
-
|
415
|
+
_unhealthy_allocations = task_data["UnhealthyAllocs"]
|
414
416
|
|
415
417
|
if manual_work_required
|
416
418
|
@logger.info "#{json["ID"]} #{task_name}: #{healthy_allocations}/#{desired_canaries}/#{desired_total} (Healthy/WantedCanaries/Total)"
|
@@ -435,7 +437,7 @@ module Nomade
|
|
435
437
|
|
436
438
|
if succesful_deployment == nil && json["TaskGroups"].values.all?{|tg| tg["HealthyAllocs"] >= tg["DesiredCanaries"]}
|
437
439
|
if !promoted
|
438
|
-
random_linger = rand(
|
440
|
+
random_linger = rand(@linger)
|
439
441
|
@logger.info "Lingering around for #{random_linger} seconds before deployment.."
|
440
442
|
sleep(random_linger)
|
441
443
|
|
@@ -504,7 +506,7 @@ module Nomade
|
|
504
506
|
|
505
507
|
tasks = get_tasks(allocations)
|
506
508
|
upcoming_tasks = get_upcoming_tasks(tasks)
|
507
|
-
|
509
|
+
_succesful_tasks = get_succesful_tasks(tasks)
|
508
510
|
failed_tasks = get_failed_tasks(tasks)
|
509
511
|
|
510
512
|
if upcoming_tasks.size == 0
|
data/lib/nomade/http.rb
CHANGED
@@ -90,7 +90,7 @@ module Nomade
|
|
90
90
|
"DeploymentID" => deployment_id,
|
91
91
|
"All" => true,
|
92
92
|
}.to_json
|
93
|
-
|
93
|
+
_request(:post, "/v1/deployment/promote/#{deployment_id}", body: req_body)
|
94
94
|
|
95
95
|
return true
|
96
96
|
rescue StandardError => e
|
@@ -99,7 +99,7 @@ module Nomade
|
|
99
99
|
end
|
100
100
|
|
101
101
|
def fail_deployment(deployment_id)
|
102
|
-
|
102
|
+
_request(:post, "/v1/deployment/fail/#{deployment_id}")
|
103
103
|
return true
|
104
104
|
rescue StandardError => e
|
105
105
|
Nomade.logger.fatal "HTTP Request failed (#{e.message})"
|
@@ -125,7 +125,7 @@ module Nomade
|
|
125
125
|
end
|
126
126
|
|
127
127
|
true
|
128
|
-
rescue Nomade::FailedTaskGroupPlan
|
128
|
+
rescue Nomade::FailedTaskGroupPlan
|
129
129
|
raise
|
130
130
|
rescue StandardError => e
|
131
131
|
Nomade.logger.fatal "HTTP Request failed (#{e.message})"
|
@@ -162,7 +162,7 @@ module Nomade
|
|
162
162
|
req_body = JSON.generate({
|
163
163
|
"Payload": payload_data,
|
164
164
|
"Meta": payload_metadata,
|
165
|
-
}.delete_if { |
|
165
|
+
}.delete_if { |_k, v| v.nil? })
|
166
166
|
|
167
167
|
res_body = _request(:post, "/v1/job/#{nomad_job.job_name}/dispatch", body: req_body)
|
168
168
|
JSON.parse(res_body)
|
@@ -197,6 +197,7 @@ module Nomade
|
|
197
197
|
else
|
198
198
|
raise "#{request_type} not supported"
|
199
199
|
end
|
200
|
+
|
200
201
|
req.add_field "Content-Type", "application/json"
|
201
202
|
req.body = body if body
|
202
203
|
|
@@ -209,7 +210,7 @@ module Nomade
|
|
209
210
|
sleep 1
|
210
211
|
retry
|
211
212
|
else
|
212
|
-
raise HttpConnectionError.new("#{e.class
|
213
|
+
raise HttpConnectionError.new("#{e.class} - #{e.message}")
|
213
214
|
end
|
214
215
|
end
|
215
216
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nomade
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kasper Grubbe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yell
|
@@ -114,8 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
114
|
- !ruby/object:Gem::Version
|
115
115
|
version: '0'
|
116
116
|
requirements: []
|
117
|
-
|
118
|
-
rubygems_version: 2.6.14.4
|
117
|
+
rubygems_version: 3.1.2
|
119
118
|
signing_key:
|
120
119
|
specification_version: 4
|
121
120
|
summary: Gem that deploys nomad jobs
|