class CronKubernetes::CronJob

A single job to run on a given schedule.

Attributes

command[RW]
identifier[RW]
job_manifest[RW]
name[RW]
schedule[RW]

Public Class Methods

new(schedule: nil, command: nil, job_manifest: nil, name: nil, identifier: nil) click to toggle source
# File lib/cron_kubernetes/cron_job.rb, line 10
def initialize(schedule: nil, command: nil, job_manifest: nil, name: nil, identifier: nil)
  @schedule     = schedule
  @command      = command
  @job_manifest = job_manifest
  @name         = name
  @identifier   = identifier
end

Public Instance Methods

cron_job_manifest() click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/cron_kubernetes/cron_job.rb, line 19
def cron_job_manifest
  {
      "apiVersion" => "batch/v1beta1",
      "kind"       => "CronJob",
      "metadata"   => {
          "name"      => "#{identifier}-#{cron_job_name}",
          "namespace" => namespace,
          "labels"    => {"cron-kubernetes-identifier" => identifier}
      },
      "spec"       => {
          "schedule"    => schedule,
          "jobTemplate" => {
              "metadata" => job_metadata,
              "spec"     => job_spec
          }
      }
  }
end

Private Instance Methods

cron_job_name() click to toggle source
# File lib/cron_kubernetes/cron_job.rb, line 57
def cron_job_name
  return name if name
  return job_hash(job_manifest["metadata"]["name"]) if job_manifest["metadata"]
  pod_template_name
end
job_hash(name) click to toggle source

rubocop:enable Metrics/AbcSize

# File lib/cron_kubernetes/cron_job.rb, line 72
def job_hash(name)
  "#{name}-#{Digest::SHA1.hexdigest(schedule + command.join)[0..7]}"
end
job_metadata() click to toggle source
# File lib/cron_kubernetes/cron_job.rb, line 53
def job_metadata
  job_manifest["metadata"]
end
job_spec() click to toggle source
# File lib/cron_kubernetes/cron_job.rb, line 46
def job_spec
  spec = job_manifest["spec"].dup
  first_container = spec["template"]["spec"]["containers"][0]
  first_container["command"] = command
  spec
end
namespace() click to toggle source

rubocop:enable Metrics/MethodLength

# File lib/cron_kubernetes/cron_job.rb, line 41
def namespace
  return job_manifest["metadata"]["namespace"] if job_manifest["metadata"] && job_manifest["metadata"]["namespace"]
  "default"
end
pod_template_name() click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/cron_kubernetes/cron_job.rb, line 64
def pod_template_name
  return nil unless job_manifest["spec"] &&
        job_manifest["spec"]["template"] &&
        job_manifest["spec"]["template"]["metadata"]
  job_hash(job_manifest["spec"]["template"]["metadata"]["name"])
end