nomadsl 0.2.0 → 0.2.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.
- checksums.yaml +4 -4
- data/README.md +7 -7
- data/lib/nomadsl.rb +194 -17
- data/lib/nomadsl/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e373810efb5dc4ba6cb71d0788e6e114c6bb9db7f5eacd7aa45e5a3d5cf8903
|
4
|
+
data.tar.gz: 94270c72e2bf26c7c387c87ae9d612dbb5ce2de26decadec9559cd963d1440c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f1d263ba2e882a691724734df548cd91fd948bbd15d6ed2a51d8b5a7a376548dd1e6faaab24067d4defb5f713f40731cf83d459193637a5f1d14a2bf845522d
|
7
|
+
data.tar.gz: 752afd8496be3adfbe72c38dc7890c85e3f724f64ab5515a59e41bbfb9f580cf7659a377241b03f72a6b41cd79781bf4d09a28bc1b1fbb73b91c7dfe5acd5ed7
|
data/README.md
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Nomadsl is a Ruby DSL for generating Nomad job specification files.
|
4
4
|
|
5
|
-
Methods mapping to keys and attributes described in the
|
6
|
-
(https://www.nomadproject.io/docs/job-specification/index.html)
|
7
|
-
an includable module.
|
5
|
+
Methods mapping to keys and attributes described in the
|
6
|
+
[Nomad Job Specification](https://www.nomadproject.io/docs/job-specification/index.html)
|
7
|
+
are defined in an includable module.
|
8
8
|
|
9
|
-
Nomadsl supports Nomad configuration syntax through version 0.
|
9
|
+
Nomadsl supports Nomad configuration syntax through version 0.12.0. The mapping
|
10
10
|
of key and attribute names to method names is generally one-to-one, but you can
|
11
11
|
specify arbitrary configuration values to be rendered if necessary.
|
12
12
|
|
@@ -89,9 +89,9 @@ Will generate this output:
|
|
89
89
|
|
90
90
|
## Using `nomadsl` as the interpreter
|
91
91
|
|
92
|
-
|
93
|
-
|
94
|
-
|
92
|
+
You can also set your shbang line to use `nomadsl` as the interpreter of the
|
93
|
+
script. This will evaluate everything as Ruby, but with the necessary `nomadsl`
|
94
|
+
boilerplate already built in:
|
95
95
|
|
96
96
|
#!/usr/bin/env nomadsl
|
97
97
|
|
data/lib/nomadsl.rb
CHANGED
@@ -13,6 +13,10 @@ module Nomadsl
|
|
13
13
|
@nomadsl_print = b
|
14
14
|
end
|
15
15
|
|
16
|
+
def parent
|
17
|
+
@stack.last
|
18
|
+
end
|
19
|
+
|
16
20
|
def only(*levels)
|
17
21
|
unless levels.include? @stack.last
|
18
22
|
loc = caller_locations(1,1)[0]
|
@@ -168,7 +172,7 @@ module Nomadsl
|
|
168
172
|
end
|
169
173
|
|
170
174
|
# https://www.nomadproject.io/docs/job-specification/service.html#check-parameters
|
171
|
-
def check(address_mode: nil, args: nil, command: nil, grpc_service: nil, grpc_use_tls: nil, initial_status: nil, interval: nil, method: nil, name: nil, path: nil, port: nil, protocol: nil, timeout: nil, type: nil, tls_skip_verify: nil)
|
175
|
+
def check(address_mode: nil, args: nil, command: nil, grpc_service: nil, grpc_use_tls: nil, initial_status: nil, interval: nil, method: nil, name: nil, path: nil, expose: nil, port: nil, protocol: nil, task: nil, timeout: nil, type: nil, tls_skip_verify: nil)
|
172
176
|
only :service
|
173
177
|
block(:check) do
|
174
178
|
str :address_mode, address_mode
|
@@ -177,14 +181,16 @@ module Nomadsl
|
|
177
181
|
str :grpc_service, grpc_service
|
178
182
|
bool :grpc_use_tls, grpc_use_tls
|
179
183
|
str :initial_status, initial_status
|
180
|
-
str :interval, interval
|
184
|
+
str! :interval, interval
|
181
185
|
str :method, method
|
182
186
|
str :name, name
|
183
187
|
str :path, path
|
188
|
+
bool :expose, expose
|
184
189
|
str :port, port
|
185
190
|
str :protocol, protocol
|
186
|
-
str :
|
187
|
-
str :
|
191
|
+
str :task, task
|
192
|
+
str! :timeout, timeout
|
193
|
+
str! :type, type
|
188
194
|
bool :tls_skip_verify, tls_skip_verify
|
189
195
|
yield if block_given?
|
190
196
|
end
|
@@ -202,7 +208,7 @@ module Nomadsl
|
|
202
208
|
|
203
209
|
# https://www.nomadproject.io/docs/job-specification/task.html#config
|
204
210
|
def config(**opts)
|
205
|
-
only :task
|
211
|
+
only :task, :sidecar_task, :proxy
|
206
212
|
config_method = "__config_#{@driver}".to_sym
|
207
213
|
if private_methods.include?(config_method)
|
208
214
|
send(config_method, **opts)
|
@@ -224,6 +230,14 @@ module Nomadsl
|
|
224
230
|
end
|
225
231
|
end
|
226
232
|
|
233
|
+
# https://www.nomadproject.io/docs/job-specification/connect
|
234
|
+
def connect(native: nil)
|
235
|
+
only :service
|
236
|
+
block(:connect) do
|
237
|
+
bool :native, native
|
238
|
+
yield if block_given?
|
239
|
+
end
|
240
|
+
end
|
227
241
|
|
228
242
|
# https://www.nomadproject.io/docs/job-specification/constraint.html
|
229
243
|
def constraint(attribute: nil, operator: nil, value: nil)
|
@@ -235,6 +249,16 @@ module Nomadsl
|
|
235
249
|
end
|
236
250
|
end
|
237
251
|
|
252
|
+
# https://www.nomadproject.io/docs/job-specification/csi_plugin
|
253
|
+
def csi_plugin(id: nil, type: nil, mount_dir: nil)
|
254
|
+
only :volume
|
255
|
+
block(:csi_plugin) do
|
256
|
+
str! :id, id
|
257
|
+
str! :type, type
|
258
|
+
str! :mount_dir, mount_dir
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
238
262
|
# https://www.nomadproject.io/docs/job-specification/job.html#datacenters
|
239
263
|
def datacenters(*d)
|
240
264
|
only :job
|
@@ -258,9 +282,19 @@ module Nomadsl
|
|
258
282
|
end
|
259
283
|
end
|
260
284
|
|
285
|
+
# https://www.nomadproject.io/docs/job-specification/network#dns-parameters
|
286
|
+
def dns(servers: nil, searches: nil, options: nil)
|
287
|
+
only :network
|
288
|
+
block(:dns) do
|
289
|
+
list :servers, servers
|
290
|
+
list :searches, searches
|
291
|
+
list :options, options
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
261
295
|
# https://www.nomadproject.io/docs/job-specification/env.html
|
262
296
|
def env(**opts)
|
263
|
-
only :task
|
297
|
+
only :task, :sidecar_task
|
264
298
|
strmap :env, opts
|
265
299
|
end
|
266
300
|
|
@@ -274,11 +308,21 @@ module Nomadsl
|
|
274
308
|
end
|
275
309
|
end
|
276
310
|
|
311
|
+
# https://www.nomadproject.io/docs/job-specification/expose
|
312
|
+
def expose
|
313
|
+
only :proxy
|
314
|
+
block(:expose) do
|
315
|
+
yield if block_given?
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
277
319
|
# https://www.nomadproject.io/docs/job-specification/group.html
|
278
|
-
def group(name, count: nil)
|
320
|
+
def group(name, count: nil, shutdown_delay: nil, stop_after_client_disconnect: nil)
|
279
321
|
only :job
|
280
322
|
block(:group, name) do
|
281
323
|
int :count, count
|
324
|
+
str :shutdown_delay, shutdown_delay
|
325
|
+
str :stop_after_client_disconnect, stop_after_client_disconnect
|
282
326
|
yield
|
283
327
|
end
|
284
328
|
end
|
@@ -291,6 +335,15 @@ module Nomadsl
|
|
291
335
|
end
|
292
336
|
end
|
293
337
|
|
338
|
+
# https://www.nomadproject.io/docs/job-specification/lifecycle
|
339
|
+
def lifecycle(hook: nil, sidecar: nil)
|
340
|
+
only :task
|
341
|
+
block(:lifecycle) do
|
342
|
+
str :hook, hook
|
343
|
+
bool :sidecar, sidecar
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
294
347
|
# https://www.nomadproject.io/docs/job-specification/job.html
|
295
348
|
def job(j)
|
296
349
|
# initialize the variables since this is the actual root
|
@@ -309,7 +362,7 @@ module Nomadsl
|
|
309
362
|
|
310
363
|
# https://www.nomadproject.io/docs/job-specification/logs.html
|
311
364
|
def logs(max_files: nil, max_file_size: nil)
|
312
|
-
only :task
|
365
|
+
only :task, :sidecar_task
|
313
366
|
block(:logs) do
|
314
367
|
int :max_files, max_files
|
315
368
|
int :max_file_size, max_file_size
|
@@ -318,7 +371,7 @@ module Nomadsl
|
|
318
371
|
|
319
372
|
# https://www.nomadproject.io/docs/job-specification/meta.html
|
320
373
|
def meta(**opts)
|
321
|
-
only :job, :group, :task
|
374
|
+
only :job, :group, :task, :sidecar_task, :region
|
322
375
|
strmap :meta, opts
|
323
376
|
end
|
324
377
|
|
@@ -333,6 +386,14 @@ module Nomadsl
|
|
333
386
|
end
|
334
387
|
end
|
335
388
|
|
389
|
+
# https://www.nomadproject.io/docs/job-specification/multiregion
|
390
|
+
def multiregion
|
391
|
+
only :job
|
392
|
+
block(:multiregion) do
|
393
|
+
yield if block_given?
|
394
|
+
end
|
395
|
+
end
|
396
|
+
|
336
397
|
# https://www.nomadproject.io/docs/job-specification/job.html#namespace
|
337
398
|
# Supported by Nomad Enterprise ONLY
|
338
399
|
def namespace(n)
|
@@ -360,6 +421,17 @@ module Nomadsl
|
|
360
421
|
end
|
361
422
|
end
|
362
423
|
|
424
|
+
# https://www.nomadproject.io/docs/job-specification/expose#path-parameters
|
425
|
+
def path(path: nil, protocol: nil, local_path_port: nil)
|
426
|
+
only :expose
|
427
|
+
block(:path) do
|
428
|
+
str! :path, path
|
429
|
+
str! :protocol, protocol
|
430
|
+
int! :local_path_port, local_path_port
|
431
|
+
yield if block_given?
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
363
435
|
# https://www.nomadproject.io/docs/job-specification/periodic.html
|
364
436
|
def periodic(cron: nil, prohibit_overlap: nil, time_zone: nil)
|
365
437
|
only :job
|
@@ -370,9 +442,15 @@ module Nomadsl
|
|
370
442
|
end
|
371
443
|
end
|
372
444
|
|
445
|
+
# https://www.nomadproject.io/docs/job-specification/scaling#policy
|
446
|
+
def policy(**args)
|
447
|
+
only :scaling
|
448
|
+
any :policy, args
|
449
|
+
end
|
450
|
+
|
373
451
|
# https://www.nomadproject.io/docs/job-specification/network.html#port
|
374
452
|
def port(n, static: nil)
|
375
|
-
only :network
|
453
|
+
only :network, :path
|
376
454
|
if static
|
377
455
|
block(:port, n) do
|
378
456
|
int :static, static
|
@@ -388,10 +466,29 @@ module Nomadsl
|
|
388
466
|
int! :priority, p
|
389
467
|
end
|
390
468
|
|
469
|
+
# https://www.nomadproject.io/docs/job-specification/proxy
|
470
|
+
def proxy(local_service_address: nil, local_service_port: nil)
|
471
|
+
only :sidecar_service
|
472
|
+
block(:proxy) do
|
473
|
+
str :local_service_address, local_service_address
|
474
|
+
int :local_service_port, local_service_port
|
475
|
+
yield if block_given?
|
476
|
+
end
|
477
|
+
end
|
478
|
+
|
391
479
|
# https://www.nomadproject.io/docs/job-specification/job.html#region
|
392
|
-
|
393
|
-
|
394
|
-
|
480
|
+
# https://www.nomadproject.io/docs/job-specification/multiregion#region-parameters
|
481
|
+
def region(name, count: nil, datacenters: nil)
|
482
|
+
only :job, :multiregion
|
483
|
+
if parent == :job
|
484
|
+
str! :region, name
|
485
|
+
elsif parent == :multiregion
|
486
|
+
block(:region, name) do
|
487
|
+
int :count, count
|
488
|
+
list :datacenters, datacenters
|
489
|
+
yield if block_given?
|
490
|
+
end
|
491
|
+
end
|
395
492
|
end
|
396
493
|
|
397
494
|
# https://www.nomadproject.io/docs/job-specification/reschedule.html
|
@@ -409,10 +506,9 @@ module Nomadsl
|
|
409
506
|
|
410
507
|
# https://www.nomadproject.io/docs/job-specification/resources.html
|
411
508
|
def resources(cpu: nil, iops: nil, memory: nil)
|
412
|
-
only :task
|
509
|
+
only :task, :sidecar_task
|
413
510
|
block(:resources) do
|
414
511
|
int :cpu, cpu
|
415
|
-
int :iops, iops
|
416
512
|
int :memory, memory
|
417
513
|
yield if block_given?
|
418
514
|
end
|
@@ -429,6 +525,17 @@ module Nomadsl
|
|
429
525
|
end
|
430
526
|
end
|
431
527
|
|
528
|
+
# https://www.nomadproject.io/docs/job-specification/scaling
|
529
|
+
def scaling(min: nil, max: nil, enabled: nil)
|
530
|
+
only :group
|
531
|
+
block(:scaling) do
|
532
|
+
int :min, min
|
533
|
+
int! :max, max
|
534
|
+
bool :enabled, enabled
|
535
|
+
yield if block_given?
|
536
|
+
end
|
537
|
+
end
|
538
|
+
|
432
539
|
# https://www.nomadproject.io/docs/job-specification/service.html
|
433
540
|
def service(address_mode: nil, canary_tags: nil, name: nil, port: nil, tags: nil)
|
434
541
|
only :task
|
@@ -442,6 +549,30 @@ module Nomadsl
|
|
442
549
|
end
|
443
550
|
end
|
444
551
|
|
552
|
+
# https://www.nomadproject.io/docs/job-specification/sidecar_service
|
553
|
+
def sidecar_service(tags: nil, port: nil)
|
554
|
+
only :connect
|
555
|
+
block(:sidecar_service) do
|
556
|
+
list :tags, tags
|
557
|
+
int :port, port
|
558
|
+
yield if block_given?
|
559
|
+
end
|
560
|
+
end
|
561
|
+
|
562
|
+
# https://www.nomadproject.io/docs/job-specification/sidecar_task
|
563
|
+
def sidecar_task(name: nil, driver: nil, user: nil, logs: nil, kill_timeout: nil, shutdown_delay: nil, kill_signal: nil)
|
564
|
+
only :connect
|
565
|
+
block(:sidecar_task) do
|
566
|
+
str :name, name
|
567
|
+
str :driver, driver
|
568
|
+
str :user, user
|
569
|
+
str :kill_timeout, kill_timeout
|
570
|
+
str :shutdown_delay, shutdown_delay
|
571
|
+
str :kill_signal, kill_signal
|
572
|
+
yielf if block_given?
|
573
|
+
end
|
574
|
+
end
|
575
|
+
|
445
576
|
# https://www.nomadproject.io/docs/job-specification/spread.html
|
446
577
|
def spread(attribute: nil, weight: nil)
|
447
578
|
only :job, :group, :task
|
@@ -452,6 +583,15 @@ module Nomadsl
|
|
452
583
|
end
|
453
584
|
end
|
454
585
|
|
586
|
+
# https://www.nomadproject.io/docs/job-specification/multiregion#strategy-parameters
|
587
|
+
def strategy(max_parallel: nil, on_failure: nil)
|
588
|
+
only :multiregion
|
589
|
+
block(:strategy) do
|
590
|
+
int :max_parallel, max_parallel
|
591
|
+
str :on_failure, on_failure
|
592
|
+
end
|
593
|
+
end
|
594
|
+
|
455
595
|
# https://www.nomadproject.io/docs/job-specification/spread.html#target-parameters
|
456
596
|
def target(name: nil, value: nil, percent: nil)
|
457
597
|
only :spread
|
@@ -516,6 +656,15 @@ module Nomadsl
|
|
516
656
|
end
|
517
657
|
end
|
518
658
|
|
659
|
+
# https://www.nomadproject.io/docs/job-specification/upstreams
|
660
|
+
def upstreams(destination_name: nil, local_bind_port: nil)
|
661
|
+
only :proxy
|
662
|
+
block(:upstreams) do
|
663
|
+
str! :destination_name, destination_name
|
664
|
+
int! :local_bind_port, local_bind_port
|
665
|
+
end
|
666
|
+
end
|
667
|
+
|
519
668
|
# https://www.nomadproject.io/docs/job-specification/vault.html
|
520
669
|
def vault(change_mode: nil, change_token: nil, env: nil, policies: nil)
|
521
670
|
only :job, :group, :task
|
@@ -527,6 +676,26 @@ module Nomadsl
|
|
527
676
|
end
|
528
677
|
end
|
529
678
|
|
679
|
+
# https://www.nomadproject.io/docs/job-specification/volume
|
680
|
+
def volume(name, type: nil, source: nil, read_only: nil)
|
681
|
+
only :group
|
682
|
+
block(:volume, name) do
|
683
|
+
str :type, type
|
684
|
+
str! :source, source
|
685
|
+
bool :read_only, read_only
|
686
|
+
end
|
687
|
+
end
|
688
|
+
|
689
|
+
# https://www.nomadproject.io/docs/job-specification/volume_mount
|
690
|
+
def volume_mount(volume: nil, destination: nil, read_only: nil)
|
691
|
+
only :task
|
692
|
+
block(:volume_mount) do
|
693
|
+
str! :volume, volume
|
694
|
+
str! :destination, destination
|
695
|
+
bool :read_only, read_only
|
696
|
+
end
|
697
|
+
end
|
698
|
+
|
530
699
|
# https://www.nomadproject.io/docs/job-specification/job.html#vault_token
|
531
700
|
# NOTE: explicitly unsupported, dangerous
|
532
701
|
|
@@ -544,8 +713,12 @@ module Nomadsl
|
|
544
713
|
|
545
714
|
def _vault_aws_creds(path, export)
|
546
715
|
prefix = export ? "export " : ""
|
716
|
+
path = path.is_a?(String) ? [path] : path
|
717
|
+
args = path.reduce("") do |concat, str|
|
718
|
+
concat = "#{concat} \"#{str}\""
|
719
|
+
end
|
547
720
|
<<~DATA
|
548
|
-
{{with secret
|
721
|
+
{{with secret #{args}}}
|
549
722
|
#{prefix}AWS_ACCESS_KEY_ID={{.Data.access_key}}
|
550
723
|
#{prefix}AWS_SECRET_ACCESS_KEY={{.Data.secret_key}}
|
551
724
|
{{if .Data.security_token}}
|
@@ -565,8 +738,12 @@ module Nomadsl
|
|
565
738
|
|
566
739
|
def _vault_consul_creds(path, export)
|
567
740
|
prefix = export ? "export " : ""
|
741
|
+
path = path.is_a?(String) ? [path] : path
|
742
|
+
args = path.reduce("") do |concat, str|
|
743
|
+
concat = "#{concat} \"#{str}\""
|
744
|
+
end
|
568
745
|
<<~DATA
|
569
|
-
{{with secret
|
746
|
+
{{with secret #{args}}}
|
570
747
|
#{prefix}CONSUL_HTTP_TOKEN={{.Data.token}}
|
571
748
|
{{end}}
|
572
749
|
DATA
|
data/lib/nomadsl/version.rb
CHANGED
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.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Adams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email: daveadams@gmail.com
|
@@ -43,7 +43,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
43
43
|
- !ruby/object:Gem::Version
|
44
44
|
version: '0'
|
45
45
|
requirements: []
|
46
|
-
rubygems_version: 3.
|
46
|
+
rubygems_version: 3.1.4
|
47
47
|
signing_key:
|
48
48
|
specification_version: 4
|
49
49
|
summary: Ruby DSL for generating Nomad job specification files
|