ood_core 0.25.0 → 0.27.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 +4 -4
- data/CHANGELOG.md +15 -0
- data/Rakefile +11 -0
- data/lib/ood_core/batch_connect/templates/vnc.rb +6 -4
- data/lib/ood_core/job/adapter.rb +8 -0
- data/lib/ood_core/job/adapters/fujitsu_tcs.rb +1 -0
- data/lib/ood_core/job/adapters/kubernetes/batch.rb +2 -2
- data/lib/ood_core/job/adapters/linux_host/launcher.rb +8 -1
- data/lib/ood_core/job/adapters/linux_host/templates/script_wrapper.erb.sh +1 -1
- data/lib/ood_core/job/adapters/lsf/helper.rb +1 -0
- data/lib/ood_core/job/adapters/pbspro.rb +8 -0
- data/lib/ood_core/job/adapters/slurm.rb +34 -3
- data/lib/ood_core/job/adapters/systemd/launcher.rb +1 -1
- data/lib/ood_core/job/adapters/torque.rb +8 -0
- data/lib/ood_core/job/node_info.rb +11 -2
- data/lib/ood_core/job/queue_info.rb +8 -0
- data/lib/ood_core/job/script.rb +9 -2
- data/lib/ood_core/version.rb +1 -1
- data/lib/tasks/slurm.rb +17 -0
- data/ood_core.gemspec +4 -2
- metadata +38 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6aafe5b9d84b0b825241691c28be26cbce7402534e0ac1555a033191d13a7a1a
|
4
|
+
data.tar.gz: f214cbaf84997e4c27dc184f3b3a12cfc82e510c5d6eb7b9ccdfb5df0b164089
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1cc480563eaffcafeaf68b09ec55e5cec02d2c610b7264e45c0c0f0d830ac11e62a9b91fe395a00140c38b8bc5b01390e52d4dc8d962579fee0cf7ff33c6fc3
|
7
|
+
data.tar.gz: 68d5c95f5a4d87ab89cd5938d92c2d186398701942fd8a460409e5f5864b9eccedcb8ac8668d211dc0318886e6978aa0528371ede004466f0b9dcf7bc2a95118
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
# [0.26.1] - 07-31-2024
|
11
|
+
|
12
|
+
- 0.26.0 didn't publish correctly. There's no meaningful difference between 0.26.1 and 0.26.0.
|
13
|
+
|
14
|
+
# [0.26.0] - 07-26-2024
|
15
|
+
|
16
|
+
- Adapter class now has `nodes` API in [830](https://github.com/OSC/ood_core/pull/830).
|
17
|
+
- QueueInfo objects are GPU aware in [825](https://github.com/OSC/ood_core/pull/825).
|
18
|
+
- Systemd adapter bugfix for zsh in [834](https://github.com/OSC/ood_core/pull/834).
|
19
|
+
- Websockify timeout is variable in [840](https://github.com/OSC/ood_core/pull/840).
|
20
|
+
- Slurm adapter now forces utf-8 encoding in [842](https://github.com/OSC/ood_core/pull/842).
|
21
|
+
|
10
22
|
# [0.25.0] - 03-27-2024
|
11
23
|
|
12
24
|
- [828](https://github.com/OSC/ood_core/pull/828) and [826](https://github.com/OSC/ood_core/pull/826)
|
@@ -535,6 +547,9 @@ Functionally the same as [0.17.3] but with some CI updates.
|
|
535
547
|
- Initial release!
|
536
548
|
|
537
549
|
[Unreleased]: https://github.com/OSC/ood_core/compare/v0.24.2...HEAD
|
550
|
+
[0.26.1]: https://github.com/OSC/ood_core/compare/v0.26.0...v0.26.1
|
551
|
+
[0.26.0]: https://github.com/OSC/ood_core/compare/v0.25.0...v0.26.0
|
552
|
+
[0.25.0]: https://github.com/OSC/ood_core/compare/v0.24.2...v0.25.0
|
538
553
|
[0.24.2]: https://github.com/OSC/ood_core/compare/v0.24.1...v0.24.2
|
539
554
|
[0.24.1]: https://github.com/OSC/ood_core/compare/v0.24.0...v0.24.1
|
540
555
|
[0.24.0]: https://github.com/OSC/ood_core/compare/v0.23.5...v0.24.0
|
data/Rakefile
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require "rspec/core/rake_task"
|
3
|
+
require "minitest/test_task"
|
4
|
+
|
5
|
+
require_relative 'lib/tasks/slurm'
|
3
6
|
|
4
7
|
RSpec::Core::RakeTask.new(:spec)
|
5
8
|
|
9
|
+
|
10
|
+
Minitest::TestTask.create(:test) do |t|
|
11
|
+
t.libs << "test"
|
12
|
+
t.libs << "lib"
|
13
|
+
t.warning = false
|
14
|
+
t.test_globs = ["test/**/*_test.rb"]
|
15
|
+
end
|
16
|
+
|
6
17
|
task :default => :spec
|
@@ -134,7 +134,8 @@ module OodCore
|
|
134
134
|
def after_script
|
135
135
|
websockify_cmd = context.fetch(:websockify_cmd, "${WEBSOCKIFY_CMD:-/opt/websockify/run}").to_s
|
136
136
|
websockify_hb = context.fetch(:websockify_heartbeat_seconds, "${WEBSOCKIFY_HEARTBEAT_SECONDS:-30}").to_s
|
137
|
-
|
137
|
+
websockify_timeout_seconds = context.fetch(:websockify_timeout_seconds, '${WEBSOCKIFY_TIMEOUT_SECONDS:-10}').to_s
|
138
|
+
|
138
139
|
<<-EOT.gsub(/^ {14}/, "")
|
139
140
|
#{super}
|
140
141
|
|
@@ -146,6 +147,7 @@ module OodCore
|
|
146
147
|
#{websockify_cmd} $1 --heartbeat=#{websockify_hb} $2 &> $log_file &
|
147
148
|
local ws_pid=$!
|
148
149
|
local counter=0
|
150
|
+
local max_timeout=#{websockify_timeout_seconds}
|
149
151
|
|
150
152
|
# wait till websockify has successfully started
|
151
153
|
echo "[websockify]: pid: $ws_pid (proxying $1 ==> $2)" >&2
|
@@ -156,9 +158,9 @@ module OodCore
|
|
156
158
|
if ! ps $ws_pid > /dev/null; then
|
157
159
|
echo "[websockify]: failed to launch!" >&2
|
158
160
|
return 1
|
159
|
-
elif [ $counter -ge
|
160
|
-
# timeout after
|
161
|
-
echo "[websockify]: timed-out :(!" >&2
|
161
|
+
elif [ $counter -ge $max_timeout ]; then
|
162
|
+
# timeout after max_timeout seconds
|
163
|
+
echo "[websockify]: timed-out after $max_timeout seconds :(!" >&2
|
162
164
|
return 1
|
163
165
|
else
|
164
166
|
sleep 1
|
data/lib/ood_core/job/adapter.rb
CHANGED
@@ -213,6 +213,14 @@ module OodCore
|
|
213
213
|
def queues
|
214
214
|
[]
|
215
215
|
end
|
216
|
+
|
217
|
+
# Return the list of nodes for this scheduler.
|
218
|
+
#
|
219
|
+
# Subclasses that do not implement this will return empty arrays.
|
220
|
+
# @return [Array<NodeInfo>]
|
221
|
+
def nodes
|
222
|
+
[]
|
223
|
+
end
|
216
224
|
end
|
217
225
|
end
|
218
226
|
end
|
@@ -233,6 +233,7 @@ module OodCore
|
|
233
233
|
|
234
234
|
args.concat ["-N", script.job_name] unless script.job_name.nil?
|
235
235
|
args.concat ["-o", script.output_path] unless script.output_path.nil?
|
236
|
+
args.concat ['--mpi', "proc=#{script.cores}"] unless script.cores.nil?
|
236
237
|
if script.error_path.nil?
|
237
238
|
args.concat ["-j"]
|
238
239
|
else
|
@@ -239,7 +239,7 @@ class OodCore::Job::Adapters::Kubernetes::Batch
|
|
239
239
|
node_selector = native_data[:node_selector].nil? ? {} : native_data[:node_selector]
|
240
240
|
gpu_type = native_data[:gpu_type].nil? ? "nvidia.com/gpu" : native_data[:gpu_type]
|
241
241
|
|
242
|
-
template = ERB.new(File.read(resource_file),
|
242
|
+
template = ERB.new(File.read(resource_file), trim_mode: '-')
|
243
243
|
|
244
244
|
[template.result(binding), id]
|
245
245
|
end
|
@@ -271,7 +271,7 @@ class OodCore::Job::Adapters::Kubernetes::Batch
|
|
271
271
|
end
|
272
272
|
|
273
273
|
def namespace
|
274
|
-
"#{namespace_prefix}#{username}"
|
274
|
+
"#{namespace_prefix}#{username.gsub(/[.@]/, '-')}"
|
275
275
|
end
|
276
276
|
|
277
277
|
def formatted_ns_cmd
|
@@ -170,6 +170,7 @@ class OodCore::Job::Adapters::LinuxHost::Launcher
|
|
170
170
|
'script_timeout' => script_timeout(script),
|
171
171
|
'session_name' => session_name,
|
172
172
|
'singularity_bin' => singularity_bin,
|
173
|
+
'singularity_options' => singularity_options(script.native),
|
173
174
|
'singularity_image' => singularity_image(script.native),
|
174
175
|
'ssh_hosts' => ssh_hosts,
|
175
176
|
'tmux_bin' => tmux_bin,
|
@@ -205,6 +206,12 @@ class OodCore::Job::Adapters::LinuxHost::Launcher
|
|
205
206
|
native[:singularity_bindpath]
|
206
207
|
end
|
207
208
|
|
209
|
+
def singularity_options(native)
|
210
|
+
return '' unless native && native[:singularity_options]
|
211
|
+
|
212
|
+
native[:singularity_options]
|
213
|
+
end
|
214
|
+
|
208
215
|
def script_timeout(script)
|
209
216
|
wall_time = script.wall_time.to_i
|
210
217
|
return site_timeout if wall_time == 0
|
@@ -294,4 +301,4 @@ class OodCore::Job::Adapters::LinuxHost::Launcher
|
|
294
301
|
end.compact.last.to_s
|
295
302
|
end
|
296
303
|
|
297
|
-
end
|
304
|
+
end
|
@@ -47,7 +47,7 @@ trap exit_script SIGINT SIGTERM
|
|
47
47
|
OUTPUT_PATH=<%= output_path %>
|
48
48
|
ERROR_PATH=<%= error_path %>
|
49
49
|
({
|
50
|
-
timeout <%= script_timeout %>s <%= singularity_bin %> exec <%= contain %> --pid <%= singularity_image %> /bin/bash --login $singularity_tmp_file <%= arguments %>
|
50
|
+
timeout <%= script_timeout %>s <%= singularity_bin %> exec <%= singularity_options %> <%= contain %> --pid <%= singularity_image %> /bin/bash --login $singularity_tmp_file <%= arguments %>
|
51
51
|
} | tee "$OUTPUT_PATH") 3>&1 1>&2 2>&3 | tee "$ERROR_PATH"
|
52
52
|
|
53
53
|
<%= email_on_terminated %>
|
@@ -91,6 +91,7 @@ class OodCore::Job::Adapters::Lsf::Helper
|
|
91
91
|
args.concat ["-b", script.start_time.localtime.strftime("%Y:%m:%d:%H:%M")] unless script.start_time.nil?
|
92
92
|
args.concat ["-W", (script.wall_time / 60).to_i] unless script.wall_time.nil?
|
93
93
|
args.concat ["-L", script.shell_path.to_s] unless script.shell_path.nil?
|
94
|
+
args.concat ['-n', script.cores] unless script.cores.nil?
|
94
95
|
|
95
96
|
# environment
|
96
97
|
env = script.job_environment || {}
|
@@ -269,6 +269,7 @@ module OodCore
|
|
269
269
|
args.concat ["-a", script.start_time.localtime.strftime("%C%y%m%d%H%M.%S")] unless script.start_time.nil?
|
270
270
|
args.concat ["-A", script.accounting_id] unless script.accounting_id.nil?
|
271
271
|
args.concat ["-l", "walltime=#{seconds_to_duration(script.wall_time)}"] unless script.wall_time.nil?
|
272
|
+
args.concat ppn(script)
|
272
273
|
|
273
274
|
# Set dependencies
|
274
275
|
depend = []
|
@@ -422,6 +423,13 @@ module OodCore
|
|
422
423
|
'#PBS'
|
423
424
|
end
|
424
425
|
|
426
|
+
# place holder for when we support both nodes and cpus.
|
427
|
+
def ppn(script)
|
428
|
+
return [] if script.cores.nil?
|
429
|
+
|
430
|
+
['-l', "ncpus=#{script.cpus}"]
|
431
|
+
end
|
432
|
+
|
425
433
|
private
|
426
434
|
# Convert duration to seconds
|
427
435
|
def duration_in_seconds(time)
|
@@ -41,7 +41,7 @@ module OodCore
|
|
41
41
|
# calculated from gres string
|
42
42
|
# @return [Integer] the number of gpus in gres
|
43
43
|
def self.gpus_from_gres(gres)
|
44
|
-
gres.to_s.scan(/gpu
|
44
|
+
gres.to_s.scan(/gpu[^(,]*[:=](\d+)/).flatten.map(&:to_i).sum
|
45
45
|
end
|
46
46
|
|
47
47
|
# Object used for simplified communication with a Slurm batch server
|
@@ -169,6 +169,7 @@ module OodCore
|
|
169
169
|
# jobs << job
|
170
170
|
#
|
171
171
|
# assuming keys and values are same length! if not we have an error!
|
172
|
+
line = line.encode('UTF-8', invalid: :replace, undef: :replace)
|
172
173
|
values = line.chomp(RECORD_SEPARATOR).strip.split(UNIT_SEPARATOR)
|
173
174
|
jobs << Hash[fields.keys.zip(values)] unless values.empty?
|
174
175
|
end
|
@@ -327,13 +328,37 @@ module OodCore
|
|
327
328
|
|
328
329
|
[].tap do |ret_arr|
|
329
330
|
info_raw.each_line do |line|
|
330
|
-
ret_arr <<
|
331
|
+
ret_arr << str_to_queue_info(line)
|
331
332
|
end
|
332
333
|
end
|
333
334
|
end
|
334
335
|
|
336
|
+
def all_sinfo_node_fields
|
337
|
+
{
|
338
|
+
procs: '%c',
|
339
|
+
name: '%n',
|
340
|
+
features: '%f'
|
341
|
+
}
|
342
|
+
end
|
343
|
+
|
344
|
+
def nodes
|
345
|
+
args = all_sinfo_node_fields.values.join(UNIT_SEPARATOR)
|
346
|
+
output = call('sinfo', '-ho', "#{RECORD_SEPARATOR}#{args}")
|
347
|
+
|
348
|
+
output.each_line(RECORD_SEPARATOR).map do |line|
|
349
|
+
values = line.chomp(RECORD_SEPARATOR).strip.split(UNIT_SEPARATOR)
|
350
|
+
|
351
|
+
next if values.empty?
|
352
|
+
|
353
|
+
data = Hash[all_sinfo_node_fields.keys.zip(values)]
|
354
|
+
data[:name] = data[:name].to_s.split(',').first
|
355
|
+
data[:features] = data[:features].to_s.split(',')
|
356
|
+
NodeInfo.new(**data)
|
357
|
+
end.compact
|
358
|
+
end
|
359
|
+
|
335
360
|
private
|
336
|
-
def
|
361
|
+
def str_to_queue_info(line)
|
337
362
|
hsh = line.split(' ').map do |token|
|
338
363
|
m = token.match(/^(?<key>\w+)=(?<value>.+)$/)
|
339
364
|
[m[:key], m[:value]]
|
@@ -349,6 +374,7 @@ module OodCore
|
|
349
374
|
|
350
375
|
|
351
376
|
hsh[:deny_accounts] = hsh[:DenyAccounts].nil? ? [] : hsh[:DenyAccounts].to_s.split(',')
|
377
|
+
hsh[:tres] = hsh[:TRES].nil? ? {} : hsh[:TRES].to_s.split(',').map { |str| str.split('=') }.to_h
|
352
378
|
|
353
379
|
OodCore::Job::QueueInfo.new(**hsh)
|
354
380
|
end
|
@@ -500,6 +526,7 @@ module OodCore
|
|
500
526
|
args.concat ['-a', script.job_array_request] unless script.job_array_request.nil?
|
501
527
|
args.concat ['--qos', script.qos] unless script.qos.nil?
|
502
528
|
args.concat ['--gpus-per-node', script.gpus_per_node] unless script.gpus_per_node.nil?
|
529
|
+
args.concat ['-n', script.cores] unless script.cores.nil?
|
503
530
|
# ignore nodes, don't know how to do this for slurm
|
504
531
|
|
505
532
|
# Set dependencies
|
@@ -669,6 +696,10 @@ module OodCore
|
|
669
696
|
@slurm.queues
|
670
697
|
end
|
671
698
|
|
699
|
+
def nodes
|
700
|
+
@slurm.nodes
|
701
|
+
end
|
702
|
+
|
672
703
|
private
|
673
704
|
# Convert duration to seconds
|
674
705
|
def duration_in_seconds(time)
|
@@ -204,7 +204,7 @@ class OodCore::Job::Adapters::LinuxSystemd::Launcher
|
|
204
204
|
|
205
205
|
# List all Systemd sessions on destination_host started by this adapter
|
206
206
|
def list_remote_systemd_session(destination_host)
|
207
|
-
cmd = ssh_cmd(destination_host, ['systemctl', '--user', 'show', '-t', 'service', '--state=running', "#{session_name_label}
|
207
|
+
cmd = ssh_cmd(destination_host, ['systemctl', '--user', 'show', '-t', 'service', '--state=running', "#{session_name_label}-\\*"])
|
208
208
|
|
209
209
|
# individual units are separated with an empty line
|
210
210
|
call(*cmd).split("\n\n").map do |oneunit|
|
@@ -160,6 +160,7 @@ module OodCore
|
|
160
160
|
args.concat ['-t', script.job_array_request] unless script.job_array_request.nil?
|
161
161
|
args.concat ['-l', "qos=#{script.qos}"] unless script.qos.nil?
|
162
162
|
args.concat ['-l', "gpus=#{script.gpus_per_node}"] unless script.gpus_per_node.nil?
|
163
|
+
args.concat ppn(script)
|
163
164
|
|
164
165
|
# Set environment variables
|
165
166
|
env = script.job_environment.to_h
|
@@ -302,6 +303,13 @@ module OodCore
|
|
302
303
|
'#QSUB'
|
303
304
|
end
|
304
305
|
|
306
|
+
# place holder for when we support both nodes and cpus.
|
307
|
+
def ppn(script)
|
308
|
+
return [] if script.cores.nil?
|
309
|
+
|
310
|
+
['-l', "procs=#{script.cpus}"]
|
311
|
+
end
|
312
|
+
|
305
313
|
private
|
306
314
|
# Convert duration to seconds
|
307
315
|
def duration_in_seconds(time)
|
@@ -10,17 +10,26 @@ module OodCore
|
|
10
10
|
# @return [Integer, nil] number of procs
|
11
11
|
attr_reader :procs
|
12
12
|
|
13
|
+
# The features associated with this node.
|
14
|
+
# @return [Array<String>, []]
|
15
|
+
attr_reader :features
|
16
|
+
|
13
17
|
# @param name [#to_s] node name
|
14
18
|
# @param procs [#to_i, nil] number of procs
|
15
|
-
|
19
|
+
# @param features [#to_a, []] list of features
|
20
|
+
def initialize(name:, procs: nil, features: [], **_)
|
16
21
|
@name = name.to_s
|
17
22
|
@procs = procs && procs.to_i
|
23
|
+
@features = features.to_a
|
18
24
|
end
|
19
25
|
|
20
26
|
# Convert object to hash
|
21
27
|
# @return [Hash] object as hash
|
22
28
|
def to_h
|
23
|
-
|
29
|
+
instance_variables.map do |var|
|
30
|
+
name = var.to_s.gsub('@', '').to_sym
|
31
|
+
[name, send(name)]
|
32
|
+
end.to_h
|
24
33
|
end
|
25
34
|
|
26
35
|
# The comparison operator
|
@@ -20,9 +20,13 @@ class OodCore::Job::QueueInfo
|
|
20
20
|
# The accounts that are not allowed to use this queue.
|
21
21
|
attr_reader :deny_accounts
|
22
22
|
|
23
|
+
# An Hash of Trackable Resources and their values.
|
24
|
+
attr_reader :tres
|
25
|
+
|
23
26
|
def initialize(**opts)
|
24
27
|
@name = opts.fetch(:name, 'unknown')
|
25
28
|
@qos = opts.fetch(:qos, [])
|
29
|
+
@tres = opts.fetch(:tres, {})
|
26
30
|
|
27
31
|
allow_accounts = opts.fetch(:allow_accounts, nil)
|
28
32
|
@allow_accounts = if allow_accounts.nil?
|
@@ -42,4 +46,8 @@ class OodCore::Job::QueueInfo
|
|
42
46
|
[name, send(name)]
|
43
47
|
end.to_h
|
44
48
|
end
|
49
|
+
|
50
|
+
def gpu?
|
51
|
+
tres.keys.any? { |name| name.to_s.match?(%r{^gres/gpu($|:)}i) }
|
52
|
+
end
|
45
53
|
end
|
data/lib/ood_core/job/script.rb
CHANGED
@@ -108,6 +108,10 @@ module OodCore
|
|
108
108
|
# @return [Integer, nil] gpus per node
|
109
109
|
attr_reader :gpus_per_node
|
110
110
|
|
111
|
+
# The core request for this job
|
112
|
+
# @return [Integer, nil] cores
|
113
|
+
attr_reader :cores
|
114
|
+
|
111
115
|
# Object detailing any native specifications that are implementation specific
|
112
116
|
# @note Should not be used at all costs.
|
113
117
|
# @return [Object, nil] native specifications
|
@@ -151,7 +155,8 @@ module OodCore
|
|
151
155
|
output_path: nil, error_path: nil, reservation_id: nil,
|
152
156
|
queue_name: nil, priority: nil, start_time: nil,
|
153
157
|
wall_time: nil, accounting_id: nil, job_array_request: nil,
|
154
|
-
qos: nil, gpus_per_node: nil, native: nil, copy_environment: nil,
|
158
|
+
qos: nil, gpus_per_node: nil, native: nil, copy_environment: nil,
|
159
|
+
cores: nil, **_)
|
155
160
|
@content = content.to_s
|
156
161
|
|
157
162
|
@submit_as_hold = submit_as_hold
|
@@ -179,6 +184,7 @@ module OodCore
|
|
179
184
|
@gpus_per_node = gpus_per_node && gpus_per_node.to_i
|
180
185
|
@native = native
|
181
186
|
@copy_environment = (copy_environment.nil?) ? nil : !! copy_environment
|
187
|
+
@cores = cores&.to_i
|
182
188
|
end
|
183
189
|
|
184
190
|
# Convert object to hash
|
@@ -209,7 +215,8 @@ module OodCore
|
|
209
215
|
qos: qos,
|
210
216
|
gpus_per_node: gpus_per_node,
|
211
217
|
native: native,
|
212
|
-
|
218
|
+
cores: cores,
|
219
|
+
copy_environment: copy_environment,
|
213
220
|
}
|
214
221
|
end
|
215
222
|
|
data/lib/ood_core/version.rb
CHANGED
data/lib/tasks/slurm.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../ood_core'
|
4
|
+
require_relative '../ood_core/job/adapters/slurm'
|
5
|
+
|
6
|
+
namespace :slurm do
|
7
|
+
|
8
|
+
desc 'Get squeue output in the format this gem expects'
|
9
|
+
task :squeue do
|
10
|
+
fields = OodCore::Job::Adapters::Slurm::Batch.new.all_squeue_fields
|
11
|
+
args = OodCore::Job::Adapters::Slurm::Batch.new.squeue_args(options: fields.values)
|
12
|
+
|
13
|
+
single_job = `squeue #{args.join(' ')}`.split("\n")[0...2]
|
14
|
+
|
15
|
+
puts single_job
|
16
|
+
end
|
17
|
+
end
|
data/ood_core.gemspec
CHANGED
@@ -23,12 +23,14 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.required_ruby_version = ">= 2.5.0"
|
24
24
|
|
25
25
|
spec.add_runtime_dependency "ood_support", "~> 0.0.2"
|
26
|
-
spec.add_runtime_dependency "ffi", "~> 1.
|
26
|
+
spec.add_runtime_dependency "ffi", "~> 1.16.3"
|
27
27
|
spec.add_runtime_dependency "rexml", "~> 3.2"
|
28
28
|
spec.add_development_dependency "bundler", "~> 2.1"
|
29
|
-
spec.add_development_dependency "rake", "~> 13.
|
29
|
+
spec.add_development_dependency "rake", "~> 13.2.0"
|
30
30
|
spec.add_development_dependency "rspec", "~> 3.0"
|
31
31
|
spec.add_development_dependency "pry", "~> 0.10"
|
32
32
|
spec.add_development_dependency "timecop", "~> 0.8"
|
33
33
|
spec.add_development_dependency "climate_control", "~> 1.2.0"
|
34
|
+
spec.add_development_dependency "minitest", "~> 5"
|
35
|
+
spec.add_development_dependency "mocha", "~> 2.4"
|
34
36
|
end
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ood_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.27.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Franz
|
8
8
|
- Morgan Rodgers
|
9
9
|
- Jeremy Nicklas
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2024-
|
13
|
+
date: 2024-12-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: ood_support
|
@@ -32,20 +32,14 @@ dependencies:
|
|
32
32
|
requirements:
|
33
33
|
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
36
|
-
- - ">="
|
37
|
-
- !ruby/object:Gem::Version
|
38
|
-
version: 1.9.6
|
35
|
+
version: 1.16.3
|
39
36
|
type: :runtime
|
40
37
|
prerelease: false
|
41
38
|
version_requirements: !ruby/object:Gem::Requirement
|
42
39
|
requirements:
|
43
40
|
- - "~>"
|
44
41
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
46
|
-
- - ">="
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: 1.9.6
|
42
|
+
version: 1.16.3
|
49
43
|
- !ruby/object:Gem::Dependency
|
50
44
|
name: rexml
|
51
45
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,14 +74,14 @@ dependencies:
|
|
80
74
|
requirements:
|
81
75
|
- - "~>"
|
82
76
|
- !ruby/object:Gem::Version
|
83
|
-
version: 13.
|
77
|
+
version: 13.2.0
|
84
78
|
type: :development
|
85
79
|
prerelease: false
|
86
80
|
version_requirements: !ruby/object:Gem::Requirement
|
87
81
|
requirements:
|
88
82
|
- - "~>"
|
89
83
|
- !ruby/object:Gem::Version
|
90
|
-
version: 13.
|
84
|
+
version: 13.2.0
|
91
85
|
- !ruby/object:Gem::Dependency
|
92
86
|
name: rspec
|
93
87
|
requirement: !ruby/object:Gem::Requirement
|
@@ -144,6 +138,34 @@ dependencies:
|
|
144
138
|
- - "~>"
|
145
139
|
- !ruby/object:Gem::Version
|
146
140
|
version: 1.2.0
|
141
|
+
- !ruby/object:Gem::Dependency
|
142
|
+
name: minitest
|
143
|
+
requirement: !ruby/object:Gem::Requirement
|
144
|
+
requirements:
|
145
|
+
- - "~>"
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: '5'
|
148
|
+
type: :development
|
149
|
+
prerelease: false
|
150
|
+
version_requirements: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - "~>"
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '5'
|
155
|
+
- !ruby/object:Gem::Dependency
|
156
|
+
name: mocha
|
157
|
+
requirement: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - "~>"
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '2.4'
|
162
|
+
type: :development
|
163
|
+
prerelease: false
|
164
|
+
version_requirements: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - "~>"
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '2.4'
|
147
169
|
description: Open OnDemand core library that provides support for an HPC Center to
|
148
170
|
globally define HPC services that web applications can then take advantage of.
|
149
171
|
email:
|
@@ -227,12 +249,13 @@ files:
|
|
227
249
|
- lib/ood_core/refinements/drmaa_extensions.rb
|
228
250
|
- lib/ood_core/refinements/hash_extensions.rb
|
229
251
|
- lib/ood_core/version.rb
|
252
|
+
- lib/tasks/slurm.rb
|
230
253
|
- ood_core.gemspec
|
231
254
|
homepage: https://github.com/OSC/ood_core
|
232
255
|
licenses:
|
233
256
|
- MIT
|
234
257
|
metadata: {}
|
235
|
-
post_install_message:
|
258
|
+
post_install_message:
|
236
259
|
rdoc_options: []
|
237
260
|
require_paths:
|
238
261
|
- lib
|
@@ -248,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
248
271
|
version: '0'
|
249
272
|
requirements: []
|
250
273
|
rubygems_version: 3.1.2
|
251
|
-
signing_key:
|
274
|
+
signing_key:
|
252
275
|
specification_version: 4
|
253
276
|
summary: Open OnDemand core library
|
254
277
|
test_files: []
|