@@ -1305,89 +1305,98 @@ 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 {
13141314 return nil
13151315 }
13161316
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" )
1317+ settingsList := & metalv1alpha1.BIOSSettingsList {}
1318+ if err := r .List (ctx , settingsList , client.MatchingFields {serverRefField : server .Name }); err != nil {
1319+ log . Error (err , "failed to list BIOSSettings by server ref" , "server" , server . Name )
13201320 return nil
13211321 }
13221322
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 {
1328- continue
1329- }
1330- if biosSettings .Spec .ServerMaintenanceRef .Name != host .Spec .ServerMaintenanceRef .Name {
1323+ reqs := make ([]ctrl.Request , 0 , len (settingsList .Items ))
1324+ for _ , settings := range settingsList .Items {
1325+ // Skip completed or failed settings
1326+ if settings .Status .State == metalv1alpha1 .BIOSSettingsStateApplied ||
1327+ settings .Status .State == metalv1alpha1 .BIOSSettingsStateFailed {
13311328 continue
13321329 }
1333- reqs = append (reqs , ctrl.Request {NamespacedName : types.NamespacedName {Name : biosSettings .Name }})
1330+
1331+ reqs = append (reqs , ctrl.Request {NamespacedName : types.NamespacedName {Name : settings .Name }})
13341332 }
13351333 return reqs
13361334}
13371335
13381336func (r * BIOSSettingsReconciler ) enqueueBiosSettingsByBMC (ctx context.Context , obj client.Object ) []ctrl.Request {
13391337 bmcObj := obj .(* metalv1alpha1.BMC )
1340- log := ctrl .LoggerFrom (ctx )
1338+ log := ctrl .LoggerFrom (ctx ). WithValues ( "BMC" , bmcObj . Name )
13411339
13421340 serverList := & metalv1alpha1.ServerList {}
13431341 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 )
1342+ log .Error (err , "failed to list Servers by BMC ref" )
13451343 return nil
13461344 }
13471345
13481346 var reqs []ctrl.Request
1347+ seen := make (map [string ]struct {}, len (serverList .Items ))
1348+
13491349 for _ , server := range serverList .Items {
13501350 if server .Spec .BIOSSettingsRef == nil {
13511351 continue
13521352 }
13531353
1354- biosSettings := & metalv1alpha1.BIOSSettings {}
1355- if err := r .Get (ctx , types.NamespacedName {Name : server .Spec .BIOSSettingsRef .Name }, biosSettings ); err != nil {
1354+ settings := & metalv1alpha1.BIOSSettings {}
1355+ if err := r .Get (ctx , types.NamespacedName {Name : server .Spec .BIOSSettingsRef .Name }, settings ); err != nil {
1356+ log .Error (err , "failed to get BIOSSettings, skipping" , "name" , server .Spec .BIOSSettingsRef .Name )
13561357 continue
13571358 }
13581359
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 }})
1360+ if settings .Status .State != metalv1alpha1 .BIOSSettingsStateInProgress {
1361+ continue
1362+ }
1363+
1364+ resetCond , err := GetCondition (r .Conditions , settings .Status .Conditions , BMCConditionReset )
1365+ if err != nil || resetCond .Status == metav1 .ConditionTrue {
1366+ continue
1367+ }
1368+ if resetCond .Reason == BMCReasonReset {
1369+ key := settings .Name
1370+ if _ , dup := seen [key ]; ! dup {
1371+ seen [key ] = struct {}{}
1372+ reqs = append (reqs , ctrl.Request {NamespacedName : types.NamespacedName {Name : key }})
13661373 }
13671374 }
13681375 }
13691376 return reqs
13701377}
13711378
13721379func (r * BIOSSettingsReconciler ) enqueueBiosSettingsByBiosVersionResource (ctx context.Context , obj client.Object ) []ctrl.Request {
1373- biosVersion := obj .(* metalv1alpha1.BIOSVersion )
1374- if biosVersion .Status .State != metalv1alpha1 .BIOSVersionStateCompleted {
1380+ version := obj .(* metalv1alpha1.BIOSVersion )
1381+ log := ctrl .LoggerFrom (ctx ).WithValues ("BIOSVersion" , version .Name )
1382+
1383+ if version .Status .State != metalv1alpha1 .BIOSVersionStateCompleted {
13751384 return nil
13761385 }
13771386
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" )
1387+ settingsList := & metalv1alpha1.BIOSSettingsList {}
1388+ if err := r .List (ctx , settingsList , client.MatchingFields {serverRefField : version .Spec .ServerRef .Name }); err != nil {
1389+ log .Error (err , "failed to list BIOSSettings by server ref" )
13811390 return nil
13821391 }
13831392
13841393 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 {
1394+ for _ , settings := range settingsList .Items {
1395+ if settings .Status .State == metalv1alpha1 .BIOSSettingsStateApplied ||
1396+ settings .Status .State == metalv1alpha1 .BIOSSettingsStateFailed {
13881397 continue
13891398 }
1390- reqs = append (reqs , ctrl.Request {NamespacedName : types.NamespacedName {Name : biosSettings .Name }})
1399+ reqs = append (reqs , ctrl.Request {NamespacedName : types.NamespacedName {Name : settings .Name }})
13911400 }
13921401 return reqs
13931402}
0 commit comments