ood_core 0.9.3 → 0.11.4

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.
@@ -192,7 +192,7 @@ module OodCore
192
192
  # @return [String] the id of the job that was created
193
193
  def submit_string(str, args: [], env: {})
194
194
  args = args.map(&:to_s) + ["--parsable"]
195
- env = {"SBATCH_EXPORT" => "NONE"}.merge env.each_with_object({}) { |(k, v), h| h[k.to_s] = v.to_s }
195
+ env = env.to_h.each_with_object({}) { |(k, v), h| h[k.to_s] = v.to_s }
196
196
  call("sbatch", *args, env: env, stdin: str.to_s).strip.split(";").first
197
197
  end
198
198
 
@@ -394,7 +394,7 @@ module OodCore
394
394
 
395
395
  # Set environment variables
396
396
  env = script.job_environment || {}
397
- args += ["--export", script.job_environment.keys.join(",")] unless script.job_environment.nil? || script.job_environment.empty?
397
+ args += ["--export", export_arg(env, script.copy_environment?)]
398
398
 
399
399
  # Set native options
400
400
  args += script.native if script.native
@@ -530,6 +530,10 @@ module OodCore
530
530
  raise JobAdapterError, e.message unless /Invalid job id specified/ =~ e.message
531
531
  end
532
532
 
533
+ def directive_prefix
534
+ '#SBATCH'
535
+ end
536
+
533
537
  private
534
538
  # Convert duration to seconds
535
539
  def duration_in_seconds(time)
@@ -623,6 +627,25 @@ module OodCore
623
627
 
624
628
  Info.new(**parent_task_hash)
625
629
  end
630
+
631
+
632
+ # we default to export NONE, but SLURM defaults to ALL.
633
+ # we do this bc SLURM setups a new environment, loading /etc/profile
634
+ # and all giving 'module' function (among other things shells give),
635
+ # where the PUN did not.
636
+ # --export=ALL export the PUN's environment.
637
+ def export_arg(env, copy_environment)
638
+ if !env.empty? && !copy_environment
639
+ env.keys.join(",")
640
+ elsif !env.empty? && copy_environment
641
+ "ALL," + env.keys.join(",")
642
+ elsif env.empty? && copy_environment
643
+ # only this option changes behaivor dramatically
644
+ "ALL"
645
+ else
646
+ "NONE"
647
+ end
648
+ end
626
649
  end
627
650
  end
628
651
  end
@@ -155,6 +155,7 @@ module OodCore
155
155
  # Set environment variables
156
156
  env = script.job_environment.to_h
157
157
  args += ["-v", env.keys.join(",")] unless env.empty?
158
+ args += ["-V"] if script.copy_environment?
158
159
 
159
160
  # If error_path is not specified we join stdout & stderr (as this
160
161
  # mimics what the other resource managers do)
@@ -288,6 +289,10 @@ module OodCore
288
289
  raise JobAdapterError, e.message
289
290
  end
290
291
 
292
+ def directive_prefix
293
+ '#QSUB'
294
+ end
295
+
291
296
  private
292
297
  # Convert duration to seconds
293
298
  def duration_in_seconds(time)
@@ -10,68 +10,33 @@
10
10
  module OodCore
11
11
  module Job
12
12
  class ArrayIds
13
- class Error < StandardError ; end
13
+ attr_reader :spec_string
14
14
 
15
- attr_reader :ids
16
15
  def initialize(spec_string)
17
- @ids = []
18
- begin
19
- parse_spec_string(spec_string) if spec_string
20
- rescue Error
21
- end
22
- end
23
-
24
- protected
25
- def parse_spec_string(spec_string)
26
- @ids = get_components(spec_string).map{
27
- |component| process_component(component)
28
- }.reduce(:+).sort
16
+ @spec_string = spec_string
29
17
  end
30
18
 
31
- def get_components(spec_string)
32
- base = discard_percent_modifier(spec_string)
33
- raise Error unless base
34
- base.split(',')
19
+ def ids
20
+ @ids ||= parse_spec_string(spec_string)
35
21
  end
36
22
 
37
- # A few adapters use percent to define an arrays maximum number of
38
- # simultaneous tasks. The percent is expected to come at the end.
39
- def discard_percent_modifier(spec_string)
40
- spec_string.split('%').first
41
- end
23
+ protected
42
24
 
43
- def process_component(component)
44
- if is_range?(component)
45
- get_range(component)
46
- elsif numbers_valid?([component])
47
- [ component.to_i ]
48
- else
49
- raise Error
25
+ def parse_spec_string(spec_string)
26
+ return [] unless spec_string
27
+
28
+ rx = /^(\d+)-?(\d+)?:?(\d+)?%?\d*$/
29
+ spec_string.split(',').reduce([]) do |ids, spec|
30
+ if rx =~ spec
31
+ start = ($1 || 1).to_i
32
+ finish = ($2 || start).to_i
33
+ step = ($3 || 1).to_i
34
+ ids.concat (start..finish).step(step).to_a
35
+ end
36
+
37
+ ids
50
38
  end
51
39
  end
52
-
53
- def get_range(component)
54
- raw_range, raw_step = component.split(':')
55
- start, stop = raw_range.split('-')
56
- raise Error unless numbers_valid?(
57
- # Only include Step if it is not nil
58
- [start, stop].tap { |a| a << raw_step if raw_step }
59
- )
60
- range = Range.new(start.to_i, stop.to_i)
61
- step = raw_step.to_i
62
- step = 1 if step == 0
63
-
64
- range.step(step).to_a
65
- end
66
-
67
- def is_range?(component)
68
- component.include?('-')
69
- end
70
-
71
- # Protect against Ruby's String#to_i returning 0 for arbitrary strings
72
- def numbers_valid?(numbers)
73
- numbers.all? { |str| /^[0-9]+$/ =~ str }
74
- end
75
40
  end
