/
deleteManager.go
53 lines (43 loc) · 1.95 KB
/
deleteManager.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package backupschedule
import (
"context"
"errors"
"fmt"
"github.com/cloudogu/k8s-backup-operator/pkg/retry"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
v1 "github.com/cloudogu/k8s-backup-operator/pkg/api/v1"
)
type defaultDeleteManager struct {
clientSet ecosystemInterface
recorder eventRecorder
namespace string
}
func newDeleteManager(clientSet ecosystemInterface, recorder eventRecorder, namespace string) *defaultDeleteManager {
return &defaultDeleteManager{clientSet: clientSet, recorder: recorder, namespace: namespace}
}
func (dm *defaultDeleteManager) delete(ctx context.Context, backupSchedule *v1.BackupSchedule) error {
dm.recorder.Event(backupSchedule, corev1.EventTypeNormal, v1.DeleteEventReason, "Deleting backup schedule")
backupScheduleName := backupSchedule.Name
schedulesClient := dm.clientSet.EcosystemV1Alpha1().BackupSchedules(dm.namespace)
backupSchedule, err := schedulesClient.UpdateStatusDeleting(ctx, backupSchedule)
if err != nil {
return fmt.Errorf("failed to set status [%s] in backup schedule resource [%s]: %w", v1.BackupScheduleStatusDeleting, backupScheduleName, err)
}
err = retry.OnError(maxTries, retry.AlwaysRetryFunc, func() error {
return dm.clientSet.BatchV1().CronJobs(dm.namespace).Delete(ctx, backupSchedule.CronJobName(), metav1.DeleteOptions{})
})
if err != nil {
err = fmt.Errorf("failed to delete cron job for backup schedule [%s]: %w", backupScheduleName, err)
_, updateStatusErr := schedulesClient.UpdateStatusFailed(ctx, backupSchedule)
if updateStatusErr != nil {
err = errors.Join(err, fmt.Errorf("failed to update backup schedule status to 'Failed': %w", updateStatusErr))
}
return err
}
_, err = schedulesClient.RemoveFinalizer(ctx, backupSchedule, v1.BackupScheduleFinalizer)
if err != nil {
return fmt.Errorf("failed to remove finalizer [%s] in backup schedule resource [%s]: %w", v1.BackupScheduleFinalizer, backupScheduleName, err)
}
return nil
}