Skip to content

Commit 2ebb2ef

Browse files
Reet00J12934
authored andcommitted
#2293 Deletes a scan if TTLSecondsAfterFinished option was set
checkIfTTLSecondsAfterFinishedisCompleted checks if the option was set and if the time has exceeded Signed-off-by: Samreet Singh <samreet.singh@iteratec.com>
1 parent 7f687db commit 2ebb2ef

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

operator/controllers/execution/scans/scan_controller.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,14 @@ func (r *ScanReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.
107107
err = r.setHookStatus(&scan)
108108
case executionv1.ScanStateHookProcessing:
109109
err = r.executeHooks(&scan)
110+
case executionv1.ScanStateErrored:
111+
if r.checkIfTTLSecondsAfterFinishedisCompleted(&scan) {
112+
err = r.deleteScan(&scan)
113+
}
114+
case executionv1.ScanStateDone:
115+
if r.checkIfTTLSecondsAfterFinishedisCompleted(&scan) {
116+
err = r.deleteScan(&scan)
117+
}
110118
case executionv1.ScanStateReadAndWriteHookProcessing:
111119
fallthrough
112120
case executionv1.ScanStateReadAndWriteHookCompleted:

operator/controllers/execution/scans/scan_reconciler.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
rbacv1 "k8s.io/api/rbac/v1"
2121
resource "k8s.io/apimachinery/pkg/api/resource"
2222

23+
apierrors "k8s.io/apimachinery/pkg/api/errors"
2324
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2425
"k8s.io/apimachinery/pkg/types"
2526
ctrl "sigs.k8s.io/controller-runtime"
@@ -416,3 +417,34 @@ func (r *ScanReconciler) constructJobForScan(scan *executionv1.Scan, scanTypeSpe
416417

417418
return job, nil
418419
}
420+
421+
func (r *ScanReconciler) checkIfTTLSecondsAfterFinishedisCompleted(scan *executionv1.Scan) bool {
422+
if scan.Spec.TTLSecondsAfterFinished == nil {
423+
return false
424+
}
425+
interval := time.Duration(*scan.Spec.TTLSecondsAfterFinished) * time.Second
426+
r.Log.Info("TTLSecondsAfterFinished interval", "interval:", interval)
427+
if scan.Status.FinishedAt != nil {
428+
scanTimeout := scan.Status.FinishedAt
429+
r.Log.Info("TTLSecondsAfterFinished scanTimeout", "scanTimeout", scanTimeout)
430+
now := time.Now()
431+
if now.After(scanTimeout.Add(interval)) {
432+
return true
433+
}
434+
}
435+
return false
436+
}
437+
438+
func (r *ScanReconciler) deleteScan(scan *executionv1.Scan) error {
439+
ctx := context.Background()
440+
err := r.Client.Delete(ctx, scan)
441+
if err != nil {
442+
if apierrors.IsNotFound(err) {
443+
r.Log.V(1).Info("Scan was already deleted, nothing to do")
444+
} else {
445+
r.Log.Error(err, "Unexpected error while trying to delete Scan")
446+
return err
447+
}
448+
}
449+
return nil
450+
}

0 commit comments

Comments
 (0)