Skip to content

Commit e032eb0

Browse files
committed
Improve watch setup in BIOSSettingsReconciler
1 parent 209effe commit e032eb0

File tree

1 file changed

+46
-37
lines changed

1 file changed

+46
-37
lines changed

internal/controller/biossettings_controller.go

Lines changed: 46 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1305,89 +1305,98 @@ func (r *BIOSSettingsReconciler) getFlowItemFromSettingsStatus(settings *metalv1
13051305
}
13061306

13071307
func (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

13381336
func (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

13721379
func (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

Comments
 (0)