Class: OodCore::Job::Adapters::Kubernetes

Inherits:
OodCore::Job::Adapter show all
Defined in:
lib/ood_core/job/adapters/kubernetes.rb

Overview

The adapter class for Kubernetes.

Defined Under Namespace

Modules: Resources Classes: Batch, Helper, K8sJobInfo

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from OodCore::Job::Adapter

#accounts, #cluster_info, #directive_prefix, #info_historic, #job_name_illegal_chars, #nodes, #queues, #sanitize_job_name, #supports_job_dependencies?

Constructor Details

#initialize(batch) ⇒ Kubernetes

Returns a new instance of Kubernetes.



27
28
29
# File 'lib/ood_core/job/adapters/kubernetes.rb', line 27

def initialize(batch)
  @batch = batch
end

Instance Attribute Details

#batch ⇒ Object (readonly)

Returns the value of attribute batch.



25
26
27
# File 'lib/ood_core/job/adapters/kubernetes.rb', line 25

def batch
  @batch
end

Instance Method Details

#delete(id) ⇒ void

This method returns an undefined value.

Delete the submitted job.

Parameters:

  • id (#to_s) —

    the id of the job



188
189
190
191
192
# File 'lib/ood_core/job/adapters/kubernetes.rb', line 188

def delete(id)
  batch.delete(id.to_s)
rescue Batch::Error => e
  raise JobAdapterError, e.message
end

#hold(id) ⇒ void

This method is abstract.

Subclass is expected to implement #hold

This method returns an undefined value.

Put the submitted job on hold

Parameters:

  • id (#to_s) —

    the id of the job

Raises:

  • (NotImplementedError) —

    if subclass did not define #hold



171
172
173
# File 'lib/ood_core/job/adapters/kubernetes.rb', line 171

def hold(id)
  raise NotImplementedError, 'subclass did not define #hold'
end

#info(id) ⇒ Info

This method is abstract.

Subclass is expected to implement #info

Retrieve job info from the resource manager

Parameters:

  • id (#to_s) —

    the id of the job

Returns:

  • (Info) —

    information describing submitted job

Raises:

  • (NotImplementedError) —

    if subclass did not define #info



150
151
152
153
154
# File 'lib/ood_core/job/adapters/kubernetes.rb', line 150

def info(id)
  batch.info(id.to_s)
rescue Batch::Error => e
  raise JobAdapterError, e.message
end

#info_all(attrs: nil) ⇒ Array<Info>

This method is abstract.

Subclass is expected to implement #info_all

Retrieve info for all jobs from the resource manager

Parameters:

  • attrs (Array<symbol>) (defaults to: nil) —

    defaults to nil (and all attrs are provided) This array specifies only attrs you want, in addition to id and status. If an array, the Info object that is returned to you is not guarenteed to have a value for any attr besides the ones specified and id and status.

    For certain adapters this may speed up the response since adapters can get by without populating the entire Info object

Returns:

  • (Array<Info>) —

    information describing submitted jobs

Raises:

  • (NotImplementedError) —

    if subclass did not define #info_all



75
76
77
78
79
# File 'lib/ood_core/job/adapters/kubernetes.rb', line 75

def info_all(attrs: nil)
  batch.info_all(attrs: attrs)
rescue Batch::Error => e
  raise JobAdapterError, e.message
end

#info_all_each(attrs: nil) {|Info| ... } ⇒ Enumerator

Iterate over each job Info object

Parameters:

  • attrs (Array<symbol>) (defaults to: nil) —

    defaults to nil (and all attrs are provided) This array specifies only attrs you want, in addition to id and status. If an array, the Info object that is returned to you is not guarenteed to have a value for any attr besides the ones specified and id and status.

    For certain adapters this may speed up the response since adapters can get by without populating the entire Info object

Yields:

  • (Info) —

    of each job to block

Returns:

  • (Enumerator) —

    if no block given



111
112
113
114
115
116
117
# File 'lib/ood_core/job/adapters/kubernetes.rb', line 111

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(owner, attrs: nil) ⇒ Array<Info>

Retrieve info for all jobs for a given owner or owners from the resource manager

Parameters:

  • owner (#to_s, Array<#to_s>) —

    the owner(s) of the jobs

  • attrs (Array<symbol>) (defaults to: nil) —

    defaults to nil (and all attrs are provided) This array specifies only attrs you want, in addition to id and status. If an array, the Info object that is returned to you is not guarenteed to have a value for any attr besides the ones specified and id and status.

    For certain adapters this may speed up the response since adapters can get by without populating the entire Info object

Returns:

  • (Array<Info>) —

    information describing submitted jobs



92
93
94
95
96
97
98
99
# File 'lib/ood_core/job/adapters/kubernetes.rb', line 92

def info_where_owner(owner, attrs: nil)
  owner = Array.wrap(owner).map(&:to_s)

  # must at least have job_owner to filter by job_owner
  attrs = Array.wrap(attrs) | [:job_owner] unless attrs.nil?

  info_all(attrs: attrs).select { |info| owner.include? info.job_owner }
end

#info_where_owner_each(owner, attrs: nil) {|Info| ... } ⇒ Enumerator

Iterate over each job Info object

Parameters:

  • owner (#to_s, Array<#to_s>) —

    the owner(s) of the jobs

  • attrs (Array<symbol>) (defaults to: nil) —

    defaults to nil (and all attrs are provided) This array specifies only attrs you want, in addition to id and status. If an array, the Info object that is returned to you is not guarenteed to have a value for any attr besides the ones specified and id and status.

    For certain adapters this may speed up the response since adapters can get by without populating the entire Info object

Yields:

  • (Info) —

    of each job to block

Returns:

  • (Enumerator) —

    if no block given



130
131
132
133
134
135
136
# File 'lib/ood_core/job/adapters/kubernetes.rb', line 130

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

This method is abstract.

Subclass is expected to implement #release

This method returns an undefined value.

Release the job that is on hold

Parameters:

  • id (#to_s) —

    the id of the job

Raises:

  • (NotImplementedError) —

    if subclass did not define #release



180
181
182
# File 'lib/ood_core/job/adapters/kubernetes.rb', line 180

def release(id)
  raise NotImplementedError, 'subclass did not define #release'
end

#status(id) ⇒ Status

This method is abstract.

Subclass is expected to implement #status

Note:

Optimized slightly over retrieving complete job information from server

Retrieve job status from resource manager

Parameters:

  • id (#to_s) —

    the id of the job

Returns:

Raises:

  • (NotImplementedError) —

    if subclass did not define #status



162
163
164
# File 'lib/ood_core/job/adapters/kubernetes.rb', line 162

def status(id)
  info(id).status
end

#submit(script, after: [], afterok: [], afternotok: [], afterany: []) ⇒ String

This method is abstract.

Subclass is expected to implement #submit

Submit a job with the attributes defined in the job template instance

Examples:

Submit job template to cluster

solver_id = job_adapter.submit(solver_script)
#=> "1234.server"

Submit job that depends on previous job

post_id = job_adapter.submit(
  post_script,
  afterok: solver_id
)
#=> "1235.server"

Parameters:

  • script (Script) —

    script object that describes the script and attributes for the submitted job

  • after (#to_s, Array<#to_s>) (defaults to: []) —

    this job may be scheduled for execution at any point after dependent jobs have started execution

  • afterok (#to_s, Array<#to_s>) (defaults to: []) —

    this job may be scheduled for execution only after dependent jobs have terminated with no errors

  • afternotok (#to_s, Array<#to_s>) (defaults to: []) —

    this job may be scheduled for execution only after dependent jobs have terminated with errors

  • afterany (#to_s, Array<#to_s>) (defaults to: []) —

    this job may be scheduled for execution after dependent jobs have terminated

Returns:

  • (String) —

    the job id returned after successfully submitting a job

Raises:

  • (NotImplementedError) —

    if subclass did not define #submit



54
55
56
57
58
59
60
61
# File 'lib/ood_core/job/adapters/kubernetes.rb', line 54

def submit(script, after: [], afterok: [], afternotok: [], afterany: [])
  raise ArgumentError, 'Must specify the script' if script.nil?
  validate_native(script, Hash, required: true)

  batch.submit(script)
rescue Batch::Error => e
  raise JobAdapterError, e.message
end

#supports_job_arrays? ⇒ Boolean

Whether the adapter supports job arrays

Returns:

  • (Boolean) —
    • assumes true; but can be overridden by adapters that explicitly do not


141
142
143
# File 'lib/ood_core/job/adapters/kubernetes.rb', line 141

def supports_job_arrays?
  false
end