@@ -177,11 +177,7 @@ func (r *BiosSettingsReconciler) cleanupReferences(
177177 return err
178178}
179179
180- func (r * BiosSettingsReconciler ) reconcile (
181- ctx context.Context ,
182- log logr.Logger ,
183- biosSettings * metalv1alpha1.BIOSSettings ,
184- ) (ctrl.Result , error ) {
180+ func (r * BiosSettingsReconciler ) reconcile (ctx context.Context , log logr.Logger , biosSettings * metalv1alpha1.BIOSSettings ) (ctrl.Result , error ) {
185181 if shouldIgnoreReconciliation (biosSettings ) {
186182 log .V (1 ).Info ("Skipped BIOS Setting reconciliation" )
187183 return ctrl.Result {}, nil
@@ -224,18 +220,25 @@ func (r *BiosSettingsReconciler) reconcile(
224220 return ctrl.Result {}, err
225221 }
226222
227- return r .ensureBIOSSettingsStateTransition (ctx , log , biosSettings , server )
223+ bmcClient , err := bmcutils .GetBMCClientForServer (ctx , r .Client , server , r .Insecure , r .BMCOptions )
224+ if err != nil {
225+ return ctrl.Result {}, fmt .Errorf ("failed to get BMC client for server: %w" , err )
226+ }
227+ defer bmcClient .Logout ()
228+
229+ return r .ensureBIOSSettingsStateTransition (ctx , log , bmcClient , biosSettings , server )
228230}
229231
230232func (r * BiosSettingsReconciler ) ensureBIOSSettingsStateTransition (
231233 ctx context.Context ,
232234 log logr.Logger ,
235+ bmcClient bmc.BMC ,
233236 biosSettings * metalv1alpha1.BIOSSettings ,
234237 server * metalv1alpha1.Server ,
235238) (ctrl.Result , error ) {
236239 switch biosSettings .Status .State {
237240 case "" , metalv1alpha1 .BIOSSettingsStatePending :
238- pendingSettings , err := r .getPendingSettingsOnBIOS (ctx , log , server )
241+ pendingSettings , err := r .getPendingSettingsOnBIOS (ctx , log , bmcClient , server )
239242 if err != nil {
240243 return ctrl.Result {}, fmt .Errorf ("failed to get pending settings on bios: %w" , err )
241244 }
@@ -247,9 +250,9 @@ func (r *BiosSettingsReconciler) ensureBIOSSettingsStateTransition(
247250 err = r .updateBiosSettingsStatus (ctx , log , biosSettings , metalv1alpha1 .BIOSSettingsStateInProgress )
248251 return ctrl.Result {}, err
249252 case metalv1alpha1 .BIOSSettingsStateInProgress :
250- return r .handleSettingInProgressState (ctx , log , biosSettings , server )
253+ return r .handleSettingInProgressState (ctx , log , bmcClient , biosSettings , server )
251254 case metalv1alpha1 .BIOSSettingsStateApplied :
252- return r .handleSettingAppliedState (ctx , log , biosSettings , server )
255+ return r .handleSettingAppliedState (ctx , log , bmcClient , biosSettings , server )
253256 case metalv1alpha1 .BIOSSettingsStateFailed :
254257 return r .handleFailedState (ctx , log , biosSettings , server )
255258 }
@@ -260,10 +263,11 @@ func (r *BiosSettingsReconciler) ensureBIOSSettingsStateTransition(
260263func (r * BiosSettingsReconciler ) handleSettingInProgressState (
261264 ctx context.Context ,
262265 log logr.Logger ,
266+ bmcClient bmc.BMC ,
263267 biosSettings * metalv1alpha1.BIOSSettings ,
264268 server * metalv1alpha1.Server ,
265269) (ctrl.Result , error ) {
266- currentBiosVersion , settingsDiff , err := r .getBIOSVersionAndSettingDifference (ctx , log , biosSettings , server )
270+ currentBiosVersion , settingsDiff , err := r .getBIOSVersionAndSettingDifference (ctx , log , bmcClient , biosSettings , server )
267271 if err != nil {
268272 return ctrl.Result {}, fmt .Errorf ("failed to get BIOS settings: %w" , err )
269273 }
@@ -280,7 +284,7 @@ func (r *BiosSettingsReconciler) handleSettingInProgressState(
280284 return ctrl.Result {}, nil
281285 }
282286
283- if req , err := r .checkAndRequestMaintenance (ctx , log , biosSettings , server , settingsDiff ); err != nil || req {
287+ if req , err := r .checkAndRequestMaintenance (ctx , log , bmcClient , biosSettings , server , settingsDiff ); err != nil || req {
284288 return ctrl.Result {}, err
285289 }
286290
@@ -290,25 +294,20 @@ func (r *BiosSettingsReconciler) handleSettingInProgressState(
290294 return ctrl.Result {}, nil
291295 }
292296
293- return r .applySettingUpdateStateTransition (ctx , log , biosSettings , server , settingsDiff )
297+ return r .applySettingUpdateStateTransition (ctx , log , bmcClient , biosSettings , server , settingsDiff )
294298}
295299
296300func (r * BiosSettingsReconciler ) checkAndRequestMaintenance (
297301 ctx context.Context ,
298302 log logr.Logger ,
303+ bmcClient bmc.BMC ,
299304 biosSettings * metalv1alpha1.BIOSSettings ,
300305 server * metalv1alpha1.Server ,
301306 settingsDiff redfish.SettingsAttributes ,
302307) (bool , error ) {
303308 // check if we need to request maintenance if we dont have it already
304309 // note: having this check will reduce the call made to BMC.
305310 if biosSettings .Spec .ServerMaintenanceRef == nil {
306- bmcClient , err := bmcutils .GetBMCClientForServer (ctx , r .Client , server , r .Insecure , r .BMCOptions )
307- if err != nil {
308- return false , err
309- }
310- defer bmcClient .Logout ()
311-
312311 resetReq , err := bmcClient .CheckBiosAttributes (settingsDiff )
313312 if resetReq {
314313 // request maintenance if needed, even if err was reported.
@@ -325,6 +324,7 @@ func (r *BiosSettingsReconciler) checkAndRequestMaintenance(
325324func (r * BiosSettingsReconciler ) applySettingUpdateStateTransition (
326325 ctx context.Context ,
327326 log logr.Logger ,
327+ bmcClient bmc.BMC ,
328328 biosSettings * metalv1alpha1.BIOSSettings ,
329329 server * metalv1alpha1.Server ,
330330 settingsDiff redfish.SettingsAttributes ,
@@ -350,14 +350,8 @@ func (r *BiosSettingsReconciler) applySettingUpdateStateTransition(
350350 log .V (1 ).Info ("Reconciled biosSettings at Pending state" )
351351 return ctrl.Result {}, err
352352 case metalv1alpha1 .BIOSSettingUpdateStateIssue :
353- bmcClient , err := bmcutils .GetBMCClientForServer (ctx , r .Client , server , r .Insecure , r .BMCOptions )
354- if err != nil {
355- return ctrl.Result {}, err
356- }
357- defer bmcClient .Logout ()
358-
359353 // check if the pending tasks not present on the bios settings
360- pendingSettings , err := r .getPendingSettingsOnBIOS (ctx , log , server )
354+ pendingSettings , err := r .getPendingSettingsOnBIOS (ctx , log , bmcClient , server )
361355 if err != nil {
362356 return ctrl.Result {}, fmt .Errorf ("failed to get pending BIOS settings: %w" , err )
363357 }
@@ -369,13 +363,13 @@ func (r *BiosSettingsReconciler) applySettingUpdateStateTransition(
369363 }
370364 }
371365
372- // get latest pending settings, and expect it to be zero different from the required settings.
373- pendingSettings , err = r .getPendingSettingsOnBIOS (ctx , log , server )
366+ // Get the latest pending settings and expect it to be zero different from the required settings.
367+ pendingSettings , err = r .getPendingSettingsOnBIOS (ctx , log , bmcClient , server )
374368 if err != nil {
375369 return ctrl.Result {}, fmt .Errorf ("failed to get pending BIOS settings: %w" , err )
376370 }
377371
378- // at this point the bios setting update needs to be already issued.
372+ // At this point the BIOS setting update needs to be already issued.
379373 if len (pendingSettings ) == 0 {
380374 // todo: fail after X amount of time
381375 log .V (1 ).Info ("bios Setting update issued to bmc not accepted. retrying...." )
@@ -430,7 +424,7 @@ func (r *BiosSettingsReconciler) applySettingUpdateStateTransition(
430424 return ctrl.Result {}, nil
431425 case metalv1alpha1 .BIOSSettingUpdateStateVerification :
432426 // make sure the setting has actually applied.
433- _ , settingsDiff , err := r .getBIOSVersionAndSettingDifference (ctx , log , biosSettings , server )
427+ _ , settingsDiff , err := r .getBIOSVersionAndSettingDifference (ctx , log , bmcClient , biosSettings , server )
434428
435429 if err != nil {
436430 return ctrl.Result {}, fmt .Errorf ("failed to get BIOS settings: %w" , err )
@@ -453,6 +447,7 @@ func (r *BiosSettingsReconciler) applySettingUpdateStateTransition(
453447func (r * BiosSettingsReconciler ) handleSettingAppliedState (
454448 ctx context.Context ,
455449 log logr.Logger ,
450+ bmcClient bmc.BMC ,
456451 biosSettings * metalv1alpha1.BIOSSettings ,
457452 server * metalv1alpha1.Server ,
458453) (ctrl.Result , error ) {
@@ -461,7 +456,7 @@ func (r *BiosSettingsReconciler) handleSettingAppliedState(
461456 return ctrl.Result {}, err
462457 }
463458
464- _ , settingsDiff , err := r .getBIOSVersionAndSettingDifference (ctx , log , biosSettings , server )
459+ _ , settingsDiff , err := r .getBIOSVersionAndSettingDifference (ctx , log , bmcClient , biosSettings , server )
465460
466461 if err != nil {
467462 log .V (1 ).Error (err , "unable to fetch and check BIOSSettings" )
@@ -507,15 +502,10 @@ func (r *BiosSettingsReconciler) checkPendingSettingsDiff(
507502func (r * BiosSettingsReconciler ) getPendingSettingsOnBIOS (
508503 ctx context.Context ,
509504 log logr.Logger ,
505+ bmcClient bmc.BMC ,
510506 server * metalv1alpha1.Server ,
511507) (pendingSettings redfish.SettingsAttributes , err error ) {
512- bmcClient , err := bmcutils .GetBMCClientForServer (ctx , r .Client , server , r .Insecure , r .BMCOptions )
513- if err != nil {
514- return pendingSettings , fmt .Errorf ("failed to create BMC client: %w" , err )
515- }
516- defer bmcClient .Logout ()
517-
518- log .V (1 ).Info ("fetching the pending settings on bios" )
508+ log .V (1 ).Info ("Fetching the pending settings on bios" )
519509
520510 pendingSettings , err = bmcClient .GetBiosPendingAttributeValues (ctx , server .Spec .SystemUUID )
521511 if err != nil {
@@ -528,15 +518,10 @@ func (r *BiosSettingsReconciler) getPendingSettingsOnBIOS(
528518func (r * BiosSettingsReconciler ) getBIOSVersionAndSettingDifference (
529519 ctx context.Context ,
530520 log logr.Logger ,
521+ bmcClient bmc.BMC ,
531522 biosSettings * metalv1alpha1.BIOSSettings ,
532523 server * metalv1alpha1.Server ,
533524) (currentbiosVersion string , diff redfish.SettingsAttributes , err error ) {
534- bmcClient , err := bmcutils .GetBMCClientForServer (ctx , r .Client , server , r .Insecure , r .BMCOptions )
535- if err != nil {
536- return "" , diff , fmt .Errorf ("failed to create BMC client: %w" , err )
537- }
538- defer bmcClient .Logout ()
539-
540525 keys := slices .Collect (maps .Keys (biosSettings .Spec .SettingsMap ))
541526
542527 currentSettings , err := bmcClient .GetBiosAttributeValues (ctx , server .Spec .SystemUUID , keys )
0 commit comments