class CronKubernetes::CronTab
The “table” of Kubernetes CronJobs that we manage in the cluster.
Public Instance Methods
update(schedule = nil)
click to toggle source
“Apply” the new configuration
- remove from cluster any cron_jobs that are no longer in the schedule - add new jobs - update cron_jobs that exist (deleting a cron_job deletes the job and pod)
# File lib/cron_kubernetes/cron_tab.rb, line 10 def update(schedule = nil) schedule ||= CronKubernetes::Scheduler.instance.schedule add, change, remove = diff_schedules(schedule, current_cron_jobs) remove.each { |job| remove_cron_job(job) } add.each { |job| add_cron_job(job) } change.each { |job| update_cron_job(job) } end
Private Instance Methods
add_cron_job(job)
click to toggle source
Add a CronKubernetes::CronJob
to the Kubernetes cluster
# File lib/cron_kubernetes/cron_tab.rb, line 54 def add_cron_job(job) client.create_cron_job(Kubeclient::Resource.new(job.cron_job_manifest)) end
client()
click to toggle source
# File lib/cron_kubernetes/cron_tab.rb, line 20 def client @client ||= CronKubernetes::KubernetesClient.new.batch_beta1_client end
current_cron_jobs()
click to toggle source
Find all k8s CronJobs by our label for the identifier
# File lib/cron_kubernetes/cron_tab.rb, line 30 def current_cron_jobs client.get_cron_jobs(label_selector) end
diff_schedules(new, existing)
click to toggle source
# File lib/cron_kubernetes/cron_tab.rb, line 34 def diff_schedules(new, existing) new_index = index_cron_jobs(new) existing_index = index_kubernetes_cron_jobs(existing) add_keys = new_index.keys - existing_index.keys remove_keys = existing_index.keys - new_index.keys change_keys = new_index.keys & existing_index.keys [ new_index.values_at(*add_keys), new_index.values_at(*change_keys), existing_index.values_at(*remove_keys) ] end
index_cron_jobs(jobs)
click to toggle source
# File lib/cron_kubernetes/cron_tab.rb, line 62 def index_cron_jobs(jobs) jobs.map { |job| ["#{job.identifier}-#{job.name}", job] }.to_h end
index_kubernetes_cron_jobs(jobs)
click to toggle source
# File lib/cron_kubernetes/cron_tab.rb, line 66 def index_kubernetes_cron_jobs(jobs) jobs.map { |job| [job.metadata.name, job] }.to_h end
label_selector()
click to toggle source
Define a label for our jobs based on an identifier
# File lib/cron_kubernetes/cron_tab.rb, line 25 def label_selector {label_selector: "cron-kubernetes-identifier=#{CronKubernetes.identifier}"} end
remove_cron_job(job)
click to toggle source
Remove a Kubeclient::Resource::CronJob from the Kubernetes cluster
# File lib/cron_kubernetes/cron_tab.rb, line 49 def remove_cron_job(job) client.delete_cron_job(job.metadata.name, job.metadata.namespace) end
update_cron_job(job)
click to toggle source
# File lib/cron_kubernetes/cron_tab.rb, line 58 def update_cron_job(job) client.update_cron_job(Kubeclient::Resource.new(job.cron_job_manifest)) end