From a19108325b0468ef1bef9c4b98fb4cee78bad167 Mon Sep 17 00:00:00 2001 From: Yurii Levchenko Date: Mon, 26 Oct 2026 10:39:03 +0100 Subject: [PATCH] Add Configured condition to Syslog controller Signed-off-by: Yurii Levchenko --- api/core/v1alpha1/syslog_types.go | 1 + .../crd/syslogs.networking.metal.ironcore.dev.yaml | 4 ++++ .../bases/networking.metal.ironcore.dev_syslogs.yaml | 4 ++++ internal/controller/core/syslog_controller.go | 11 ++++++----- internal/controller/core/syslog_controller_test.go | 8 +++++--- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/api/core/v1alpha1/syslog_types.go b/api/core/v1alpha1/syslog_types.go index 0a6934e15..bfd687ccb 100644 --- a/api/core/v1alpha1/syslog_types.go +++ b/api/core/v1alpha1/syslog_types.go @@ -110,6 +110,7 @@ type SyslogStatus struct { // +kubebuilder:printcolumn:name="Device",type=string,JSONPath=`.spec.deviceRef.name` // +kubebuilder:printcolumn:name="Servers",type=string,JSONPath=`.status.serversSummary`,priority=1 // +kubebuilder:printcolumn:name="Ready",type=string,JSONPath=`.status.conditions[?(@.type=="Ready")].status` +// +kubebuilder:printcolumn:name="Configured",type=string,JSONPath=`.status.conditions[?(@.type=="Configured")].status`,priority=1 // +kubebuilder:printcolumn:name="Paused",type=string,JSONPath=`.status.conditions[?(@.type=="Paused")].status`,priority=1 // +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp" diff --git a/charts/network-operator/templates/crd/syslogs.networking.metal.ironcore.dev.yaml b/charts/network-operator/templates/crd/syslogs.networking.metal.ironcore.dev.yaml index 957d8a439..bdeca4448 100644 --- a/charts/network-operator/templates/crd/syslogs.networking.metal.ironcore.dev.yaml +++ b/charts/network-operator/templates/crd/syslogs.networking.metal.ironcore.dev.yaml @@ -28,6 +28,10 @@ spec: - jsonPath: .status.conditions[?(@.type=="Ready")].status name: Ready type: string + - jsonPath: .status.conditions[?(@.type=="Configured")].status + name: Configured + priority: 1 + type: string - jsonPath: .status.conditions[?(@.type=="Paused")].status name: Paused priority: 1 diff --git a/config/crd/bases/networking.metal.ironcore.dev_syslogs.yaml b/config/crd/bases/networking.metal.ironcore.dev_syslogs.yaml index 5141d7d37..e0b5d18d4 100644 --- a/config/crd/bases/networking.metal.ironcore.dev_syslogs.yaml +++ b/config/crd/bases/networking.metal.ironcore.dev_syslogs.yaml @@ -25,6 +25,10 @@ spec: - jsonPath: .status.conditions[?(@.type=="Ready")].status name: Ready type: string + - jsonPath: .status.conditions[?(@.type=="Configured")].status + name: Configured + priority: 1 + type: string - jsonPath: .status.conditions[?(@.type=="Paused")].status name: Paused priority: 1 diff --git a/internal/controller/core/syslog_controller.go b/internal/controller/core/syslog_controller.go index c3713a00b..7a99af5aa 100644 --- a/internal/controller/core/syslog_controller.go +++ b/internal/controller/core/syslog_controller.go @@ -170,7 +170,7 @@ func (r *SyslogReconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ c return ctrl.Result{}, nil } - if conditions.InitializeConditions(obj, v1alpha1.ReadyCondition) { + if conditions.InitializeConditions(obj, v1alpha1.ReadyCondition, v1alpha1.ConfiguredCondition) { log.V(1).Info("Initializing status conditions") return ctrl.Result{}, r.Status().Update(ctx, obj) } @@ -269,6 +269,10 @@ func (r *SyslogReconciler) reconcile(ctx context.Context, s *syslogScope) (reter s.Syslog.Labels[v1alpha1.DeviceLabel] = s.Device.Name + defer func() { + conditions.RecomputeReady(s.Syslog) + }() + // Ensure the Syslog is owned by the Device. if !controllerutil.HasControllerReference(s.Syslog) { if err := controllerutil.SetOwnerReference(s.Device, s.Syslog, r.Scheme, controllerutil.WithBlockOwnerDeletion(true)); err != nil { @@ -297,10 +301,7 @@ func (r *SyslogReconciler) reconcile(ctx context.Context, s *syslogScope) (reter ProviderConfig: s.ProviderConfig, }) - cond := conditions.FromError(err) - // As this resource is configuration only, we use the Configured condition as top-level Ready condition. - cond.Type = v1alpha1.ReadyCondition - conditions.Set(s.Syslog, cond) + conditions.Set(s.Syslog, conditions.FromError(err)) return err } diff --git a/internal/controller/core/syslog_controller_test.go b/internal/controller/core/syslog_controller_test.go index 2fbc1da09..a0b130097 100644 --- a/internal/controller/core/syslog_controller_test.go +++ b/internal/controller/core/syslog_controller_test.go @@ -115,11 +115,13 @@ var _ = Describe("Syslog Controller", func() { Eventually(func(g Gomega) { resource := &v1alpha1.Syslog{} g.Expect(k8sClient.Get(ctx, key, resource)).To(Succeed()) - g.Expect(resource.Status.Conditions).To(HaveLen(2)) + g.Expect(resource.Status.Conditions).To(HaveLen(3)) g.Expect(resource.Status.Conditions[0].Type).To(Equal(v1alpha1.ReadyCondition)) g.Expect(resource.Status.Conditions[0].Status).To(Equal(metav1.ConditionTrue)) - g.Expect(resource.Status.Conditions[1].Type).To(Equal(v1alpha1.PausedCondition)) - g.Expect(resource.Status.Conditions[1].Status).To(Equal(metav1.ConditionFalse)) + g.Expect(resource.Status.Conditions[1].Type).To(Equal(v1alpha1.ConfiguredCondition)) + g.Expect(resource.Status.Conditions[1].Status).To(Equal(metav1.ConditionTrue)) + g.Expect(resource.Status.Conditions[2].Type).To(Equal(v1alpha1.PausedCondition)) + g.Expect(resource.Status.Conditions[2].Status).To(Equal(metav1.ConditionFalse)) }).Should(Succeed()) By("Ensuring the resource is created in the provider")