capistrano-nomad 0.5.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 050bf4a39838b2c0a98c02c1d1c38fcee02818cdb3936d2b00073adea0223aec
4
- data.tar.gz: 96b95dd209e984447ed33bc3229562202887222641954d494bc922fd215ec050
3
+ metadata.gz: 0b71f2fc4375d471be5284038182715e6a4673dfb047b24f94409d9249509706
4
+ data.tar.gz: 04d0c5906845f755b6c265b8f3ff943a3dcff1b2d4d4df66591f3e9aacb80063
5
5
  SHA512:
6
- metadata.gz: 53535889c6707debe917ceefa837c6f4310c037523ded6e101ff752ff6962db3eb02805d2d60dd3fec1b693a3d0bcbae1dd5fe2f4c3a3451aea1170bcca0b2af
7
- data.tar.gz: a43459682a67ba79448969660fbd659aca92ac90a0524e0ccf613212f537a148da93e06c3efb862dcec5c7b2441a3b46ad05f2a9ae0bdf8b5d761501ffba7839
6
+ metadata.gz: 3417e1276e5e377db5e52051c39f5955a3ba50cd83243e51d6f1a2919d2e4eda7a602ee55bab9a0c91f4e4d85fc4505c18886e8164608515bc681b663d641b60
7
+ data.tar.gz: 66fbf60d498d0b312256a6788292c9c5ad9e84384c34152e0d000c2045267bae57b96483cdd894f0f5a5f138ba3b89c179c2d265b8eebb4c29c3a496918ed19c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- capistrano-nomad (0.5.0)
4
+ capistrano-nomad (0.5.1)
5
5
  activesupport (<= 7.0.8)
6
6
  byebug
7
7
  capistrano (~> 3.0)
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "capistrano-nomad"
5
- spec.version = "0.5.0"
5
+ spec.version = "0.5.1"
6
6
  spec.authors = ["James Hu"]
7
7
 
8
8
  spec.summary = "Capistrano plugin for deploying and managing Nomad jobs"
@@ -90,15 +90,18 @@ def nomad_job(name, attributes = {})
90
90
 
91
91
  desc "Restart #{description_name} job"
92
92
  task :restart do
93
- on roles :manager do
93
+ on(roles(:manager)) do
94
94
  # We can't restart the job directly so we'll need to fetch all its running allocs and restart each of one
95
95
  # individually instead
96
- running_alloc_ids_output = capture(
97
- "nomad job allocs " \
98
- "-t '{{range .}}{{if eq .ClientStatus \"running\"}}{{ println .ID}}{{end}}{{end}}' " \
99
- "#{name}",
96
+ running_alloc_ids_output = capistrano_nomad_capture_nomad_command(
97
+ :job,
98
+ :allocs,
99
+ {
100
+ namespace: namespace,
101
+ t: "'{{range .}}{{if eq .ClientStatus \"running\"}}{{ println .ID}}{{end}}{{end}}'",
102
+ },
103
+ name,
100
104
  )
101
-
102
105
  running_alloc_ids = running_alloc_ids_output.strip.split("\n")
103
106
 
104
107
  running_alloc_ids.each do |alloc_id|
@@ -78,7 +78,7 @@ def capistrano_nomad_build_release_var_file_path(*args)
78
78
  "#{release_path}#{capistrano_nomad_build_base_var_file_path(*args)}"
79
79
  end
80
80
 
81
- def capistrano_nomad_execute_nomad_command(*args)
81
+ def capistrano_nomad_run_nomad_command(kind, *args)
82
82
  converted_args = args.each_with_object([]) do |arg, collection|
83
83
  # If hash then convert it as options
84
84
  if arg.is_a?(Hash)
@@ -97,22 +97,60 @@ def capistrano_nomad_execute_nomad_command(*args)
97
97
  end
98
98
  end
99
99
 
100
+ # Ignore errors
101
+ public_send(kind, :nomad, *converted_args, raise_on_non_zero_exit: false)
102
+ end
103
+
104
+ def capistrano_nomad_execute_nomad_command(*args)
100
105
  on(roles(:manager)) do |host|
101
106
  run_interactively(host) do
102
- # Ignore errors
103
- execute(:nomad, *converted_args, raise_on_non_zero_exit: false)
107
+ capistrano_nomad_run_nomad_command(:execute, *args)
104
108
  end
105
109
  end
106
110
  end
107
111
 
112
+ def capistrano_nomad_capture_nomad_command(*args)
113
+ output = nil
114
+
115
+ on(roles(:manager)) do |host|
116
+ output = capistrano_nomad_run_nomad_command(:capture, *args)
117
+ end
118
+
119
+ output
120
+ end
121
+
108
122
  def capistrano_nomad_exec_within_job(name, command, namespace: nil, task: nil)
109
- capistrano_nomad_execute_nomad_command(
110
- :alloc,
111
- :exec,
112
- { namespace: namespace, task: task || name, job: true },
113
- name,
114
- command,
115
- )
123
+ on(roles(:manager)) do
124
+ task = name unless task
125
+
126
+ # Find alloc id that contains task
127
+ output = capistrano_nomad_capture_nomad_command(
128
+ :job,
129
+ :allocs,
130
+ { namespace: namespace, t: "'{{range .}}{{ .ID }},{{ .TaskGroup }}|{{end}}'" },
131
+ name,
132
+ )
133
+ alloc_id = output.split("|").map { |s| s.split(",") }.find { |_, t| t == task.to_s }&.first
134
+
135
+ if alloc_id
136
+ capistrano_nomad_execute_nomad_command(
137
+ :alloc,
138
+ :exec,
139
+ { namespace: namespace, task: task },
140
+ alloc_id,
141
+ command,
142
+ )
143
+ else
144
+ # If alloc can't be determined then choose at random
145
+ capistrano_nomad_execute_nomad_command(
146
+ :alloc,
147
+ :exec,
148
+ { namespace: namespace, job: true },
149
+ task,
150
+ command,
151
+ )
152
+ end
153
+ end
116
154
  end
117
155
 
118
156
  def capistrano_nomad_upload_file(local_path:, remote_path:, erb_vars: {})
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-nomad
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Hu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-14 00:00:00.000000000 Z
11
+ date: 2023-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport