Skip to content

Commit d35db2a

Browse files
committed
Improve onboarding condition messages for better diagnostics
Instead of the generic "Onboarding not started" message, the Ready condition now reports the specific reason: lifecycle management being disabled or nova-compute not having registered the hypervisor yet (missing HypervisorID/ServiceID). This helps operators quickly identify root causes like DNS or RabbitMQ connectivity issues.
1 parent d4ba93c commit d35db2a

2 files changed

Lines changed: 35 additions & 3 deletions

File tree

internal/controller/ready/controller.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,11 +184,17 @@ func ComputeReadyCondition(hv *kvmv1.Hypervisor) metav1.Condition {
184184

185185
// Priority 5: Onboarding not started, aborted, or not succeeded
186186
if onboardingCondition == nil {
187+
message := "Onboarding not started"
188+
if !hv.Spec.LifecycleEnabled {
189+
message = "Onboarding not started: lifecycle management is disabled"
190+
} else if hv.Status.HypervisorID == "" || hv.Status.ServiceID == "" {
191+
message = "Onboarding not started: waiting for nova-compute to register the hypervisor in Nova (HypervisorID/ServiceID not yet available)"
192+
}
187193
return metav1.Condition{
188194
Type: kvmv1.ConditionTypeReady,
189195
Status: metav1.ConditionFalse,
190196
Reason: kvmv1.ConditionReasonOnboarding,
191-
Message: "Onboarding not started",
197+
Message: message,
192198
}
193199
}
194200

internal/controller/ready/controller_test.go

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,13 +278,39 @@ var _ = Describe("ComputeReadyCondition", func() {
278278
})
279279

280280
Context("Priority 5: Onboarding not started/aborted/not succeeded", func() {
281-
It("should return Ready=False when no onboarding condition exists", func() {
281+
It("should mention lifecycle disabled when lifecycleEnabled is false", func() {
282+
hv.Spec.LifecycleEnabled = false
283+
284+
result := ComputeReadyCondition(hv)
285+
286+
Expect(result.Type).To(Equal(kvmv1.ConditionTypeReady))
287+
Expect(result.Status).To(Equal(metav1.ConditionFalse))
288+
Expect(result.Reason).To(Equal(kvmv1.ConditionReasonOnboarding))
289+
Expect(result.Message).To(ContainSubstring("lifecycle management is disabled"))
290+
})
291+
292+
It("should mention waiting for nova-compute when HypervisorID/ServiceID are missing", func() {
293+
hv.Spec.LifecycleEnabled = true
294+
295+
result := ComputeReadyCondition(hv)
296+
297+
Expect(result.Type).To(Equal(kvmv1.ConditionTypeReady))
298+
Expect(result.Status).To(Equal(metav1.ConditionFalse))
299+
Expect(result.Reason).To(Equal(kvmv1.ConditionReasonOnboarding))
300+
Expect(result.Message).To(ContainSubstring("waiting for nova-compute"))
301+
})
302+
303+
It("should return generic not started when lifecycle is enabled and IDs are present", func() {
304+
hv.Spec.LifecycleEnabled = true
305+
hv.Status.HypervisorID = "some-id"
306+
hv.Status.ServiceID = "some-service-id"
307+
282308
result := ComputeReadyCondition(hv)
283309

284310
Expect(result.Type).To(Equal(kvmv1.ConditionTypeReady))
285311
Expect(result.Status).To(Equal(metav1.ConditionFalse))
286312
Expect(result.Reason).To(Equal(kvmv1.ConditionReasonOnboarding))
287-
Expect(result.Message).To(ContainSubstring("not started"))
313+
Expect(result.Message).To(Equal("Onboarding not started"))
288314
})
289315

290316
It("should return Ready=False when onboarding was aborted", func() {

0 commit comments

Comments
 (0)