Skip to content

Commit 5c1b128

Browse files
authored
Merge pull request #266 from kaden-l-nelson/patch/finalizer
Add a finalizer to the ImagePolicy and ImageRepository resources
2 parents 5ab6137 + 518a846 commit 5c1b128

4 files changed

+44
-0
lines changed

api/v1beta1/imagepolicy_types.go

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
)
2525

2626
const ImagePolicyKind = "ImagePolicy"
27+
const ImagePolicyFinalizer = "finalizers.fluxcd.io"
2728

2829
// ImagePolicySpec defines the parameters for calculating the
2930
// ImagePolicy

api/v1beta1/imagerepository_types.go

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
)
2828

2929
const ImageRepositoryKind = "ImageRepository"
30+
const ImageRepositoryFinalizer = "finalizers.fluxcd.io"
3031

3132
// ImageRepositorySpec defines the parameters for scanning an image
3233
// repository, e.g., `fluxcd/flux`.

controllers/imagepolicy_controller.go

+21
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
ctrl "sigs.k8s.io/controller-runtime"
3131
"sigs.k8s.io/controller-runtime/pkg/client"
3232
"sigs.k8s.io/controller-runtime/pkg/controller"
33+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
3334
"sigs.k8s.io/controller-runtime/pkg/handler"
3435
"sigs.k8s.io/controller-runtime/pkg/reconcile"
3536
"sigs.k8s.io/controller-runtime/pkg/source"
@@ -89,6 +90,26 @@ func (r *ImagePolicyReconciler) Reconcile(ctx context.Context, req ctrl.Request)
8990
}
9091
defer r.recordReadinessMetric(ctx, &pol)
9192

93+
// Add our finalizer if it does not exist.
94+
if !controllerutil.ContainsFinalizer(&pol, imagev1.ImagePolicyFinalizer) {
95+
patch := client.MergeFrom(pol.DeepCopy())
96+
controllerutil.AddFinalizer(&pol, imagev1.ImagePolicyFinalizer)
97+
if err := r.Patch(ctx, &pol, patch); err != nil {
98+
log.Error(err, "unable to register finalizer")
99+
return ctrl.Result{}, err
100+
}
101+
}
102+
103+
// If the object is under deletion, record the readiness, and remove our finalizer.
104+
if !pol.ObjectMeta.DeletionTimestamp.IsZero() {
105+
r.recordReadinessMetric(ctx, &pol)
106+
controllerutil.RemoveFinalizer(&pol, imagev1.ImagePolicyFinalizer)
107+
if err := r.Update(ctx, &pol); err != nil {
108+
return ctrl.Result{}, err
109+
}
110+
return ctrl.Result{}, nil
111+
}
112+
92113
var repo imagev1.ImageRepository
93114
repoNamespacedName := types.NamespacedName{
94115
Namespace: pol.Namespace,

controllers/imagerepository_controller.go

+21
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import (
4646
ctrl "sigs.k8s.io/controller-runtime"
4747
"sigs.k8s.io/controller-runtime/pkg/client"
4848
"sigs.k8s.io/controller-runtime/pkg/controller"
49+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
4950
"sigs.k8s.io/controller-runtime/pkg/predicate"
5051

5152
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
@@ -128,6 +129,26 @@ func (r *ImageRepositoryReconciler) Reconcile(ctx context.Context, req ctrl.Requ
128129

129130
log := ctrl.LoggerFrom(ctx)
130131

132+
// Add our finalizer if it does not exist.
133+
if !controllerutil.ContainsFinalizer(&imageRepo, imagev1.ImageRepositoryFinalizer) {
134+
patch := client.MergeFrom(imageRepo.DeepCopy())
135+
controllerutil.AddFinalizer(&imageRepo, imagev1.ImageRepositoryFinalizer)
136+
if err := r.Patch(ctx, &imageRepo, patch); err != nil {
137+
log.Error(err, "unable to register finalizer")
138+
return ctrl.Result{}, err
139+
}
140+
}
141+
142+
// If the object is under deletion, record the readiness, and remove our finalizer.
143+
if !imageRepo.ObjectMeta.DeletionTimestamp.IsZero() {
144+
r.recordReadinessMetric(ctx, &imageRepo)
145+
controllerutil.RemoveFinalizer(&imageRepo, imagev1.ImageRepositoryFinalizer)
146+
if err := r.Update(ctx, &imageRepo); err != nil {
147+
return ctrl.Result{}, err
148+
}
149+
return ctrl.Result{}, nil
150+
}
151+
131152
if imageRepo.Spec.Suspend {
132153
msg := "ImageRepository is suspended, skipping reconciliation"
133154
imagev1.SetImageRepositoryReadiness(

0 commit comments

Comments
 (0)