Skip to content

Commit a70a43e

Browse files
authored
Merge pull request #534 from kartverket/skipjob-tz
SKIPJob[cron]: add support for timezone
2 parents 1811ebe + b4daa8d commit a70a43e

File tree

7 files changed

+114
-0
lines changed

7 files changed

+114
-0
lines changed

api/v1alpha1/skipjob_types.go

+8
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,14 @@ type CronSettings struct {
175175
//+kubebuilder:validation:Required
176176
Schedule string `json:"schedule"`
177177

178+
// The time zone name for the given schedule, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones. If not specified,
179+
// this will default to the time zone of the cluster.
180+
//
181+
// Example: "Europe/Oslo"
182+
//
183+
// +kubebuilder:validation:Optional
184+
TimeZone *string `json:"timeZone,omitempty"`
185+
178186
// Denotes the deadline in seconds for starting a job on its schedule, if for some reason the Job's controller was not ready upon the scheduled time.
179187
// If unset, Jobs missing their deadline will be considered failed jobs and will not start.
180188
//

api/v1alpha1/zz_generated.deepcopy.go

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/skiperator.kartverket.no_skipjobs.yaml

+7
Original file line numberDiff line numberDiff line change
@@ -780,6 +780,13 @@ spec:
780780
If set to true, this tells Kubernetes to suspend this Job till the field is set to false. If the Job is active while this field is set to true,
781781
all running Pods will be terminated.
782782
type: boolean
783+
timeZone:
784+
description: |-
785+
The time zone name for the given schedule, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones. If not specified,
786+
this will default to the time zone of the cluster.
787+
788+
Example: "Europe/Oslo"
789+
type: string
783790
required:
784791
- schedule
785792
type: object

pkg/resourcegenerator/job/job.go

+1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ func Generate(r reconciliation.Reconciliation) error {
5757
func getCronJobSpec(skipJob *skiperatorv1alpha1.SKIPJob, selector *metav1.LabelSelector, podLabels map[string]string, gcpIdentityConfigMap *corev1.ConfigMap) batchv1.CronJobSpec {
5858
spec := batchv1.CronJobSpec{
5959
Schedule: skipJob.Spec.Cron.Schedule,
60+
TimeZone: skipJob.Spec.Cron.TimeZone,
6061
StartingDeadlineSeconds: skipJob.Spec.Cron.StartingDeadlineSeconds,
6162
ConcurrencyPolicy: skipJob.Spec.Cron.ConcurrencyPolicy,
6263
Suspend: skipJob.Spec.Cron.Suspend,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: chainsaw.kyverno.io/v1alpha1
2+
kind: Test
3+
metadata:
4+
name: cron-job-timezone
5+
spec:
6+
skip: false
7+
concurrent: true
8+
skipDelete: false
9+
steps:
10+
- try:
11+
- apply:
12+
file: skipjob.yaml
13+
- assert:
14+
file: skipjob-assert.yaml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
apiVersion: v1
2+
kind: ServiceAccount
3+
metadata:
4+
name: cron-job-timezone-skipjob
5+
labels:
6+
skiperator.kartverket.no/skipjob: "true"
7+
skiperator.kartverket.no/skipjobName: cron-job-timezone
8+
app.kubernetes.io/managed-by: "skiperator"
9+
skiperator.kartverket.no/controller: "skipjob"
10+
---
11+
apiVersion: batch/v1
12+
kind: CronJob
13+
metadata:
14+
name: cron-job-timezone
15+
labels:
16+
skiperator.kartverket.no/skipjob: "true"
17+
skiperator.kartverket.no/skipjobName: cron-job-timezone
18+
app.kubernetes.io/managed-by: "skiperator"
19+
skiperator.kartverket.no/controller: "skipjob"
20+
ownerReferences:
21+
- apiVersion: skiperator.kartverket.no/v1alpha1
22+
blockOwnerDeletion: true
23+
controller: true
24+
kind: SKIPJob
25+
name: cron-job-timezone
26+
spec:
27+
schedule: "* * * * *"
28+
timeZone: "Europe/Oslo"
29+
concurrencyPolicy: Allow
30+
suspend: false
31+
successfulJobsHistoryLimit: 3
32+
failedJobsHistoryLimit: 1
33+
jobTemplate:
34+
metadata:
35+
labels:
36+
app: cron-job-timezone-skipjob
37+
skiperator.kartverket.no/skipjob: "true"
38+
skiperator.kartverket.no/skipjobName: cron-job-timezone
39+
app.kubernetes.io/managed-by: "skiperator"
40+
skiperator.kartverket.no/controller: "skipjob"
41+
spec:
42+
template:
43+
metadata:
44+
labels:
45+
app: cron-job-timezone-skipjob
46+
spec:
47+
containers:
48+
- name: cron-job-timezone-skipjob
49+
image: "perl:5.34.0"
50+
---
51+
apiVersion: v1
52+
kind: Pod
53+
metadata:
54+
labels:
55+
app: cron-job-timezone-skipjob
56+
app.kubernetes.io/managed-by: skiperator
57+
skiperator.kartverket.no/controller: skipjob
58+
skiperator.kartverket.no/skipjob: 'true'
59+
skiperator.kartverket.no/skipjobName: cron-job-timezone
60+
ownerReferences:
61+
- apiVersion: batch/v1
62+
kind: Job
63+
controller: true
64+
blockOwnerDeletion: true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: skiperator.kartverket.no/v1alpha1
2+
kind: SKIPJob
3+
metadata:
4+
name: cron-job-timezone
5+
spec:
6+
container:
7+
image: "perl:5.34.0"
8+
command:
9+
- "perl"
10+
- "-Mbignum=bpi"
11+
- "-wle"
12+
- "print bpi(2000)"
13+
cron:
14+
schedule: "* * * * *"
15+
timeZone: "Europe/Oslo"

0 commit comments

Comments
 (0)