Skip to content

Commit 754d1ef

Browse files
committed
Add ip address claims deletion test
1 parent 492f895 commit 754d1ef

File tree

3 files changed

+49
-12
lines changed

3 files changed

+49
-12
lines changed

internal/controller/ironcoremetalmachine_controller.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,14 +187,17 @@ func (r *IroncoreMetalMachineReconciler) reconcileDelete(ctx context.Context, ma
187187

188188
ipList := &capiv1beta1.IPAddressClaimList{}
189189
if err := r.Client.List(ctx, ipList, client.InNamespace(machineScope.IroncoreMetalMachine.Namespace)); meta.IsNoMatchError(err) {
190-
machineScope.Logger.Info(fmt.Sprintf("Kind %s not found, assuming IP objects for that kind is absent", ipList.GetObjectKind().GroupVersionKind().Kind))
190+
machineScope.Logger.Info("Kind not found, assuming IP objects for that kind is absent", "kind", ipList.GetObjectKind().GroupVersionKind().Kind)
191191
ipList = &capiv1beta1.IPAddressClaimList{}
192192
} else if err != nil {
193193
return ctrl.Result{}, fmt.Errorf("error listing ip resources: %s", err.Error())
194194
}
195195
for _, ip := range ipList.Items {
196196
if strings.HasPrefix(ip.Name, machineScope.IroncoreMetalMachine.Name) {
197-
if err := r.Client.Delete(ctx, &ip); !meta.IsNoMatchError(client.IgnoreNotFound(err)) {
197+
if err := r.Client.Delete(ctx, &ip); meta.IsNoMatchError(err) {
198+
machineScope.Logger.Info("Kind not found, assuming IP objects for that kind is absent", "kind", ipList.GetObjectKind().GroupVersionKind().Kind, "object", ip.Name)
199+
} else if client.IgnoreNotFound(err) != nil {
200+
// Unknown leads to short retry in machine controller
198201
return ctrl.Result{}, fmt.Errorf("error deleting ip resource: %s", err.Error())
199202
}
200203
}

internal/controller/ironcoremetalmachine_controller_test.go

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ import (
99

1010
. "github.com/onsi/ginkgo/v2"
1111
. "github.com/onsi/gomega"
12+
. "sigs.k8s.io/controller-runtime/pkg/envtest/komega"
1213

1314
corev1 "k8s.io/api/core/v1"
1415
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
16+
apierrors "k8s.io/apimachinery/pkg/api/errors"
1517
"k8s.io/apimachinery/pkg/types"
1618
"sigs.k8s.io/controller-runtime/pkg/client"
1719
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
@@ -27,7 +29,7 @@ import (
2729
)
2830

2931
var _ = Describe("IroncoreMetalMachine Controller", func() {
30-
When("all resources are present to create an ignition", func() {
32+
When("all resources are present to reconcile", func() {
3133
const namespace = "default"
3234

3335
var (
@@ -147,17 +149,18 @@ var _ = Describe("IroncoreMetalMachine Controller", func() {
147149
Expect(k8sClient.Delete(ctx, metalCluster)).To(Succeed())
148150
Expect(k8sClient.Delete(ctx, cluster)).To(Succeed())
149151
Expect(k8sClient.Delete(ctx, machine)).To(Succeed())
150-
Expect(get(metalMachine)).To(Succeed())
151-
Expect(clientutils.PatchRemoveFinalizer(ctx, k8sClient, metalMachine, IroncoreMetalMachineFinalizer)).To(Succeed())
152-
Expect(k8sClient.Delete(ctx, metalMachine)).To(Succeed())
152+
if err := get(metalMachine); err == nil {
153+
Expect(clientutils.PatchRemoveFinalizer(ctx, k8sClient, metalMachine, IroncoreMetalMachineFinalizer)).To(Succeed())
154+
Expect(k8sClient.Delete(ctx, metalMachine)).To(Succeed())
153155

154-
serverClaim := &metalv1alpha1.ServerClaim{}
155-
Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(metalMachine), serverClaim)).To(Succeed())
156-
Expect(k8sClient.Delete(ctx, serverClaim)).To(Succeed())
156+
serverClaim := &metalv1alpha1.ServerClaim{}
157+
Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(metalMachine), serverClaim)).To(Succeed())
158+
Expect(k8sClient.Delete(ctx, serverClaim)).To(Succeed())
157159

158-
metalSecret := &corev1.Secret{}
159-
Expect(k8sClient.Get(ctx, metalSecretNN, metalSecret)).To(Succeed())
160-
Expect(k8sClient.Delete(ctx, metalSecret)).To(Succeed())
160+
metalSecret := &corev1.Secret{}
161+
Expect(k8sClient.Get(ctx, metalSecretNN, metalSecret)).To(Succeed())
162+
Expect(k8sClient.Delete(ctx, metalSecret)).To(Succeed())
163+
}
161164
})
162165

163166
It("should create the ignition secret", func() {
@@ -264,5 +267,33 @@ var _ = Describe("IroncoreMetalMachine Controller", func() {
264267
})
265268
})
266269
})
270+
271+
When("deletion timestamp is set", func() {
272+
It("should delete the ip address claims", func() {
273+
Expect(k8sClient.Delete(ctx, metalMachine)).To(Succeed())
274+
ipAddressClaim1 := &capiv1beta1.IPAddressClaim{
275+
ObjectMeta: metav1.ObjectMeta{
276+
Name: fmt.Sprintf("%s-1", metalMachine.Name),
277+
Namespace: namespace,
278+
},
279+
}
280+
Expect(k8sClient.Create(ctx, ipAddressClaim1)).To(Succeed())
281+
ipAddressClaim2 := &capiv1beta1.IPAddressClaim{
282+
ObjectMeta: metav1.ObjectMeta{
283+
Name: fmt.Sprintf("%s-2", metalMachine.Name),
284+
Namespace: namespace,
285+
},
286+
}
287+
Expect(k8sClient.Create(ctx, ipAddressClaim2)).To(Succeed())
288+
289+
_, err := controllerReconciler.Reconcile(ctx, reconcile.Request{
290+
NamespacedName: client.ObjectKeyFromObject(metalMachine),
291+
})
292+
Expect(err).NotTo(HaveOccurred())
293+
294+
Eventually(Get(ipAddressClaim1)).Should(Satisfy(apierrors.IsNotFound))
295+
Eventually(Get(ipAddressClaim2)).Should(Satisfy(apierrors.IsNotFound))
296+
})
297+
})
267298
})
268299
})

internal/controller/suite_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
. "github.com/onsi/ginkgo/v2"
1414
. "github.com/onsi/gomega"
15+
. "sigs.k8s.io/controller-runtime/pkg/envtest/komega"
1516

1617
infrav1alpha1 "github.com/ironcore-dev/cluster-api-provider-ironcore-metal/api/v1alpha1"
1718
"github.com/ironcore-dev/controller-utils/modutils"
@@ -90,6 +91,8 @@ var _ = BeforeSuite(func() {
9091
Expect(err).NotTo(HaveOccurred())
9192
Expect(k8sClient).NotTo(BeNil())
9293

94+
// set komega client
95+
SetClient(k8sClient)
9396
})
9497

9598
var _ = AfterSuite(func() {

0 commit comments

Comments
 (0)