Skip to content

Commit fb28a04

Browse files
fwieselnotandy
authored andcommitted
Offboarding: Fix setting finalizer and test if it happens in unit test
1 parent 34b1d17 commit fb28a04

File tree

2 files changed

+38
-31
lines changed

2 files changed

+38
-31
lines changed

internal/controller/decomission_controller.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import (
3737
k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
3838
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
3939
logger "sigs.k8s.io/controller-runtime/pkg/log"
40-
"sigs.k8s.io/controller-runtime/pkg/predicate"
4140

4241
kvmv1 "github.com/cobaltcore-dev/openstack-hypervisor-operator/api/v1"
4342
"github.com/cobaltcore-dev/openstack-hypervisor-operator/internal/openstack"
@@ -216,18 +215,8 @@ func (r *NodeDecommissionReconciler) SetupWithManager(mgr ctrl.Manager) error {
216215
}
217216
r.placementClient.Microversion = "1.39" // yoga, or later
218217

219-
// add predicate to only reconcile nodes with DeletionTimestamp set (i.e. being deleted)
220-
predicateFilter := predicate.NewPredicateFuncs(func(object k8sclient.Object) bool {
221-
node, ok := object.(*corev1.Node)
222-
if !ok {
223-
return false
224-
}
225-
return !node.DeletionTimestamp.IsZero() || controllerutil.ContainsFinalizer(node, decommissionFinalizerName)
226-
})
227-
228218
return ctrl.NewControllerManagedBy(mgr).
229219
Named(DecommissionControllerName).
230220
For(&corev1.Node{}).
231-
WithEventFilter(predicateFilter).
232221
Complete(r)
233222
}

internal/controller/decomission_controller_test.go

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,50 +32,68 @@ import (
3232
)
3333

3434
var _ = Describe("Decommission Controller", func() {
35-
var decomReconciler *NodeDecommissionReconciler
36-
const nodeName = "node-test"
35+
const (
36+
namespaceName = "namespace-test"
37+
)
38+
var (
39+
r *NodeDecommissionReconciler
40+
nodeName = types.NamespacedName{Name: "node-test"}
41+
reconcileReq = ctrl.Request{
42+
NamespacedName: nodeName,
43+
}
44+
)
3745

38-
BeforeEach(func(ctx context.Context) {
39-
decomReconciler = &NodeDecommissionReconciler{
46+
BeforeEach(func(ctx SpecContext) {
47+
r = &NodeDecommissionReconciler{
4048
Client: k8sClient,
4149
Scheme: k8sClient.Scheme(),
4250
}
4351

4452
By("creating the namespace for the reconciler")
45-
ns := &corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "monsoon3"}}
53+
ns := &corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: namespaceName}}
4654
Expect(client.IgnoreAlreadyExists(k8sClient.Create(ctx, ns))).To(Succeed())
4755

56+
DeferCleanup(func(ctx SpecContext) {
57+
Expect(k8sClient.Delete(ctx, ns)).To(Succeed())
58+
})
59+
4860
By("creating the core resource for the Kind Node")
49-
resource := &corev1.Node{
61+
node := &corev1.Node{
5062
ObjectMeta: metav1.ObjectMeta{
51-
Name: nodeName,
63+
Name: nodeName.Name,
5264
Labels: map[string]string{labelEvictionRequired: "true"},
5365
},
5466
}
55-
Expect(k8sClient.Create(ctx, resource)).To(Succeed())
67+
Expect(k8sClient.Create(ctx, node)).To(Succeed())
68+
DeferCleanup(func(ctx SpecContext) {
69+
Expect(client.IgnoreNotFound(k8sClient.Delete(ctx, node))).To(Succeed())
70+
})
5671

57-
By("Create the hypervisor resource")
72+
By("Create the hypervisor resource with lifecycle enabled")
5873
hypervisor := &kvmv1.Hypervisor{
5974
ObjectMeta: metav1.ObjectMeta{
60-
Name: nodeName,
75+
Name: nodeName.Name,
6176
},
6277
Spec: kvmv1.HypervisorSpec{
6378
LifecycleEnabled: true,
6479
},
6580
}
6681
Expect(k8sClient.Create(ctx, hypervisor)).To(Succeed())
82+
DeferCleanup(func(ctx SpecContext) {
83+
Expect(k8sClient.Delete(ctx, hypervisor)).To(Succeed())
84+
})
6785
})
6886

6987
AfterEach(func(ctx context.Context) {
70-
node := &corev1.Node{ObjectMeta: metav1.ObjectMeta{Name: nodeName}}
88+
node := &corev1.Node{ObjectMeta: metav1.ObjectMeta{Name: nodeName.Name}}
7189
By("Cleanup the specific node and hypervisor resource")
7290
Expect(client.IgnoreNotFound(k8sClient.Delete(ctx, node))).To(Succeed())
7391

7492
// Due to the decommissioning finalizer, we need to reconcile once more to delete the node completely
7593
req := ctrl.Request{
76-
NamespacedName: types.NamespacedName{Name: nodeName},
94+
NamespacedName: types.NamespacedName{Name: nodeName.Name},
7795
}
78-
_, err := decomReconciler.Reconcile(ctx, req)
96+
_, err := r.Reconcile(ctx, req)
7997
Expect(err).NotTo(HaveOccurred())
8098

8199
nodelist := &corev1.NodeList{}
@@ -84,14 +102,14 @@ var _ = Describe("Decommission Controller", func() {
84102
})
85103

86104
Context("When reconciling a node", func() {
87-
88-
It("should successfully reconcile the resource", func(ctx context.Context) {
89-
By("ConditionType the created resource")
90-
req := ctrl.Request{
91-
NamespacedName: types.NamespacedName{Name: nodeName},
92-
}
93-
_, err := decomReconciler.Reconcile(ctx, req)
105+
It("should set the finalizer", func(ctx context.Context) {
106+
By("reconciling the created resource")
107+
_, err := r.Reconcile(ctx, reconcileReq)
94108
Expect(err).NotTo(HaveOccurred())
109+
node := &corev1.Node{}
110+
111+
Expect(k8sClient.Get(ctx, nodeName, node)).To(Succeed())
112+
Expect(node.Finalizers).To(ContainElement(decommissionFinalizerName))
95113
})
96114
})
97115
})

0 commit comments

Comments
 (0)