diff --git a/internal/controllers/skipjob.go b/internal/controllers/skipjob.go index e840daf1..dfe921a6 100644 --- a/internal/controllers/skipjob.go +++ b/internal/controllers/skipjob.go @@ -291,9 +291,6 @@ func (r *SKIPJobReconciler) updateConditions(ctx context.Context, skipJob *skipe if err != nil { return fmt.Errorf("failed to list jobs: %w", err) } - if len(jobList.Items) == 0 { - return nil - } //find last job to set conditions, cronjobs have multiple jobs lastJob := &batchv1.Job{} @@ -302,7 +299,14 @@ func (r *SKIPJobReconciler) updateConditions(ctx context.Context, skipJob *skipe lastJob = &liveJob } } - if isFailed, failedJobMessage := isFailedJob(lastJob); isFailed { + + if len(jobList.Items) == 0 { + skipJob.Status.Conditions = []v1.Condition{ + r.getConditionFailed(skipJob, v1.ConditionFalse, nil), + r.getConditionRunning(skipJob, v1.ConditionFalse), + r.getConditionFinished(skipJob, v1.ConditionFalse), + } + } else if isFailed, failedJobMessage := isFailedJob(lastJob); isFailed { skipJob.Status.Conditions = []v1.Condition{ r.getConditionFailed(skipJob, v1.ConditionTrue, &failedJobMessage), r.getConditionRunning(skipJob, v1.ConditionFalse), diff --git a/tests/skipjob/access-policy-job/chainsaw-test.yaml b/tests/skipjob/access-policy-job/chainsaw-test.yaml index e4766b1e..a632a9af 100644 --- a/tests/skipjob/access-policy-job/chainsaw-test.yaml +++ b/tests/skipjob/access-policy-job/chainsaw-test.yaml @@ -34,3 +34,8 @@ spec: file: netpol-istio.yaml - assert: file: netpol-istio-assert.yaml + - try: + - apply: + file: status-ready-no-job.yaml + - assert: + file: status-ready-no-job-assert.yaml diff --git a/tests/skipjob/access-policy-job/skipjob-cron-assert.yaml b/tests/skipjob/access-policy-job/skipjob-cron-assert.yaml index f6689493..0743b3d0 100644 --- a/tests/skipjob/access-policy-job/skipjob-cron-assert.yaml +++ b/tests/skipjob/access-policy-job/skipjob-cron-assert.yaml @@ -24,6 +24,7 @@ spec: cron: schedule: "* * * * *" status: + accessPolicies: Ready conditions: - type: Failed status: "False" diff --git a/tests/skipjob/access-policy-job/status-ready-no-job-assert.yaml b/tests/skipjob/access-policy-job/status-ready-no-job-assert.yaml new file mode 100644 index 00000000..728fa9b7 --- /dev/null +++ b/tests/skipjob/access-policy-job/status-ready-no-job-assert.yaml @@ -0,0 +1,45 @@ +apiVersion: skiperator.kartverket.no/v1alpha1 +kind: SKIPJob +metadata: + name: status-ready-no-job +status: + accessPolicies: Ready + conditions: + - type: Failed + status: 'False' + - type: Running + status: 'False' + - type: Finished + status: 'False' + - message: Internal rules are valid + reason: ApplicationReconciled + status: 'True' + type: InternalRulesValid + subresources: + CronJob[status-ready-no-job]: + message: CronJob has finished synchronizing + status: Synced + ServiceAccount[status-ready-no-job-skipjob]: + message: ServiceAccount has finished synchronizing + status: Synced + ServiceEntry[skipjob-status-ready-no-job-egress-3da5ecd99bd5b65]: + message: ServiceEntry has finished synchronizing + status: Synced + summary: + message: All subresources synced + status: Synced +spec: + container: + accessPolicy: + outbound: + external: + - host: data.helsecert.no + image: image + cron: + allowConcurrency: Allow + schedule: 0 6 * * * + suspend: false + job: + backoffLimit: 6 + suspend: false + ttlSecondsAfterFinished: 3600 diff --git a/tests/skipjob/access-policy-job/status-ready-no-job.yaml b/tests/skipjob/access-policy-job/status-ready-no-job.yaml new file mode 100644 index 00000000..c09441e3 --- /dev/null +++ b/tests/skipjob/access-policy-job/status-ready-no-job.yaml @@ -0,0 +1,19 @@ +apiVersion: skiperator.kartverket.no/v1alpha1 +kind: SKIPJob +metadata: + name: status-ready-no-job +spec: + container: + accessPolicy: + outbound: + external: + - host: data.helsecert.no + image: image + cron: + allowConcurrency: Allow + schedule: "0 6 * * *" + suspend: false + job: + backoffLimit: 6 + suspend: false + ttlSecondsAfterFinished: 3600