Skip to content

Commit 4b91620

Browse files
authored
🐛 fixing a bug related to infobloxippool getting deleted even when there are claims referencing the pool (#80)
* adding logging statement to infoblox ReleaseAddress function * fix bug related to infobloxippools getting deleted even when still claims reference that pool * bump sigs.k8s.io/cluster-api-ipam-provider-in-cluster to v1.0.2
1 parent ed48af5 commit 4b91620

File tree

13 files changed

+221
-149
lines changed

13 files changed

+221
-149
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Build the manager binary
2-
FROM golang:1.24 as builder
2+
FROM golang:1.24 AS builder
33

44
WORKDIR /workspace
55

go.mod

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ toolchain go1.24.0
77
require (
88
github.com/golang/mock v1.6.0
99
github.com/infobloxopen/infoblox-go-client/v2 v2.9.0
10-
github.com/onsi/ginkgo/v2 v2.22.2
10+
github.com/onsi/ginkgo/v2 v2.23.0
1111
github.com/onsi/gomega v1.36.2
1212
github.com/pkg/errors v0.9.1
1313
go.uber.org/mock v0.5.0
@@ -17,7 +17,7 @@ require (
1717
k8s.io/klog/v2 v2.130.1
1818
k8s.io/utils v0.0.0-20241210054802-24370beab758
1919
sigs.k8s.io/cluster-api v1.9.5
20-
sigs.k8s.io/cluster-api-ipam-provider-in-cluster v1.0.1
20+
sigs.k8s.io/cluster-api-ipam-provider-in-cluster v1.0.2
2121
sigs.k8s.io/cluster-api-provider-vsphere v1.12.0
2222
sigs.k8s.io/controller-runtime v0.19.6
2323
)
@@ -43,7 +43,7 @@ require (
4343
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
4444
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
4545
github.com/fsnotify/fsnotify v1.7.0 // indirect
46-
github.com/go-logr/logr v1.4.2 // indirect
46+
github.com/go-logr/logr v1.4.2
4747
github.com/go-logr/zapr v1.3.0 // indirect
4848
github.com/go-openapi/jsonpointer v0.21.0 // indirect
4949
github.com/go-openapi/jsonreference v0.21.0 // indirect
@@ -70,13 +70,13 @@ require (
7070
github.com/spf13/pflag v1.0.5 // indirect
7171
go.uber.org/multierr v1.11.0 // indirect
7272
go.uber.org/zap v1.27.0 // indirect
73-
golang.org/x/net v0.34.0 // indirect
73+
golang.org/x/net v0.36.0 // indirect
7474
golang.org/x/oauth2 v0.24.0 // indirect
75-
golang.org/x/sys v0.29.0 // indirect
76-
golang.org/x/term v0.28.0 // indirect
77-
golang.org/x/text v0.21.0 // indirect
75+
golang.org/x/sys v0.30.0 // indirect
76+
golang.org/x/term v0.29.0 // indirect
77+
golang.org/x/text v0.22.0 // indirect
7878
golang.org/x/time v0.7.0 // indirect
79-
golang.org/x/tools v0.28.0 // indirect
79+
golang.org/x/tools v0.30.0 // indirect
8080
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
8181
google.golang.org/protobuf v1.36.1 // indirect
8282
gopkg.in/inf.v0 v0.9.1 // indirect

go.sum

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
120120
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
121121
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
122122
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
123-
github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
124-
github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
123+
github.com/onsi/ginkgo/v2 v2.23.0 h1:FA1xjp8ieYDzlgS5ABTpdUDB7wtngggONc8a7ku2NqQ=
124+
github.com/onsi/ginkgo/v2 v2.23.0/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM=
125125
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
126126
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
127127
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
@@ -195,8 +195,8 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
195195
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
196196
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
197197
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
198-
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
199-
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
198+
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
199+
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
200200
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
201201
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
202202
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@@ -207,41 +207,41 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
207207
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
208208
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
209209
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
210-
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
211-
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
210+
golang.org/x/net v0.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA=
211+
golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I=
212212
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
213213
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
214214
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
215215
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
216216
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
217217
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
218-
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
219-
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
218+
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
219+
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
220220
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
221221
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
222222
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
223223
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
224224
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
225225
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
226226
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
227-
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
228-
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
227+
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
228+
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
229229
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
230-
golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
231-
golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
230+
golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
231+
golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
232232
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
233233
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
234-
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
235-
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
234+
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
235+
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
236236
golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
237237
golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
238238
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
239239
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
240240
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
241241
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
242242
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
243-
golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
244-
golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
243+
golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY=
244+
golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY=
245245
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
246246
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
247247
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -291,8 +291,8 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0 h1:CPT0ExVicCzcp
291291
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
292292
sigs.k8s.io/cluster-api v1.9.5 h1:68164Q201Y5ANVkhyrOZenoMbfL2SEBjVYZs/ihhSro=
293293
sigs.k8s.io/cluster-api v1.9.5/go.mod h1:DyqyZ4jRvKGKewDRn1Q4OCHaVjsdTogymbO6mrgHEDI=
294-
sigs.k8s.io/cluster-api-ipam-provider-in-cluster v1.0.1 h1:Jn8EV4EK2djN1704SAaBFoHf7BBp0PrNIMquE2OeAeI=
295-
sigs.k8s.io/cluster-api-ipam-provider-in-cluster v1.0.1/go.mod h1:n5zzjmAnq+aM0v2HobTRL1sxMNx5PYIZToF9OGfCfIY=
294+
sigs.k8s.io/cluster-api-ipam-provider-in-cluster v1.0.2 h1:wE4MYGn94nRQoL+dR7hGfGIfskZ2BFuot2RryXcq/m0=
295+
sigs.k8s.io/cluster-api-ipam-provider-in-cluster v1.0.2/go.mod h1:rRZ4dK5eo7ofN7S406mQJYmMEf7lLmDf4koFcaqpOlw=
296296
sigs.k8s.io/cluster-api-provider-vsphere v1.12.0 h1:9ze+1JSdLAGiLklsnORvj/vs2XpR9jyVmkT0Dwo1nuc=
297297
sigs.k8s.io/cluster-api-provider-vsphere v1.12.0/go.mod h1:2y9fsZQ3qjT1kL6IXiOUVcyV0n8DLBQGvyPnId9xRzk=
298298
sigs.k8s.io/controller-runtime v0.19.6 h1:fuq53qTLQ7aJTA7aNsklNnu7eQtSFqJUomOyM+phPLk=

internal/controllers/infobloxippool.go

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,19 @@ import (
2222
"net/netip"
2323

2424
"github.com/telekom/cluster-api-ipam-provider-infoblox/api/v1alpha1"
25+
"github.com/telekom/cluster-api-ipam-provider-infoblox/internal/poolutil"
2526
"github.com/telekom/cluster-api-ipam-provider-infoblox/pkg/infoblox"
27+
corev1 "k8s.io/api/core/v1"
2628
apierrors "k8s.io/apimachinery/pkg/api/errors"
2729
"k8s.io/apimachinery/pkg/runtime"
2830
kerrors "k8s.io/apimachinery/pkg/util/errors"
31+
"k8s.io/utils/ptr"
2932
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
3033
"sigs.k8s.io/cluster-api/util/conditions"
3134
"sigs.k8s.io/cluster-api/util/patch"
3235
ctrl "sigs.k8s.io/controller-runtime"
3336
"sigs.k8s.io/controller-runtime/pkg/client"
37+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
3438
"sigs.k8s.io/controller-runtime/pkg/log"
3539
)
3640

@@ -62,8 +66,9 @@ func (r *InfobloxIPPoolReconciler) SetupWithManager(mgr ctrl.Manager) error {
6266

6367
// Reconcile an InfobloxIPPool.
6468
func (r *InfobloxIPPoolReconciler) Reconcile(ctx context.Context, req ctrl.Request) (res ctrl.Result, reterr error) {
65-
_ = log.FromContext(ctx)
69+
logger := log.FromContext(ctx)
6670

71+
// get object
6772
pool := &v1alpha1.InfobloxIPPool{}
6873
if err := r.Client.Get(ctx, req.NamespacedName, pool); err != nil {
6974
if apierrors.IsNotFound(err) {
@@ -72,16 +77,47 @@ func (r *InfobloxIPPoolReconciler) Reconcile(ctx context.Context, req ctrl.Reque
7277
return ctrl.Result{}, err
7378
}
7479

80+
// setup patch helper
7581
patchHelper, err := patch.NewHelper(pool, r.Client)
7682
if err != nil {
7783
return ctrl.Result{}, err
7884
}
85+
7986
defer func() {
8087
if err := patchHelper.Patch(ctx, pool, patch.WithOwnedConditions{}); err != nil {
8188
reterr = kerrors.NewAggregate([]error{reterr, err})
8289
}
8390
}()
8491

92+
// add finalizer
93+
isMarkedForDeletion := pool.GetDeletionTimestamp() != nil
94+
if !isMarkedForDeletion && controllerutil.AddFinalizer(pool, ProtectPoolFinalizer) {
95+
return ctrl.Result{}, nil
96+
}
97+
98+
// remove finalizer if no claims point to this pool anymore
99+
if isMarkedForDeletion {
100+
poolTypeRef := corev1.TypedLocalObjectReference{
101+
APIGroup: ptr.To(pool.GetObjectKind().GroupVersionKind().Group),
102+
Kind: pool.GetObjectKind().GroupVersionKind().Kind,
103+
Name: pool.GetName(),
104+
}
105+
inUseClaims, err := poolutil.ListClaimsReferencingPool(ctx, r.Client, pool.GetNamespace(), poolTypeRef)
106+
if err != nil {
107+
return ctrl.Result{}, err
108+
}
109+
for _, claim := range inUseClaims {
110+
logger.Info("still found claim in use", "claim", claim.Name)
111+
}
112+
if len(inUseClaims) == 0 {
113+
if controllerutil.RemoveFinalizer(pool, ProtectPoolFinalizer) {
114+
return ctrl.Result{}, nil
115+
}
116+
return ctrl.Result{}, nil
117+
}
118+
return ctrl.Result{}, fmt.Errorf("pool has IPAddresses or IPAddressClaims allocated. Cannot delete Pool until all IPAddresses and IPAddressClaims have been removed")
119+
}
120+
85121
return ctrl.Result{}, r.reconcile(ctx, pool)
86122
}
87123

internal/controllers/ipaddressclaim.go

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -118,16 +118,15 @@ func (h *InfobloxClaimHandler) FetchPool(ctx context.Context) (client.Object, *c
118118
var err error
119119

120120
h.pool = &v1alpha1.InfobloxIPPool{}
121-
if err = h.Client.Get(ctx, types.NamespacedName{Namespace: h.claim.Namespace, Name: h.claim.Spec.PoolRef.Name}, h.pool); err != nil && !apierrors.IsNotFound(err) {
121+
if err = h.Client.Get(ctx, types.NamespacedName{Namespace: h.claim.Namespace, Name: h.claim.Spec.PoolRef.Name}, h.pool); err != nil {
122+
if apierrors.IsNotFound(err) {
123+
err := errors.New("pool could not be found")
124+
logger.Error(err, "the referenced pool in the claim could not be found")
125+
return nil, nil, fmt.Errorf("pool not found: %w", err)
126+
}
122127
return nil, nil, fmt.Errorf("failed to fetch pool: %w", err)
123128
}
124129

125-
if h.pool == nil {
126-
err := errors.New("pool not found")
127-
logger.Error(err, "the referenced pool could not be found")
128-
return h.pool, nil, nil
129-
}
130-
131130
// TODO: ensure pool is ready
132131
if conditions.IsFalse(h.pool, clusterv1.ReadyCondition) {
133132
conditions.MarkFalse(h.claim,
@@ -179,7 +178,7 @@ func (h *InfobloxClaimHandler) EnsureAddress(ctx context.Context, address *ipamv
179178
}
180179

181180
var ipaddr netip.Addr
182-
ipaddr, err = h.ibclient.GetOrAllocateAddress(h.pool.Spec.NetworkView, subnet, hostName, h.pool.Spec.DNSZone)
181+
ipaddr, err = h.ibclient.GetOrAllocateAddress(h.pool.Spec.NetworkView, subnet, hostName, h.pool.Spec.DNSZone, logger)
183182
if err != nil {
184183
continue
185184
}
@@ -215,8 +214,16 @@ func (h *InfobloxClaimHandler) ReleaseAddress(ctx context.Context) (*ctrl.Result
215214
logger := log.FromContext(ctx)
216215

217216
hostName, err := h.getHostname(ctx)
217+
if err != nil {
218+
return nil, err
219+
}
220+
218221
logger = logger.WithValues("hostname", hostName)
219222

223+
if len(h.pool.Spec.Subnets) == 0 || h.pool == nil {
224+
return nil, fmt.Errorf("no subnets found in pool or pool not found")
225+
}
226+
220227
var subnet netip.Prefix
221228
for _, sub := range h.pool.Spec.Subnets {
222229
subnet, err = netip.ParsePrefix(sub.CIDR)
@@ -226,24 +233,18 @@ func (h *InfobloxClaimHandler) ReleaseAddress(ctx context.Context) (*ctrl.Result
226233
continue
227234
}
228235

229-
err = h.ibclient.ReleaseAddress(h.pool.Spec.NetworkView, subnet, hostName)
236+
err = h.ibclient.ReleaseAddress(h.pool.Spec.NetworkView, subnet, hostName, logger)
230237
if err != nil {
231238
// since ibclient.NotFoundError has a pointer receiver on it's Error() method, we can't use errors.As() here.
232239
if _, ok := err.(*ibclient.NotFoundError); !ok {
233240
logger.Error(err, "failed to release address for host", "hostname", hostName)
234241
}
242+
logger.Info("did not find address for host", "hostname", hostName, "error", err)
235243
} else {
236244
logger.Info("released address for host", "hostname", hostName)
237245
}
238246
}
239247

240-
if err != nil {
241-
// since ibclient.NotFoundError has a pointer receiver on it's Error() method, we can't use errors.As() here.
242-
if _, ok := err.(*ibclient.NotFoundError); !ok {
243-
return nil, fmt.Errorf("unable to release address: %w", err)
244-
}
245-
}
246-
247248
return nil, nil
248249
}
249250

0 commit comments

Comments
 (0)