nomade 0.1.5 → 0.1.6
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.
- 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
|