@@ -78,7 +78,7 @@ func (r *IpRangeReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
7878 if o .Spec .PreserveInNetbox {
7979 // if there's a finalizer remove it and return
8080 // this can be the case if a CR used to have spec.preserveInNetbox set to false
81- return r .removeFinalizer (ctx , o )
81+ return ctrl. Result {}, r .removeFinalizer (ctx , o )
8282 }
8383
8484 return r .deleteFromNetboxAndRemoveFinalizer (ctx , o )
@@ -96,13 +96,9 @@ func (r *IpRangeReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
9696 // 1. try to lock lease of parent prefix if IpRange status condition is not true
9797 // and IpRange is owned by an IpRangeClaim
9898 or := o .ObjectMeta .OwnerReferences
99+ var ll * leaselocker.LeaseLocker
99100 if len (or ) > 0 /* len(nil array) = 0 */ && ! apismeta .IsStatusConditionTrue (o .Status .Conditions , "Ready" ) {
100- ll , res , err := r .tryLockOnParentPrefix (ctx , o )
101- defer func () {
102- if ll != nil {
103- ll .Unlock ()
104- }
105- }()
101+ res , err := r .tryLockOnParentPrefix (ctx , ll , o )
106102 if err != nil {
107103 return res , err
108104 }
@@ -129,6 +125,11 @@ func (r *IpRangeReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
129125 }
130126 }
131127
128+ // 3. unlock lease of parent prefix
129+ if ll != nil {
130+ ll .Unlock ()
131+ }
132+
132133 // 4. update status fields
133134 o .Status .IpRangeId = netboxIpRangeModel .ID
134135 o .Status .IpRangeUrl = config .GetBaseUrl () + "/ipam/ip-ranges/" + strconv .FormatInt (netboxIpRangeModel .ID , 10 )
@@ -185,7 +186,7 @@ func (r *IpRangeReconciler) SetConditionAndCreateEvent(ctx context.Context, o *n
185186}
186187
187188func (r * IpRangeReconciler ) generateNetboxIpRangeModelFromIpRangeSpec (ctx context.Context , o * netboxv1.IpRange , req ctrl.Request , lastIpRangeMetadata string ) (* models.IpRange , error ) {
188- debugLogger := log .FromContext (context . Background () ).V (4 )
189+ debugLogger := log .FromContext (ctx ).V (4 )
189190 // unmarshal lastIpRangeMetadata json string to map[string]string
190191 lastAppliedCustomFields := make (map [string ]string )
191192 if lastIpRangeMetadata != "" {
@@ -242,9 +243,9 @@ func (r *IpRangeReconciler) deleteFromNetboxAndRemoveFinalizer(ctx context.Conte
242243 return ctrl.Result {Requeue : true }, nil
243244 }
244245
245- res , err : = r .removeFinalizer (ctx , o )
246+ err = r .removeFinalizer (ctx , o )
246247 if err != nil {
247- return res , err
248+ return ctrl. Result {} , err
248249 }
249250
250251 err = r .Update (ctx , o )
@@ -255,30 +256,30 @@ func (r *IpRangeReconciler) deleteFromNetboxAndRemoveFinalizer(ctx context.Conte
255256 return ctrl.Result {}, nil
256257}
257258
258- func (r * IpRangeReconciler ) tryLockOnParentPrefix (ctx context.Context , o * netboxv1.IpRange ) (* leaselocker.LeaseLocker , ctrl.Result , error ) {
259+ func (r * IpRangeReconciler ) tryLockOnParentPrefix (ctx context.Context , ll * leaselocker.LeaseLocker , o * netboxv1.IpRange ) (ctrl.Result , error ) {
260+ logger := log .FromContext (ctx )
261+ debugLogger := log .FromContext (ctx ).V (4 )
262+
259263 // determine NamespacedName of IpRangeClaim owning the IpRange CR
260264 orLookupKey := types.NamespacedName {
261265 Name : o .ObjectMeta .OwnerReferences [0 ].Name ,
262266 Namespace : o .Namespace ,
263267 }
264268
265- logger := log .FromContext (ctx )
266- debugLogger := log .FromContext (ctx ).V (4 )
267-
268269 ipRangeClaim := & netboxv1.IpRangeClaim {}
269270 err := r .Client .Get (ctx , orLookupKey , ipRangeClaim )
270271 if err != nil {
271- return nil , ctrl.Result {}, err
272+ return ctrl.Result {}, err
272273 }
273274
274275 // get name of parent prefix
275276 leaseLockerNSN := types.NamespacedName {
276277 Name : convertCIDRToLeaseLockName (ipRangeClaim .Spec .ParentPrefix ),
277278 Namespace : r .OperatorNamespace ,
278279 }
279- ll , err : = leaselocker .NewLeaseLocker (r .RestConfig , leaseLockerNSN , orLookupKey .String ())
280+ ll , err = leaselocker .NewLeaseLocker (r .RestConfig , leaseLockerNSN , orLookupKey .String ())
280281 if err != nil {
281- return nil , ctrl.Result {}, err
282+ return ctrl.Result {}, err
282283 }
283284
284285 lockCtx , cancel := context .WithCancel (ctx )
@@ -290,11 +291,11 @@ func (r *IpRangeReconciler) tryLockOnParentPrefix(ctx context.Context, o *netbox
290291 logger .Info (fmt .Sprintf ("failed to lock parent prefix %s" , ipRangeClaim .Spec .ParentPrefix ))
291292 r .Recorder .Eventf (o , corev1 .EventTypeWarning , "FailedToLockParentPrefix" , "failed to lock parent prefix %s" ,
292293 ipRangeClaim .Spec .ParentPrefix )
293- return ll , ctrl.Result {}, nil
294+ return ctrl.Result {}, nil
294295 }
295296 debugLogger .Info (fmt .Sprintf ("successfully locked parent prefix %s" , ipRangeClaim .Spec .ParentPrefix ))
296297
297- return ll , ctrl.Result {}, nil
298+ return ctrl.Result {}, nil
298299}
299300
300301func (r * IpRangeReconciler ) updateLastMetadataAnnotation (ctx context.Context , annotations map [string ]string , o * netboxv1.IpRange , accessor apismeta.MetadataAccessor ) error {
@@ -320,22 +321,18 @@ func (r *IpRangeReconciler) updateLastMetadataAnnotation(ctx context.Context, an
320321 }
321322
322323 // update object to store lastIpRangeMetadata annotation
323- if err := r .Update (ctx , o ); err != nil {
324- return err
325- }
326-
327- return nil
324+ return r .Update (ctx , o )
328325}
329326
330- func (r * IpRangeReconciler ) removeFinalizer (ctx context.Context , o * netboxv1.IpRange ) (ctrl. Result , error ) {
327+ func (r * IpRangeReconciler ) removeFinalizer (ctx context.Context , o * netboxv1.IpRange ) error {
331328 debugLogger := log .FromContext (ctx ).V (4 )
332329 if controllerutil .ContainsFinalizer (o , IpRangeFinalizerName ) {
333330 debugLogger .Info ("removing the finalizer" )
334331 controllerutil .RemoveFinalizer (o , IpRangeFinalizerName )
335332 if err := r .Update (ctx , o ); err != nil {
336- return ctrl. Result {}, err
333+ return err
337334 }
338335 }
339336
340- return ctrl. Result {}, nil
337+ return nil
341338}
0 commit comments