ood_core 0.9.3 → 0.11.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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