capistrano-nomad 0.9.2 → 0.10.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '064875b4478852c18387c8084ff4b0e5c2cb4e9377a6854724f46119b416ecf5'
4
- data.tar.gz: 15069bfd33db0a2b497a7e6a1adf816669df6ba0b508364fb8a26728e46ae329
3
+ metadata.gz: 9993fb04b78b68b03c055faa66454360543c92108f2e410f7156bedf7158f763
4
+ data.tar.gz: 20b4708abc11215f259bc46b8b4c7f4f0606fb0d2ff7e3c862c799b850ead5ee
5
5
  SHA512:
6
- metadata.gz: eff94039fa9b7c506fbe139670639d326423c409813c4a10c97c15e79256f4bc5f65a181a2d8608af9bdd0aa51aeaeb999ad27e02836b2af8815b961999f8470
7
- data.tar.gz: 255c76c93ba40a4fd35206b31d511a7a42e2954c4e4f072154effe68643e66a938fd0aacd3f029e7e5cfa37f13f82cb924606ab4bc2fc61be92234c5e3d7428d
6
+ metadata.gz: 86d6750e7e181d120db5b56da6c5b7b083310901939e452aee8e7a6de12db22544f2c1accfe8fb9790c75c188644ed0108446a8281875566b0d6243ae8db6191
7
+ data.tar.gz: f80d0003e093e3ed5e0fefc69b6b89db158064145c7c21573944b8fc88f8beb40a1cb0b40fbbbb956856bbc637f217a72001c5a1de10ed992ea46e6fd45b8809
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- capistrano-nomad (0.9.2)
4
+ capistrano-nomad (0.10.0)
5
5
  activesupport (<= 7.0.8)
6
6
  byebug
7
7
  capistrano (~> 3.0)
data/README.md CHANGED
@@ -134,15 +134,15 @@ cap production nomad:analytics:grafana:restart
134
134
  cap production nomad:postgres:status
135
135
  ```
136
136
 
137
- Tasks can go by namespace or `all` namespaces, and can also be filtered by tags
137
+ Tasks can apply across all namespaces or be filtered by namespaces or tags
138
138
 
139
139
  ```shell
140
140
  cap production nomad:analytics:deploy
141
141
  cap production nomad:analytics:upload_run
142
- cap production nomad:all:deploy
143
- cap production nomad:all:deploy TAG=admin
144
- cap production nomad:all:upload_run
145
- cap production nomad:all:upload_run TAGS=admin,redis
142
+ cap production nomad:deploy
143
+ cap production nomad:deploy TAG=admin
144
+ cap production nomad:upload_run
145
+ cap production nomad:upload_run TAGS=admin,redis
146
146
  ```
147
147
 
148
148
  Open console
@@ -171,7 +171,7 @@ cap production nomad:app:ui
171
171
  Create missing and delete unused namespaces
172
172
 
173
173
  ```shell
