Skip to content

Commit a3e1448

Browse files
uzabanovdanail-branekov
authored andcommitted
Remove checking instance type in webhook
Finalizaers are added to all instances no matter what the type is. In UPSI controller added removing the finalizer when deletion timesamp is not zero
1 parent 2913cf9 commit a3e1448

File tree

9 files changed

+35
-24
lines changed

9 files changed

+35
-24
lines changed

api/repositories/service_instance_repository.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ func (r *ServiceInstanceRepo) DeleteServiceInstance(ctx context.Context, authInf
481481

482482
if message.Purge {
483483
if err = k8s.PatchResource(ctx, userClient, serviceInstance, func() {
484-
controllerutil.RemoveFinalizer(serviceInstance, korifiv1alpha1.CFManagedServiceInstanceFinalizerName)
484+
controllerutil.RemoveFinalizer(serviceInstance, korifiv1alpha1.CFServiceInstanceFinalizerName)
485485
}); err != nil {
486486
return ServiceInstanceRecord{}, fmt.Errorf("failed to remove finalizer for service instance: %s, %w", message.GUID, apierrors.FromK8sError(err, ServiceInstanceResourceType))
487487
}

api/repositories/service_instance_repository_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1081,7 +1081,7 @@ var _ = Describe("ServiceInstanceRepository", func() {
10811081
BeforeEach(func() {
10821082
serviceInstance = createServiceInstanceCR(ctx, k8sClient, prefixedGUID("service-instance"), space.Name, "the-service-instance", prefixedGUID("secret"))
10831083

1084-
serviceInstance.Finalizers = append(serviceInstance.Finalizers, korifiv1alpha1.CFManagedServiceInstanceFinalizerName)
1084+
serviceInstance.Finalizers = append(serviceInstance.Finalizers, korifiv1alpha1.CFServiceInstanceFinalizerName)
10851085
Expect(k8sClient.Update(ctx, serviceInstance)).To(Succeed())
10861086

10871087
serviceBinding = &korifiv1alpha1.CFServiceBinding{

controllers/api/v1alpha1/cfserviceinstance_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const (
2929
UserProvidedType = "user-provided"
3030
ManagedType = "managed"
3131

32-
CFManagedServiceInstanceFinalizerName = "managed.cfServiceInstance.korifi.cloudfoundry.org"
32+
CFServiceInstanceFinalizerName = "cfServiceInstance.korifi.cloudfoundry.org"
3333

3434
ProvisioningFailedCondition = "ProvisioningFailed"
3535
)

controllers/controllers/services/instances/managed/controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ func (r *Reconciler) finalizeCFServiceInstance(
329329
) (ctrl.Result, error) {
330330
log := logr.FromContextOrDiscard(ctx).WithName("finalizeCFServiceInstance")
331331

332-
if !controllerutil.ContainsFinalizer(serviceInstance, korifiv1alpha1.CFManagedServiceInstanceFinalizerName) {
332+
if !controllerutil.ContainsFinalizer(serviceInstance, korifiv1alpha1.CFServiceInstanceFinalizerName) {
333333
return ctrl.Result{}, nil
334334
}
335335

@@ -338,7 +338,7 @@ func (r *Reconciler) finalizeCFServiceInstance(
338338
log.Error(err, "failed to deprovision service instance with broker")
339339
}
340340

341-
controllerutil.RemoveFinalizer(serviceInstance, korifiv1alpha1.CFManagedServiceInstanceFinalizerName)
341+
controllerutil.RemoveFinalizer(serviceInstance, korifiv1alpha1.CFServiceInstanceFinalizerName)
342342
log.V(1).Info("finalizer removed")
343343

344344
return ctrl.Result{}, nil

controllers/controllers/services/instances/managed/controller_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ var _ = Describe("CFServiceInstance", func() {
126126
Name: uuid.NewString(),
127127
Namespace: namespace.Name,
128128
Finalizers: []string{
129-
korifiv1alpha1.CFManagedServiceInstanceFinalizerName,
129+
korifiv1alpha1.CFServiceInstanceFinalizerName,
130130
},
131131
},
132132
Spec: korifiv1alpha1.CFServiceInstanceSpec{
@@ -797,7 +797,7 @@ var _ = Describe("CFServiceInstance", func() {
797797
When("the service instance is purged", func() {
798798
BeforeEach(func() {
799799
Expect(k8s.PatchResource(ctx, adminClient, instance, func() {
800-
controllerutil.RemoveFinalizer(instance, korifiv1alpha1.CFManagedServiceInstanceFinalizerName)
800+
controllerutil.RemoveFinalizer(instance, korifiv1alpha1.CFServiceInstanceFinalizerName)
801801
})).To(Succeed())
802802
})
803803

controllers/controllers/services/instances/upsi/controller.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import (
3737
ctrl "sigs.k8s.io/controller-runtime"
3838
"sigs.k8s.io/controller-runtime/pkg/builder"
3939
"sigs.k8s.io/controller-runtime/pkg/client"
40+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
4041
"sigs.k8s.io/controller-runtime/pkg/handler"
4142
"sigs.k8s.io/controller-runtime/pkg/predicate"
4243
"sigs.k8s.io/controller-runtime/pkg/reconcile"
@@ -110,6 +111,13 @@ func (r *Reconciler) ReconcileResource(ctx context.Context, cfServiceInstance *k
110111
cfServiceInstance.Status.ObservedGeneration = cfServiceInstance.Generation
111112
log.V(1).Info("set observed generation", "generation", cfServiceInstance.Status.ObservedGeneration)
112113

114+
if !cfServiceInstance.GetDeletionTimestamp().IsZero() {
115+
controllerutil.RemoveFinalizer(cfServiceInstance, korifiv1alpha1.CFServiceInstanceFinalizerName)
116+
log.V(1).Info("finalizer removed")
117+
118+
return ctrl.Result{}, nil
119+
}
120+
113121
credentialsSecret := &corev1.Secret{
114122
ObjectMeta: metav1.ObjectMeta{
115123
Namespace: cfServiceInstance.Namespace,

controllers/controllers/services/instances/upsi/controller_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
. "github.com/onsi/ginkgo/v2"
1313
. "github.com/onsi/gomega"
1414
corev1 "k8s.io/api/core/v1"
15+
k8serrors "k8s.io/apimachinery/pkg/api/errors"
1516
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1617
)
1718

@@ -36,6 +37,9 @@ var _ = Describe("CFServiceInstance", func() {
3637
ObjectMeta: metav1.ObjectMeta{
3738
Name: uuid.NewString(),
3839
Namespace: testNamespace,
40+
Finalizers: []string{
41+
korifiv1alpha1.CFServiceInstanceFinalizerName,
42+
},
3943
},
4044
Spec: korifiv1alpha1.CFServiceInstanceSpec{
4145
DisplayName: "service-instance-name",
@@ -209,6 +213,19 @@ var _ = Describe("CFServiceInstance", func() {
209213
}).Should(Succeed())
210214
})
211215
})
216+
217+
When("the instance is deleted", func() {
218+
JustBeforeEach(func() {
219+
Expect(adminClient.Delete(ctx, instance)).To(Succeed())
220+
})
221+
222+
It("is deleted", func() {
223+
Eventually(func(g Gomega) {
224+
err := adminClient.Get(ctx, client.ObjectKeyFromObject(instance), instance)
225+
g.Expect(k8serrors.IsNotFound(err)).To(BeTrue())
226+
}).Should(Succeed())
227+
})
228+
})
212229
})
213230

214231
When("the service instance is managed", func() {

controllers/webhooks/finalizer/webhook.go

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import (
77

88
korifiv1alpha1 "code.cloudfoundry.org/korifi/controllers/api/v1alpha1"
99
"code.cloudfoundry.org/korifi/tools/k8s"
10-
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
11-
"k8s.io/apimachinery/pkg/runtime"
1210
ctrl "sigs.k8s.io/controller-runtime"
1311
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
1412
)
@@ -25,7 +23,7 @@ func NewControllersFinalizerWebhook() *ControllersFinalizerWebhook {
2523
"CFPackage": {FinalizerName: korifiv1alpha1.CFPackageFinalizerName, SetPolicy: k8s.Always},
2624
"CFOrg": {FinalizerName: korifiv1alpha1.CFOrgFinalizerName, SetPolicy: k8s.Always},
2725
"CFDomain": {FinalizerName: korifiv1alpha1.CFDomainFinalizerName, SetPolicy: k8s.Always},
28-
"CFServiceInstance": {FinalizerName: korifiv1alpha1.CFManagedServiceInstanceFinalizerName, SetPolicy: isManagedServiceInstance},
26+
"CFServiceInstance": {FinalizerName: korifiv1alpha1.CFServiceInstanceFinalizerName, SetPolicy: k8s.Always},
2927
"CFServiceBinding": {FinalizerName: korifiv1alpha1.CFServiceBindingFinalizerName, SetPolicy: k8s.Always},
3028
}),
3129
}
@@ -41,16 +39,3 @@ func (r *ControllersFinalizerWebhook) SetupWebhookWithManager(mgr ctrl.Manager)
4139
func (r *ControllersFinalizerWebhook) Handle(ctx context.Context, req admission.Request) admission.Response {
4240
return r.delegate.Handle(ctx, req)
4341
}
44-
45-
func isManagedServiceInstance(object unstructured.Unstructured) bool {
46-
l := ctrl.Log.WithName("isManagedServiceInstance")
47-
cfServiceInstance := &korifiv1alpha1.CFServiceInstance{}
48-
err := runtime.DefaultUnstructuredConverter.FromUnstructured(object.Object, cfServiceInstance)
49-
if err != nil {
50-
l.Error(err, "failed to convert to CFServiceInstnace from unstructured", "unstructured", object.Object)
51-
return true
52-
}
53-
54-
l.Info("CFServiceInstance converted", "cfserviceinstance", cfServiceInstance)
55-
return cfServiceInstance.Spec.Type == korifiv1alpha1.ManagedType
56-
}

controllers/webhooks/finalizer/webhook_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ var _ = Describe("Controllers Finalizers Webhook", func() {
119119
Type: korifiv1alpha1.ManagedType,
120120
},
121121
},
122-
korifiv1alpha1.CFManagedServiceInstanceFinalizerName,
122+
korifiv1alpha1.CFServiceInstanceFinalizerName,
123123
),
124124
Entry("user-provided CF service instance",
125125
&korifiv1alpha1.CFServiceInstance{
@@ -131,6 +131,7 @@ var _ = Describe("Controllers Finalizers Webhook", func() {
131131
Type: korifiv1alpha1.UserProvidedType,
132132
},
133133
},
134+
korifiv1alpha1.CFServiceInstanceFinalizerName,
134135
),
135136
Entry("cfservicebinding",
136137
&korifiv1alpha1.CFServiceBinding{

0 commit comments

Comments
 (0)