Skip to content

Commit 06e7b88

Browse files
committed
Add an owner of bios settings to a server
1 parent 38e7239 commit 06e7b88

2 files changed

Lines changed: 30 additions & 1 deletion

File tree

internal/controller/biossettings_controller.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
232253
func (r *BiosSettingsReconciler) ensureBIOSSettingsStateTransition(
233254
ctx context.Context,
234255
log logr.Logger,

internal/controller/biossettings_controller_test.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
. "github.com/onsi/ginkgo/v2"
1414
. "github.com/onsi/gomega"
1515
v1 "k8s.io/api/core/v1"
16+
"k8s.io/utils/ptr"
1617

1718
apierrors "k8s.io/apimachinery/pkg/api/errors"
1819
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -105,7 +106,14 @@ var _ = Describe("BIOSSettings Controller", func() {
105106
)
106107

107108
Eventually(Object(biosSettingsV1)).Should(
108-
HaveField("Status.State", metalv1alpha1.BIOSSettingsStateApplied),
109+
HaveField("OwnerReferences", ContainElement(metav1.OwnerReference{
110+
APIVersion: "metal.ironcore.dev/v1alpha1",
111+
Kind: "Server",
112+
Name: server.Name,
113+
UID: server.UID,
114+
Controller: ptr.To(true),
115+
BlockOwnerDeletion: ptr.To(true),
116+
})),
109117
)
110118

111119
By("Creating a BIOSSetting V2")

0 commit comments

Comments
 (0)