Skip to content

Commit b28b5b9

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

File tree

1 file changed

+50
-35
lines changed

1 file changed

+50
-35
lines changed

internal/controller/biossettings_controller.go

Lines changed: 50 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1305,89 +1305,104 @@ 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 ||
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

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

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

Comments
 (0)