76
41
  end
77
42
  end
@@ -104,6 +104,11 @@ module OodCore
104
104
  # @return [Object, nil] native specifications
105
105
  attr_reader :native
106
106
 
107
+ # Flag whether the job should contain a copy of its calling environment
108
+ # @return [Boolean] copy environment
109
+ attr_reader :copy_environment
110
+ alias_method :copy_environment?, :copy_environment
111
+
107
112
  # @param content [#to_s] the script content
108
113
  # @param args [Array<#to_s>, nil] arguments supplied to script
109
114
  # @param submit_as_hold [Boolean, nil] whether job is held after submit
@@ -126,13 +131,15 @@ module OodCore
126
131
  # @param wall_time [#to_i, nil] max real time
127
132
  # @param accounting_id [#to_s, nil] accounting id
128
133
  # @param native [Object, nil] native specifications
134
+ # @param copy_environment [Boolean, nil] copy the environment
129
135
  def initialize(content:, args: nil, submit_as_hold: nil, rerunnable: nil,
130
136
  job_environment: nil, workdir: nil, email: nil,
131
137
  email_on_started: nil, email_on_terminated: nil,
132
138
  job_name: nil, shell_path: nil, input_path: nil,
133
139
  output_path: nil, error_path: nil, reservation_id: nil,
134
140
  queue_name: nil, priority: nil, start_time: nil,
135
- wall_time: nil, accounting_id: nil, job_array_request: nil, native: nil, **_)
141
+ wall_time: nil, accounting_id: nil, job_array_request: nil,
142
+ native: nil, copy_environment: nil, **_)
136
143
  @content = content.to_s
137
144
 
138
145
  @submit_as_hold = submit_as_hold
@@ -157,6 +164,7 @@ module OodCore
157
164
  @accounting_id = accounting_id && accounting_id.to_s
158
165
  @job_array_request = job_array_request && job_array_request.to_s
159
166
  @native = native
167
+ @copy_environment = (copy_environment.nil?) ? nil : !! copy_environment
160
168
  end
161
169
 
162
170
  # Convert object to hash
@@ -184,7 +192,8 @@ module OodCore
184
192
  wall_time: wall_time,
185
193
  accounting_id: accounting_id,
186
194
  job_array_request: job_array_request,
187
- native: native
195
+ native: native,
196
+ copy_environment: copy_environment
188
197
  }
189
198
  end
190
199
 
@@ -1,4 +1,4 @@
1
1
  module OodCore
2
2
  # The current version of {OodCore}
3
- VERSION = "0.9.3"
3
+ VERSION = "0.11.4"
4
4
  end
@@ -25,8 +25,9 @@ Gem::Specification.new do |spec|
25
25
  spec.add_runtime_dependency "ood_support", "~> 0.0.2"
26
26
  spec.add_runtime_dependency "ffi", "~> 1.9", ">= 1.9.6"
27
27
  spec.add_development_dependency "bundler", "~> 1.7"
28
- spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rake", "~> 13.0.1"
29
29
  spec.add_development_dependency "rspec", "~> 3.0"
30
30
  spec.add_development_dependency "pry", "~> 0.10"
31
31
  spec.add_development_dependency "timecop", "~> 0.8"
32
+ spec.add_development_dependency "climate_control", "~> 0.2.0"
32
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ood_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.11.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Franz
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2019-05-09 00:00:00.000000000 Z
13
+ date: 2020-05-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: ood_support
@@ -66,14 +66,14 @@ dependencies:
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '10.0'
69
+ version: 13.0.1
70
70
  type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '10.0'
76
+ version: 13.0.1
77
77
  - !ruby/object:Gem::Dependency
78
78
  name: rspec
79
79
  requirement: !ruby/object:Gem::Requirement
@@ -116,6 +116,20 @@ dependencies:
116
116
  - - "~>"
117
117
  - !ruby/object:Gem::Version
118
118
  version: '0.8'
119
+ - !ruby/object:Gem::Dependency
120
+ name: climate_control
121
+ requirement: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: 0.2.0
126
+ type: :development
127
+ prerelease: false
128
+ version_requirements: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 0.2.0
119
133
  description: Open OnDemand core library that provides support for an HPC Center to
120
134
  globally define HPC services that web applications can then take advantage of.
121
135
  email:
@@ -147,9 +161,14 @@ files:
147
161
  - lib/ood_core/cluster.rb
148
162
  - lib/ood_core/clusters.rb
149
163
  - lib/ood_core/errors.rb
164
+ - lib/ood_core/invalid_cluster.rb
150
165
  - lib/ood_core/job/adapter.rb
151
166
  - lib/ood_core/job/adapters/drmaa.rb
152
167
  - lib/ood_core/job/adapters/helper.rb
168
+ - lib/ood_core/job/adapters/linux_host.rb
169
+ - lib/ood_core/job/adapters/linux_host/launcher.rb
170
+ - lib/ood_core/job/adapters/linux_host/templates/email.erb.sh
171
+ - lib/ood_core/job/adapters/linux_host/templates/script_wrapper.erb.sh
153
172
  - lib/ood_core/job/adapters/lsf.rb
154
173
  - lib/ood_core/job/adapters/lsf/batch.rb
155
174
  - lib/ood_core/job/adapters/lsf/helper.rb
@@ -196,8 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
196
215
  - !ruby/object:Gem::Version
197
216
  version: '0'
198
217
  requirements: []
199
- rubyforge_project:
200
- rubygems_version: 2.6.14
218
+ rubygems_version: 3.0.3
201
219
  signing_key:
202
220
  specification_version: 4
203
221
  summary: Open OnDemand core library