Class: OodCore::Job::Adapters::LinuxSystemd
- Inherits:
-
OodCore::Job::Adapter
- Object
- OodCore::Job::Adapter
- OodCore::Job::Adapters::LinuxSystemd
- Defined in:
- lib/ood_core/job/adapters/systemd.rb
Overview
The adapter for using systemd timers as the scheduler.
Defined Under Namespace
Classes: Launcher
Instance Method Summary collapse
-
#delete(id) ⇒ void
abstract
Delete the submitted job.
- #directive_prefix ⇒ Object
-
#hold(id) ⇒ void
abstract
Put the submitted job on hold.
-
#info(id) ⇒ Info
Retrieve job info from the SSH host.
-
#info_all(attrs: nil, host: nil) ⇒ Array<Info>
Retrieve info for all jobs from the resource manager.
-
#info_all_each(attrs: nil) {|Info| ... } ⇒ Enumerator
Iterate over each job Info object.
-
#info_where_owner(_, attrs: nil) ⇒ Array<Info>
Retrieve info for all jobs for a given owner or owners from the resource manager Note: owner and attrs are present only to complete the interface and are ignored Note: since this API is used in production no errors or warnings are thrown / issued.
-
#info_where_owner_each(owner, attrs: nil) {|Info| ... } ⇒ Enumerator
Iterate over each job Info object.
-
#initialize(ssh_hosts:, launcher:) ⇒ LinuxSystemd
constructor
A new instance of LinuxSystemd.
-
#release(id) ⇒ void
abstract
Release the job that is on hold.
-
#status(id) ⇒ Status
abstract
Retrieve job status from resource manager.
-
#submit(script, after: [], afterok: [], afternotok: [], afterany: []) ⇒ String
Submit a job with the attributes defined in the job template instance.
-
#supports_job_arrays? ⇒ Boolean
Whether the adapter supports job arrays.
Methods inherited from OodCore::Job::Adapter
#accounts, #cluster_info, #job_name_illegal_chars, #nodes, #queues, #sanitize_job_name
Constructor Details
#initialize(ssh_hosts:, launcher:) ⇒ LinuxSystemd
Returns a new instance of LinuxSystemd.
46 47 48 49 |
# File 'lib/ood_core/job/adapters/systemd.rb', line 46 def initialize(ssh_hosts:, launcher:) @launcher = launcher @ssh_hosts = Set.new(ssh_hosts) end |
Instance Method Details
#delete(id) ⇒ void
Subclass is expected to implement #delete
This method returns an undefined value.
Delete the submitted job
181 182 183 184 185 186 |
# File 'lib/ood_core/job/adapters/systemd.rb', line 181 def delete(id) session_name, destination_host = parse_job_id(id) @launcher.stop_remote_session(session_name, destination_host) rescue Launcher::Error => e raise JobAdapterError, e. end |
#directive_prefix ⇒ Object
188 189 190 |
# File 'lib/ood_core/job/adapters/systemd.rb', line 188 def directive_prefix nil end |
#hold(id) ⇒ void
Subclass is expected to implement #hold
This method returns an undefined value.
Put the submitted job on hold
161 162 163 164 |
# File 'lib/ood_core/job/adapters/systemd.rb', line 161 def hold(id) # Consider sending SIGSTOP? raise NotImplementedError, "subclass did not define #hold" end |
#info(id) ⇒ Info
Retrieve job info from the SSH host
133 134 135 136 137 138 139 |
# File 'lib/ood_core/job/adapters/systemd.rb', line 133 def info(id) _, host = parse_job_id(id) job = info_all(host: host).select{|info| info.id == id}.first (job) ? job : Info.new(id: id, status: :completed) rescue Launcher::Error => e raise JobAdapterError, e. end |
#info_all(attrs: nil, host: nil) ⇒ Array<Info>
Retrieve info for all jobs from the resource manager
76 77 78 79 80 81 82 83 84 |
# File 'lib/ood_core/job/adapters/systemd.rb', line 76 def info_all(attrs: nil, host: nil) host_permitted?(host) if host @launcher.list_remote_sessions(host: host).map{ |ls_output| ls_to_info(ls_output) } rescue Launcher::Error => e raise JobAdapterError, e. end |
#info_all_each(attrs: nil) {|Info| ... } ⇒ Enumerator
Iterate over each job Info object
101 102 103 104 105 106 107 |
# File 'lib/ood_core/job/adapters/systemd.rb', line 101 def info_all_each(attrs: nil) return to_enum(:info_all_each, attrs: attrs) unless block_given? info_all(attrs: attrs).each do |job| yield job end end |
#info_where_owner(_, attrs: nil) ⇒ Array<Info>
Retrieve info for all jobs for a given owner or owners from the resource manager Note: owner and attrs are present only to complete the interface and are ignored Note: since this API is used in production no errors or warnings are thrown / issued
93 94 95 |
# File 'lib/ood_core/job/adapters/systemd.rb', line 93 def info_where_owner(_, attrs: nil) info_all end |
#info_where_owner_each(owner, attrs: nil) {|Info| ... } ⇒ Enumerator
Iterate over each job Info object
114 115 116 117 118 119 120 |
# File 'lib/ood_core/job/adapters/systemd.rb', line 114 def info_where_owner_each(owner, attrs: nil) return to_enum(:info_where_owner_each, owner, attrs: attrs) unless block_given? info_where_owner(owner, attrs: attrs).each do |job| yield job end end |
#release(id) ⇒ void
Subclass is expected to implement #release
This method returns an undefined value.
Release the job that is on hold
171 172 173 174 |
# File 'lib/ood_core/job/adapters/systemd.rb', line 171 def release(id) # Consider sending SIGCONT raise NotImplementedError, "subclass did not define #release" end |
#status(id) ⇒ Status
Subclass is expected to implement #status
Optimized slightly over retrieving complete job information from server
Retrieve job status from resource manager
147 148 149 150 151 152 153 154 |
# File 'lib/ood_core/job/adapters/systemd.rb', line 147 def status(id) _, host = parse_job_id(id) job = info_all(host: host).select{|info| info.id == id}.first Status.new(state: (job) ? :running : :completed) rescue Launcher::Error => e raise JobAdapterError, e. end |
#submit(script, after: [], afterok: [], afternotok: [], afterany: []) ⇒ String
Submit a job with the attributes defined in the job template instance
62 63 64 65 66 67 68 69 70 |
# File 'lib/ood_core/job/adapters/systemd.rb', line 62 def submit(script, after: [], afterok: [], afternotok: [], afterany: []) unless (after.empty? && afterok.empty? && afternotok.empty? && afterany.empty?) raise JobAdapterError, 'Scheduling subsequent jobs is not available.' end @launcher.start_remote_session(script) rescue Launcher::Error => e raise JobAdapterError, e. end |
#supports_job_arrays? ⇒ Boolean
Whether the adapter supports job arrays
124 125 126 |
# File 'lib/ood_core/job/adapters/systemd.rb', line 124 def supports_job_arrays? false end |