@@ -1305,89 +1305,104 @@ func (r *BIOSSettingsReconciler) getFlowItemFromSettingsStatus(settings *metalv1
13051305}
13061306
13071307func (r * BIOSSettingsReconciler ) enqueueBiosSettingsByServerRefs (ctx context.Context , obj client.Object ) []ctrl.Request {
1308- host := obj .(* metalv1alpha1.Server )
1308+ server := obj .(* metalv1alpha1.Server )
1309+ log := ctrl .LoggerFrom (ctx ).WithValues ("Server" , server .Name )
13091310
1310- if host .Status .State == metalv1alpha1 .ServerStateDiscovery ||
1311- host .Status .State == metalv1alpha1 .ServerStateError ||
1312- host .Status .State == metalv1alpha1 .ServerStateInitial ||
1313- host .Spec .ServerMaintenanceRef == nil {
1311+ if server .Status .State == metalv1alpha1 .ServerStateDiscovery ||
1312+ server .Status .State == metalv1alpha1 .ServerStateError ||
1313+ server .Status .State == metalv1alpha1 .ServerStateInitial ||
1314+ server .Spec .ServerMaintenanceRef == nil {
13141315 return nil
13151316 }
13161317
1317- biosSettingsList := & metalv1alpha1.BIOSSettingsList {}
1318- if err := r .List (ctx , biosSettingsList , client.MatchingFields {serverRefField : host .Name }); err != nil {
1319- ctrl . LoggerFrom ( ctx ). Error (err , "failed to list BIOSSettings by server ref" )
1318+ settingsList := & metalv1alpha1.BIOSSettingsList {}
1319+ if err := r .List (ctx , settingsList , client.MatchingFields {serverRefField : server .Name }); err != nil {
1320+ log . Error (err , "failed to list BIOSSettings by server ref" , "server" , server . Name )
13201321 return nil
13211322 }
13221323
1323- reqs := make ([]ctrl.Request , 0 , 1 )
1324- for _ , biosSettings := range biosSettingsList .Items {
1325- if biosSettings . Spec . ServerMaintenanceRef == nil ||
1326- biosSettings .Status .State == metalv1alpha1 .BIOSSettingsStateApplied ||
1327- biosSettings .Status .State == metalv1alpha1 .BIOSSettingsStateFailed {
1324+ reqs := make ([]ctrl.Request , 0 , len ( settingsList . Items ) )
1325+ for _ , settings := range settingsList .Items {
1326+ // Skip completed or failed
1327+ if settings .Status .State == metalv1alpha1 .BIOSSettingsStateApplied ||
1328+ settings .Status .State == metalv1alpha1 .BIOSSettingsStateFailed {
13281329 continue
13291330 }
1330- if biosSettings .Spec .ServerMaintenanceRef .Name != host .Spec .ServerMaintenanceRef .Name {
1331+
1332+ if settings .Spec .ServerMaintenanceRef == nil ||
1333+ settings .Spec .ServerMaintenanceRef .Name != server .Spec .ServerMaintenanceRef .Name {
13311334 continue
13321335 }
1333- reqs = append (reqs , ctrl.Request {NamespacedName : types.NamespacedName {Name : biosSettings .Name }})
1336+
1337+ reqs = append (reqs , ctrl.Request {NamespacedName : types.NamespacedName {Name : settings .Name }})
13341338 }
13351339 return reqs
13361340}
13371341
13381342func (r * BIOSSettingsReconciler ) enqueueBiosSettingsByBMC (ctx context.Context , obj client.Object ) []ctrl.Request {
13391343 bmcObj := obj .(* metalv1alpha1.BMC )
1340- log := ctrl .LoggerFrom (ctx )
1344+ log := ctrl .LoggerFrom (ctx ). WithValues ( "BMC" , bmcObj . Name )
13411345
13421346 serverList := & metalv1alpha1.ServerList {}
13431347 if err := r .List (ctx , serverList , client.MatchingFields {bmcRefField : bmcObj .Name }); err != nil {
1344- log .V ( 1 ). Error (err , "failed to list Server by BMC ref" , "BMC" , bmcObj . Name )
1348+ log .Error (err , "failed to list Servers by BMC ref" )
13451349 return nil
13461350 }
13471351
13481352 var reqs []ctrl.Request
1353+ seen := make (map [string ]struct {}, len (serverList .Items ))
1354+
13491355 for _ , server := range serverList .Items {
13501356 if server .Spec .BIOSSettingsRef == nil {
13511357 continue
13521358 }
13531359
1354- biosSettings := & metalv1alpha1.BIOSSettings {}
1355- if err := r .Get (ctx , types.NamespacedName {Name : server .Spec .BIOSSettingsRef .Name }, biosSettings ); err != nil {
1360+ settings := & metalv1alpha1.BIOSSettings {}
1361+ if err := r .Get (ctx , types.NamespacedName {Name : server .Spec .BIOSSettingsRef .Name }, settings ); err != nil {
1362+ log .Error (err , "failed to get BIOSSettings, skipping" , "name" , server .Spec .BIOSSettingsRef .Name )
13561363 continue
13571364 }
13581365
1359- if biosSettings .Status .State == metalv1alpha1 .BIOSSettingsStateInProgress {
1360- resetBMC , err := GetCondition (r .Conditions , biosSettings .Status .Conditions , BMCConditionReset )
1361- if err != nil || resetBMC .Status == metav1 .ConditionTrue {
1362- continue
1363- }
1364- if resetBMC .Reason == BMCReasonReset {
1365- reqs = append (reqs , ctrl.Request {NamespacedName : types.NamespacedName {Name : biosSettings .Name }})
1366+ if settings .Status .State != metalv1alpha1 .BIOSSettingsStateInProgress {
1367+ continue
1368+ }
1369+
1370+ resetCond , err := GetCondition (r .Conditions , settings .Status .Conditions , BMCConditionReset )
1371+ if err != nil || resetCond .Status == metav1 .ConditionTrue {
1372+ continue
1373+ }
1374+ if resetCond .Reason == BMCReasonReset {
1375+ key := settings .Name
1376+ if _ , dup := seen [key ]; ! dup {
1377+ seen [key ] = struct {}{}
1378+ reqs = append (reqs , ctrl.Request {NamespacedName : types.NamespacedName {Name : key }})
13661379 }
13671380 }
13681381 }
13691382 return reqs
13701383}
13711384
13721385func (r * BIOSSettingsReconciler ) enqueueBiosSettingsByBiosVersionResource (ctx context.Context , obj client.Object ) []ctrl.Request {
1373- biosVersion := obj .(* metalv1alpha1.BIOSVersion )
1374- if biosVersion .Status .State != metalv1alpha1 .BIOSVersionStateCompleted {
1386+ version := obj .(* metalv1alpha1.BIOSVersion )
1387+ log := ctrl .LoggerFrom (ctx ).WithValues ("BIOSVersion" , version .Name )
1388+
1389+ if version .Status .State != metalv1alpha1 .BIOSVersionStateCompleted {
13751390 return nil
13761391 }
13771392
1378- biosSettingsList := & metalv1alpha1.BIOSSettingsList {}
1379- if err := r .List (ctx , biosSettingsList , client.MatchingFields {serverRefField : biosVersion .Spec .ServerRef .Name }); err != nil {
1380- ctrl . LoggerFrom ( ctx ) .Error (err , "failed to list BIOSSettings by server ref" )
1393+ settingsList := & metalv1alpha1.BIOSSettingsList {}
1394+ if err := r .List (ctx , settingsList , client.MatchingFields {serverRefField : version .Spec .ServerRef .Name }); err != nil {
1395+ log .Error (err , "failed to list BIOSSettings by server ref" )
13811396 return nil
13821397 }
13831398
13841399 reqs := make ([]ctrl.Request , 0 , 1 )
1385- for _ , biosSettings := range biosSettingsList .Items {
1386- if biosSettings .Status .State == metalv1alpha1 .BIOSSettingsStateApplied ||
1387- biosSettings .Status .State == metalv1alpha1 .BIOSSettingsStateFailed {
1400+ for _ , settings := range settingsList .Items {
1401+ if settings .Status .State == metalv1alpha1 .BIOSSettingsStateApplied ||
1402+ settings .Status .State == metalv1alpha1 .BIOSSettingsStateFailed {
13881403 continue
13891404 }
1390- reqs = append (reqs , ctrl.Request {NamespacedName : types.NamespacedName {Name : biosSettings .Name }})
1405+ reqs = append (reqs , ctrl.Request {NamespacedName : types.NamespacedName {Name : settings .Name }})
13911406 }
13921407 return reqs
13931408}
0 commit comments