nomadsl 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b922b8afddb2292de6a32df69d1af95540765381ccc0d7b34eac16f7818140b8
4
- data.tar.gz: 07e3c17ba4d39e4916dbe2961696b1e917334c31c7220cbd1ba2f51412c77cb0
3
+ metadata.gz: 516890be1a6a0126435bc38bb940ddd4b42ed7bfdc449603eefc79c2836d76de
4
+ data.tar.gz: 52df9fdd5da1dc4e3fde08f53648501d4df8ea56142ae01b9ebaa63b345fa476
5
5
  SHA512:
6
- metadata.gz: e6e33accbe57b2883a116ed41dfdc2da4ebbde028de5900eef0a1caed747d1af1225e6f660f3073f3a6d297ea31b5e65f7ec8d0c8b2a255491f31b24aff54637
7
- data.tar.gz: 30a0abf272cbfeeeab3bc15bf71044d296df718fa8e86de7f6a3f5255e6e60efe3add2e276b3c246c24d09028c011190b2811b4f83b5fe488829845923a02a55
6
+ metadata.gz: 9c84f1b38735ba993d61c58764c6d46c3c5a9b09fa04dcf448c5e773a7400e9de025203f028d2ef4ab280c35f126bc72e74de35f2fc87363ed9730331b5201b2
7
+ data.tar.gz: 94ce12136ed7aa33ee243b42ca4afb7bcece3a5a96c28b0b550454249df5ced9cb642337a8e9d37b5713d076f4da7b49c2c4474b73e600770e2dbcbbc7542024
data/README.md CHANGED
@@ -6,7 +6,9 @@ Methods mapping to keys and attributes described in the Nomad Job Specification
6
6
  (https://www.nomadproject.io/docs/job-specification/index.html) are defined in
7
7
  an includable module.
8
8
 
9
- The mapping of key and attribute names to method names is generally one-to-one.
9
+ Nomadsl supports Nomad configuration syntax through version 0.9.0. The mapping
10
+ of key and attribute names to method names is generally one-to-one, but you can
11
+ specify arbitrary configuration values to be rendered if necessary.
10
12
 
11
13
  ## Example: DSL direct to stdout
12
14
 
@@ -122,7 +124,6 @@ By requiring only `nomadsl`, you can inject these methods into another class:
122
124
 
123
125
  ## Roadmap
124
126
 
125
- * Make all attributes explicitly callable
126
127
  * Make subkeys embeddable in arglists if sensible
127
128
  * Allow injecting comments into the rendered file
128
129
  * Finish custom config blocks for each task driver
data/lib/nomadsl.rb CHANGED
@@ -69,6 +69,21 @@ module Nomadsl
69
69
  @out << "#{v.chomp}\nBLOB\n"
70
70
  end
71
71
 
72
+ def strmap!(k, v)
73
+ die "Value for '#{k}' is nil" if v.nil?
74
+ strmap(k, v)
75
+ end
76
+
77
+ def strmap(k, v)
78
+ if v
79
+ block(k) do
80
+ v.each do |k2,v2|
81
+ str k2, v2
82
+ end
83
+ end
84
+ end
85
+ end
86
+
72
87
  # try really hard
73
88
  def any(k, v)
74
89
  if v.nil?
@@ -137,13 +152,18 @@ module Nomadsl
137
152
  str! :source, source
138
153
  str :destination, destination
139
154
  str :mode, mode
140
- if options
141
- block(:options) do
142
- options.each do |k,v|
143
- str k, v
144
- end
145
- end
146
- end
155
+ strmap :options, options
156
+ end
157
+ end
158
+
159
+ # https://www.nomadproject.io/docs/job-specification/affinity.html
160
+ def affinity(attribute: nil, operator: nil, value: nil, weight: nil)
161
+ only :job, :group, :task, :device
162
+ block(:affinity) do
163
+ str! :attribute, attribute
164
+ str :operator, operator
165
+ str! :value, value
166
+ int :weight, weight
147
167
  end
148
168
  end
149
169
 
@@ -207,7 +227,7 @@ module Nomadsl
207
227
 
208
228
  # https://www.nomadproject.io/docs/job-specification/constraint.html
209
229
  def constraint(attribute: nil, operator: nil, value: nil)
210
- only :job, :group, :task
230
+ only :job, :group, :task, :device
211
231
  block(:constraint) do
212
232
  str :attribute, attribute
213
233
  str :operator, operator
@@ -221,6 +241,15 @@ module Nomadsl
221
241
  list! :datacenters, d
222
242
  end
223
243
 
244
+ # https://www.nomadproject.io/docs/job-specification/device.html
245
+ def device(name: nil, count: nil)
246
+ only :resources
247
+ block(:device, name) do
248
+ int :count, count
249
+ yield if block_given?
250
+ end
251
+ end
252
+
224
253
  # https://www.nomadproject.io/docs/job-specification/dispatch_payload.html
225
254
  def dispatch_payload(file:)
226
255
  only :task
@@ -232,11 +261,7 @@ module Nomadsl
232
261
  # https://www.nomadproject.io/docs/job-specification/env.html
233
262
  def env(**opts)
234
263
  only :task
235
- block(:env) do
236
- opts.each do |k,v|
237
- str k, v
238
- end
239
- end
264
+ strmap :env, opts
240
265
  end
241
266
 
242
267
  # https://www.nomadproject.io/docs/job-specification/ephemeral_disk.html
@@ -294,11 +319,7 @@ module Nomadsl
294
319
  # https://www.nomadproject.io/docs/job-specification/meta.html
295
320
  def meta(**opts)
296
321
  only :job, :group, :task
297
- block(:meta) do
298
- opts.each do |k,v|
299
- str k, v
300
- end
301
- end
322
+ strmap :meta, opts
302
323
  end
303
324
 
304
325
  # https://www.nomadproject.io/docs/job-specification/migrate.html
@@ -421,6 +442,25 @@ module Nomadsl
421
442
  end
422
443
  end
423
444
 
445
+ # https://www.nomadproject.io/docs/job-specification/spread.html
446
+ def spread(attribute: nil, weight: nil)
447
+ only :job, :group, :task
448
+ block(:spread) do
449
+ str! :attribute, attribute
450
+ int :weight, weight
451
+ yield if block_given?
452
+ end
453
+ end
454
+
455
+ # https://www.nomadproject.io/docs/job-specification/spread.html#target-parameters
456
+ def target(name: nil, value: nil, percent: nil)
457
+ only :spread
458
+ block(:target, name) do
459
+ str :value, value
460
+ str :weight, weight
461
+ end
462
+ end
463
+
424
464
  # https://www.nomadproject.io/docs/job-specification/task.html
425
465
  def task(t, driver: "exec", kill_signal: nil, kill_timeout: nil, leader: nil, shutdown_delay: nil, user: nil)
426
466
  only :group
@@ -502,47 +542,41 @@ module Nomadsl
502
542
  end
503
543
  end
504
544
 
505
- def preloaded_vault_aws_creds(name, path)
506
- data = <<~DATA
545
+ def _vault_aws_creds(path, export)
546
+ prefix = export ? "export " : ""
547
+ <<~DATA
507
548
  {{with secret "#{path}"}}
508
- AWS_ACCESS_KEY_ID={{.Data.access_key}}
509
- AWS_SECRET_ACCESS_KEY={{.Data.secret_key}}
549
+ #{prefix}AWS_ACCESS_KEY_ID={{.Data.access_key}}
550
+ #{prefix}AWS_SECRET_ACCESS_KEY={{.Data.secret_key}}
510
551
  {{if .Data.security_token}}
511
- AWS_SESSION_TOKEN={{.Data.security_token}}
552
+ #{prefix}AWS_SESSION_TOKEN={{.Data.security_token}}
512
553
  {{end}}
513
554
  {{end}}
514
555
  DATA
515
- template(data: data, destination: "secrets/#{name}.env", env: true)
556
+ end
557
+
558
+ def preloaded_vault_aws_creds(name, path)
559
+ template(data: _vault_aws_creds(path, false), destination: "secrets/#{name}.env", env: true)
516
560
  end
517
561
 
518
562
  def vault_aws_creds(name, path)
519
- data = <<~DATA
563
+ template(data: _vault_aws_creds(path, true), destination: "secrets/#{name}.env")
564
+ end
565
+
566
+ def _vault_consul_creds(path, export)
567
+ prefix = export ? "export " : ""
568
+ <<~DATA
520
569
  {{with secret "#{path}"}}
521
- export AWS_ACCESS_KEY_ID={{.Data.access_key}}
522
- export AWS_SECRET_ACCESS_KEY={{.Data.secret_key}}
523
- {{if .Data.security_token}}
524
- export AWS_SESSION_TOKEN={{.Data.security_token}}
525
- {{end}}
570
+ #{prefix}CONSUL_HTTP_TOKEN={{.Data.token}}
526
571
  {{end}}
527
572
  DATA
528
- template(data: data, destination: "secrets/#{name}.env")
529
573
  end
530
574
 
531
575
  def preloaded_vault_consul_creds(name, path)
532
- data = <<DATA
533
- {{with secret "#{path}"}}
534
- CONSUL_HTTP_TOKEN={{.Data.token}}
535
- {{end}}
536
- DATA
537
- template(data: data, destination: "secrets/#{name}.env", env: true)
576
+ template(data: _vault_consul_creds(path, false), destination: "secrets/#{name}.env", env: true)
538
577
  end
539
578
 
540
579
  def vault_consul_creds(name, path)
541
- data = <<DATA
542
- {{with secret "#{path}"}}
543
- export CONSUL_HTTP_TOKEN={{.Data.token}}
544
- {{end}}
545
- DATA
546
- template(data: data, destination: "secrets/#{name}.env")
580
+ template(data: _vault_consul_creds(path, true), destination: "secrets/#{name}.env")
547
581
  end
548
582
  end
@@ -1,3 +1,3 @@
1
1
  module Nomadsl
2
- VERSION = "0.1.5"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nomadsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Adams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-09 00:00:00.000000000 Z
11
+ date: 2019-04-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: daveadams@gmail.com
@@ -43,8 +43,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
43
43
  - !ruby/object:Gem::Version
44
44
  version: '0'
45
45
  requirements: []
46
- rubyforge_project:
47
- rubygems_version: 2.7.6
46
+ rubygems_version: 3.0.3
48
47
  signing_key:
49
48
  specification_version: 4
50
49
  summary: Ruby DSL for generating Nomad job specification files