@@ -195,6 +195,12 @@ func (r *BiosSettingsReconciler) reconcile(ctx context.Context, log logr.Logger,
195195 log .V (1 ).Info ("referred server object could not be fetched" )
196196 return ctrl.Result {}, err
197197 }
198+
199+ if err := r .setOwnerToServer (ctx , biosSettings , server ); err != nil {
200+ log .V (1 ).Error (err , "failed to set bios settings owner reference to server" , "biosSettings" , biosSettings .Name , "server" , server .Name )
201+ return ctrl.Result {}, fmt .Errorf ("failed to set owner reference to server: %w" , err )
202+ }
203+
198204 // patch server with biossettings reference
199205 if server .Spec .BIOSSettingsRef == nil {
200206 if err := r .patchBiosSettingsRefOnServer (ctx , log , server , & corev1.LocalObjectReference {Name : biosSettings .Name }); err != nil {
@@ -229,6 +235,21 @@ func (r *BiosSettingsReconciler) reconcile(ctx context.Context, log logr.Logger,
229235 return r .ensureBIOSSettingsStateTransition (ctx , log , bmcClient , biosSettings , server )
230236}
231237
238+ func (r * BiosSettingsReconciler ) setOwnerToServer (ctx context.Context , biosSettings * metalv1alpha1.BIOSSettings , server * metalv1alpha1.Server ) error {
239+ if controllerutil .HasControllerReference (biosSettings ) {
240+ return nil
241+ }
242+
243+ biosSettingsBase := biosSettings .DeepCopy ()
244+ if err := controllerutil .SetControllerReference (server , biosSettings , r .Scheme ); err != nil {
245+ return fmt .Errorf ("failed to set controller reference for biosSettings: %w" , err )
246+ }
247+ if err := r .Patch (ctx , biosSettings , client .MergeFrom (biosSettingsBase )); err != nil {
248+ return fmt .Errorf ("failed to patch server with controller reference: %w" , err )
249+ }
250+ return nil
251+ }
252+
232253func (r * BiosSettingsReconciler ) ensureBIOSSettingsStateTransition (
233254 ctx context.Context ,
234255 log logr.Logger ,
0 commit comments