174
- cap production nomad:all:modify_namespaces
174
+ cap production nomad:modify_namespaces
175
175
  ```
176
176
 
177
177
  ## Development
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "capistrano-nomad"
5
- spec.version = "0.9.2"
5
+ spec.version = "0.10.0"
6
6
  spec.authors = ["James Hu"]
7
7
 
8
8
  spec.summary = "Capistrano plugin for deploying and managing Nomad jobs"
@@ -36,6 +36,9 @@ def nomad_namespace(namespace, **options, &block)
36
36
  end
37
37
 
38
38
  def nomad_job(name, attributes = {})
39
+ # This is the namespace when there's no namespace defined in Nomad too
40
+ @nomad_namespace ||= :default
41
+
39
42
  attributes[:tags] ||= []
40
43
 
41
44
  # Tags added to namespace should be added to all jobs within
@@ -254,7 +254,7 @@ def capistrano_nomad_fetch_job_var_files(name, *args)
254
254
  capistrano_nomad_fetch_job_options(name, :var_files, *args) || []
255
255
  end
256
256
 
257
- def capistrano_nomad_fetch_jobs_names_by_namespace(namespace: :all)
257
+ def capistrano_nomad_fetch_jobs_names_by_namespace(namespace: nil)
258
258
  # Can pass tags via command line (e.g. TAG=foo or TAGS=foo,bar)
259
259
  tags =
260
260
  [ENV["TAG"], ENV["TAGS"]].map do |tag_args|
@@ -266,7 +266,7 @@ def capistrano_nomad_fetch_jobs_names_by_namespace(namespace: :all)
266
266
  .compact
267
267
 
268
268
  fetch(:nomad_jobs).each_with_object({}) do |(jobs_namespace, jobs_options), hash|
269
- next if namespace != :all && namespace != jobs_namespace
269
+ next if !namespace.nil? && namespace != jobs_namespace
270
270
 
271
271
  hash[jobs_namespace] = jobs_options.each_with_object([]) do |(job_name, job_options), collection|
272
272
  # Filter jobs by tags if specified
@@ -281,85 +281,93 @@ def capistrano_nomad_fetch_jobs_docker_image_types(names, namespace: nil)
281
281
  names.map { |n| fetch(:nomad_jobs).dig(namespace, n.to_sym, :docker_image_types) }.flatten.compact.uniq
282
282
  end
283
283
 
284
- def capistrano_nomad_define_group_tasks(namespace:)
285
- namespace(namespace) do
286
- desc "Build #{namespace} job Docker images"
284
+ def capistrano_nomad_define_group_tasks(namespace: nil)
285
+ define_tasks = lambda do |nomad_namespace: nil|
286
+ desc "Build #{nomad_namespace} job Docker images"
287
287
  task :build do
288
- capistrano_nomad_fetch_jobs_names_by_namespace(namespace: namespace).each do |namespace_by, names|
289
- capistrano_nomad_push_jobs_docker_images(names, namespace: namespace_by)
288
+ capistrano_nomad_fetch_jobs_names_by_namespace(namespace: nomad_namespace).each do |jobs_namespace, names|
289
+ capistrano_nomad_push_jobs_docker_images(names, namespace: jobs_namespace)
290
290
  end
291
291
  end
292
292
 
293
- desc "Push #{namespace} job Docker images"
293
+ desc "Push #{nomad_namespace} job Docker images"
294
294
  task :push do
295
- capistrano_nomad_fetch_jobs_names_by_namespace(namespace: namespace).each do |namespace_by, names|
296
- capistrano_nomad_push_jobs_docker_images(names, namespace: namespace_by)
295
+ capistrano_nomad_fetch_jobs_names_by_namespace(namespace: nomad_namespace).each do |jobs_namespace, names|
296
+ capistrano_nomad_push_jobs_docker_images(names, namespace: jobs_namespace)
297
297
  end
298
298
  end
299
299
 
300
- desc "Build and push #{namespace} job Docker images"
300
+ desc "Build and push #{nomad_namespace} job Docker images"
301
301
  task :assemble do
302
- capistrano_nomad_fetch_jobs_names_by_namespace(namespace: namespace).each do |namespace_by, names|
303
- capistrano_nomad_assemble_jobs_docker_images(names, namespace: namespace_by)
302
+ capistrano_nomad_fetch_jobs_names_by_namespace(namespace: nomad_namespace).each do |jobs_namespace, names|
303
+ capistrano_nomad_assemble_jobs_docker_images(names, namespace: jobs_namespace)
304
304
  end
305
305
  end
306
306
 
307
- desc "Upload #{namespace} jobs"
307
+ desc "Upload #{nomad_namespace} jobs"
308
308
  task :upload do
309
- capistrano_nomad_fetch_jobs_names_by_namespace(namespace: namespace).each do |namespace_by, names|
310
- capistrano_nomad_upload_jobs(names, namespace: namespace_by)
309
+ capistrano_nomad_fetch_jobs_names_by_namespace(namespace: nomad_namespace).each do |jobs_namespace, names|
310
+ capistrano_nomad_upload_jobs(names, namespace: jobs_namespace)
311
311
  end
312
312
  end
313
313
 
314
- desc "Run #{namespace} jobs"
314
+ desc "Run #{nomad_namespace} jobs"
315
315
  task :run do
316
- capistrano_nomad_fetch_jobs_names_by_namespace(namespace: namespace).each do |namespace_by, names|
317
- capistrano_nomad_run_jobs(names, namespace: namespace_by)
316
+ capistrano_nomad_fetch_jobs_names_by_namespace(namespace: nomad_namespace).each do |jobs_namespace, names|
317
+ capistrano_nomad_run_jobs(names, namespace: jobs_namespace)
318
318
  end
319
319
  end
320
320
 
321
- desc "Upload and run #{namespace} jobs"
321
+ desc "Upload and run #{nomad_namespace} jobs"
322
322
  task :upload_run do
323
- capistrano_nomad_fetch_jobs_names_by_namespace(namespace: namespace).each do |namespace_by, names|
324
- capistrano_nomad_upload_run_jobs(names, namespace: namespace_by)
323
+ capistrano_nomad_fetch_jobs_names_by_namespace(namespace: nomad_namespace).each do |jobs_namespace, names|
324
+ capistrano_nomad_upload_run_jobs(names, namespace: jobs_namespace)
325
325
  end
326
326
  end
327
327
 
328
- desc "Deploy #{namespace} jobs"
328
+ desc "Deploy #{nomad_namespace} jobs"
329
329
  task :deploy do
330
- capistrano_nomad_fetch_jobs_names_by_namespace(namespace: namespace).each do |namespace_by, names|
331
- capistrano_nomad_deploy_jobs(names, namespace: namespace_by)
330
+ capistrano_nomad_fetch_jobs_names_by_namespace(namespace: nomad_namespace).each do |jobs_namespace, names|
331
+ capistrano_nomad_deploy_jobs(names, namespace: jobs_namespace)
332
332
  end
333
333
  end
334
334
 
335
- desc "Rerun #{namespace} jobs"
335
+ desc "Rerun #{nomad_namespace} jobs"
336
336
  task :rerun do
337
- capistrano_nomad_fetch_jobs_names_by_namespace(namespace: namespace).each do |namespace_by, names|
338
- capistrano_nomad_rerun_jobs(names, namespace: namespace_by)
337
+ capistrano_nomad_fetch_jobs_names_by_namespace(namespace: nomad_namespace).each do |jobs_namespace, names|
338
+ capistrano_nomad_rerun_jobs(names, namespace: jobs_namespace)
339
339
  end
340
340
  end
341
341
 
342
- desc "Restart #{namespace} jobs"
342
+ desc "Restart #{nomad_namespace} jobs"
343
343
  task :restart do
344
- capistrano_nomad_fetch_jobs_names_by_namespace(namespace: namespace).each do |namespace_by, names|
345
- capistrano_nomad_restart_jobs(names, namespace: namespace_by)
344
+ capistrano_nomad_fetch_jobs_names_by_namespace(namespace: nomad_namespace).each do |jobs_namespace, names|
345
+ capistrano_nomad_restart_jobs(names, namespace: jobs_namespace)
346
346
  end
347
347
  end
348
348
 
349
- desc "Stop #{namespace} jobs"
349
+ desc "Stop #{nomad_namespace} jobs"
350
350
  task :stop do
351
- capistrano_nomad_fetch_jobs_names_by_namespace(namespace: namespace).each do |namespace_by, names|
352
- capistrano_nomad_stop_jobs(names, namespace: namespace_by)
351
+ capistrano_nomad_fetch_jobs_names_by_namespace(namespace: nomad_namespace).each do |jobs_namespace, names|
352
+ capistrano_nomad_stop_jobs(names, namespace: jobs_namespace)
353
353
  end
354
354
  end
355
355
 
356
- desc "Purge #{namespace} jobs"
356
+ desc "Purge #{nomad_namespace} jobs"
357
357
  task :purge do
358
- capistrano_nomad_fetch_jobs_names_by_namespace(namespace: namespace).each do |namespace_by, names|
359
- capistrano_nomad_purge_jobs(names, namespace: namespace_by)
358
+ capistrano_nomad_fetch_jobs_names_by_namespace(namespace: nomad_namespace).each do |jobs_namespace, names|
359
+ capistrano_nomad_purge_jobs(names, namespace: jobs_namespace)
360
360
  end
361
361
  end
362
362
  end
363
+
364
+ if namespace
365
+ namespace(namespace) do
366
+ define_tasks.call(nomad_namespace: namespace)
367
+ end
368
+ else
369
+ define_tasks.call
370
+ end
363
371
  end
364
372
 
365
373
  def capistrano_nomad_build_jobs_docker_images(names, *args)
@@ -1,46 +1,37 @@
1
1
  namespace :nomad do
2
- desc "Show version"
3
- task :version do
4
- capistrano_nomad_execute_nomad_command(:version)
5
- end
6
-
7
2
  # Define tasks for all jobs
8
- capistrano_nomad_define_group_tasks(namespace: :all)
3
+ capistrano_nomad_define_group_tasks
9
4
 
10
- namespace :all do
11
- desc "Create missing and remove unused namespaces"
12
- task :modify_namespaces do
13
- output = capistrano_nomad_capture_nomad_command(:namespace, :list, t: "'{{range .}}{{ .Name }}|{{end}}'")
14
- current_namespaces = output.split("|").compact.map(&:to_sym)
5
+ desc "Create missing and remove unused namespaces"
6
+ task :modify_namespaces do
7
+ output = capistrano_nomad_capture_nomad_command(:namespace, :list, t: "'{{range .}}{{ .Name }}|{{end}}'")
8
+ current_namespaces = output.split("|").compact.map(&:to_sym)
15
9
 
16
- # If key is nil then it actually belongs to the default namespace
17
- desired_namespaces = fetch(:nomad_jobs).keys.map { |n| n.nil? ? :default : n.to_sym }
10
+ # If key is nil then it actually belongs to the default namespace
11
+ desired_namespaces = fetch(:nomad_jobs).keys.map { |n| n.nil? ? :default : n.to_sym }
18
12
 
19
- missing_namespaces = desired_namespaces - current_namespaces
20
- unused_namespaces = current_namespaces - desired_namespaces
13
+ missing_namespaces = desired_namespaces - current_namespaces
14
+ unused_namespaces = current_namespaces - desired_namespaces
21
15
 
22
- # Remove unused namespaces
23
- unused_namespaces.each do |namespace|
24
- capistrano_nomad_execute_nomad_command(:namespace, :delete, namespace)
25
- end
16
+ # Remove unused namespaces
17
+ unused_namespaces.each do |namespace|
18
+ capistrano_nomad_execute_nomad_command(:namespace, :delete, namespace)
19
+ end
26
20
 
27
- # Create missing namespaces
28
- missing_namespaces.each do |namespace|
29
- capistrano_nomad_execute_nomad_command(:namespace, :apply, namespace)
30
- end
21
+ # Create missing namespaces
22
+ missing_namespaces.each do |namespace|
23
+ capistrano_nomad_execute_nomad_command(:namespace, :apply, namespace)
31
24
  end
32
25
  end
33
26
 
34
- namespace :docker_images do
35
- desc "Used for adding hooks before or after pushing Docker images"
36
- task :push
27
+ desc "Run garbage collector tasks"
28
+ task :gc do
29
+ capistrano_nomad_execute_nomad_command(:system, :gc)
30
+ capistrano_nomad_execute_nomad_command(:system, :reconcile, :summaries)
37
31
  end
38
32
 
39
- namespace :system do
40
- desc "Clean up Nomad"
41
- task :clean do
42
- capistrano_nomad_execute_nomad_command(:system, :gc)
43
- capistrano_nomad_execute_nomad_command(:system, :reconcile, :summaries)
44
- end
33
+ desc "Show version"
34
+ task :version do
35
+ capistrano_nomad_execute_nomad_command(:version)
45
36
  end
46
37
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-nomad
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Hu