Skip to content

Commit d211b13

Browse files
committed
Do not add finalizers automatically.
1 parent cd07ae4 commit d211b13

File tree

6 files changed

+37
-29
lines changed

6 files changed

+37
-29
lines changed

controllers/deployment/reconcile.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1515
"k8s.io/apimachinery/pkg/util/sets"
1616
"sigs.k8s.io/controller-runtime/pkg/client"
17+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
1718
)
1819

1920
func (c *controller) Reconcile(r *controllers.Ctx[*v2.FirewallDeployment]) error {
@@ -138,6 +139,8 @@ func (c *controller) createFirewallSet(r *controllers.Ctx[*v2.FirewallDeployment
138139
},
139140
}
140141

142+
_ = controllerutil.AddFinalizer(set, v2.FinalizerName)
143+
141144
err = c.c.GetSeedClient().Create(r.Ctx, set, &client.CreateOptions{})
142145
if err != nil {
143146
cond := v2.NewCondition(v2.FirewallDeplomentProgressing, v2.ConditionFalse, "FirewallSetCreateError", fmt.Sprintf("Error creating firewall set: %s.", err))

controllers/generic_controller.go

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -97,36 +97,31 @@ func (g GenericController[O]) Reconcile(ctx context.Context, req ctrl.Request) (
9797
}
9898

9999
if !o.GetDeletionTimestamp().IsZero() {
100-
if controllerutil.ContainsFinalizer(o, v2.FinalizerName) {
101-
log.Info("reconciling resource deletion flow")
102-
err := g.reconciler.Delete(rctx)
103-
if err != nil {
104-
var requeueErr *requeueError
105-
if errors.As(err, &requeueErr) {
106-
log.Info(requeueErr.Error())
107-
return ctrl.Result{RequeueAfter: requeueErr.after}, nil //nolint:nilerr we need to return nil such that the requeue works
108-
}
109-
110-
log.Error(err, "error during deletion flow")
111-
return ctrl.Result{}, err
112-
}
100+
if !controllerutil.ContainsFinalizer(o, v2.FinalizerName) {
101+
log.Info("resource has no finalizer anymore, nothing further to do for deletion")
102+
return ctrl.Result{}, nil
103+
}
113104

114-
log.Info("deletion finished, removing finalizer")
115-
controllerutil.RemoveFinalizer(o, v2.FinalizerName)
116-
if err := g.c.Update(ctx, o); err != nil {
117-
return ctrl.Result{}, err
105+
log.Info("reconciling resource deletion flow")
106+
err := g.reconciler.Delete(rctx)
107+
if err != nil {
108+
var requeueErr *requeueError
109+
if errors.As(err, &requeueErr) {
110+
log.Info(requeueErr.Error())
111+
return ctrl.Result{RequeueAfter: requeueErr.after}, nil //nolint:nilerr we need to return nil such that the requeue works
118112
}
119-
}
120113

121-
return ctrl.Result{}, nil
122-
}
114+
log.Error(err, "error during deletion flow")
115+
return ctrl.Result{}, err
116+
}
123117

124-
if !controllerutil.ContainsFinalizer(o, v2.FinalizerName) {
125-
log.Info("adding finalizer")
126-
controllerutil.AddFinalizer(o, v2.FinalizerName)
118+
log.Info("deletion finished, removing finalizer")
119+
controllerutil.RemoveFinalizer(o, v2.FinalizerName)
127120
if err := g.c.Update(ctx, o); err != nil {
128-
return ctrl.Result{}, fmt.Errorf("unable to add finalizer: %w", err)
121+
return ctrl.Result{}, err
129122
}
123+
124+
return ctrl.Result{}, nil
130125
}
131126

132127
var statusErr error

controllers/monitor/reconcile.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (c *controller) Reconcile(r *controllers.Ctx[*v2.FirewallMonitor]) error {
2323
fw, err := c.updateFirewallStatus(r)
2424
if err != nil {
2525
r.Log.Error(err, "unable to update firewall status")
26-
return controllers.RequeueAfter(3*time.Second, "unable to update firewall status, retrying")
26+
return fmt.Errorf("unable to update firewall status: %w", err)
2727
}
2828

2929
err = c.offerFirewallControllerMigrationSecret(r, fw)

controllers/set/controller_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ var _ = Context("firewall set controller", Ordered, func() {
108108
if !fw.CreationTimestamp.Time.Before(newest.CreationTimestamp.Time) {
109109
newest = &fw
110110
}
111+
112+
// as there is no firewall controller running, we need to take out the finalizers
113+
fw.Finalizers = nil
114+
Expect(k8sClient.Update(ctx, &fw)).To(Succeed())
111115
}
112116

113117
Expect(newest).NotTo(BeNil())

controllers/set/reconcile.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/metal-stack/firewall-controller-manager/controllers"
1010
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1111
"sigs.k8s.io/controller-runtime/pkg/client"
12+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
1213
)
1314

1415
func (c *controller) Reconcile(r *controllers.Ctx[*v2.FirewallSet]) error {
@@ -163,6 +164,8 @@ func (c *controller) createFirewall(r *controllers.Ctx[*v2.FirewallSet]) (*v2.Fi
163164
Distance: r.Target.Spec.Distance,
164165
}
165166

167+
_ = controllerutil.AddFinalizer(fw, v2.FinalizerName)
168+
166169
err = c.c.GetSeedClient().Create(r.Ctx, fw, &client.CreateOptions{})
167170
if err != nil {
168171
return nil, fmt.Errorf("unable to create firewall resource: %w", err)
@@ -204,6 +207,7 @@ func (c *controller) adoptFirewall(r *controllers.Ctx[*v2.FirewallSet], fw *v2.F
204207
}
205208

206209
fw.OwnerReferences = append(fw.OwnerReferences, *metav1.NewControllerRef(r.Target, v2.GroupVersion.WithKind("FirewallSet")))
210+
_ = controllerutil.AddFinalizer(fw, v2.FinalizerName)
207211

208212
err = c.c.GetSeedClient().Update(r.Ctx, fw)
209213
if err != nil {

integration/integration_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,9 @@ var _ = Context("integration test", Ordered, func() {
123123
deployment = func() *v2.FirewallDeployment {
124124
return &v2.FirewallDeployment{
125125
ObjectMeta: metav1.ObjectMeta{
126-
Name: "test",
127-
Namespace: namespaceName,
126+
Name: "test",
127+
Namespace: namespaceName,
128+
Finalizers: []string{v2.FinalizerName},
128129
},
129130
Spec: v2.FirewallDeploymentSpec{
130131
Replicas: 1,
@@ -1551,8 +1552,9 @@ var _ = Context("integration test", Ordered, func() {
15511552
deployment = func() *v2.FirewallDeployment {
15521553
return &v2.FirewallDeployment{
15531554
ObjectMeta: metav1.ObjectMeta{
1554-
Name: "test",
1555-
Namespace: namespaceName,
1555+
Name: "test",
1556+
Namespace: namespaceName,
1557+
Finalizers: []string{v2.FinalizerName},
15561558
},
15571559
Spec: v2.FirewallDeploymentSpec{
15581560
Replicas: 1,

0 commit comments

Comments
 (0)