Skip to content

Commit 26c34c4

Browse files
stuggiclaude
andcommitted
Only init conditions for enabled services in InitConditions
Previously, InitConditions() added Unknown conditions for ALL services regardless of whether they were enabled. When the controller short- circuited before reaching a disabled service's reconciler (e.g., during minor update gating), the disabled service's Unknown condition persisted and was mirrored to the Ready condition, producing misleading status like "Octavia not started" even when Octavia was disabled. Only create conditions for services that are actually enabled. Always-on conditions (CAs, Version, Infrastructure, BackupConfig, Client, Ready) remain unconditional. The service reconcilers still handle the enabled-to-disabled transition by removing their conditions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Martin Schuppert <mschuppert@redhat.com>
1 parent cc57649 commit 26c34c4

1 file changed

Lines changed: 76 additions & 27 deletions

File tree

api/core/v1beta1/openstackcontrolplane_types.go

Lines changed: 76 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,43 +1168,92 @@ func (instance *OpenStackControlPlane) InitConditions() {
11681168
if instance.Status.Conditions == nil {
11691169
instance.Status.Conditions = condition.Conditions{}
11701170
}
1171+
1172+
// Always-on conditions (no Enabled flag)
11711173
cl := condition.CreateList(
1172-
condition.UnknownCondition(OpenStackControlPlaneRabbitMQReadyCondition, condition.InitReason, OpenStackControlPlaneRabbitMQReadyInitMessage),
1173-
condition.UnknownCondition(OpenStackControlPlaneOVNReadyCondition, condition.InitReason, OpenStackControlPlaneOVNReadyInitMessage),
1174-
condition.UnknownCondition(OpenStackControlPlaneNeutronReadyCondition, condition.InitReason, OpenStackControlPlaneNeutronReadyInitMessage),
1175-
condition.UnknownCondition(OpenStackControlPlaneMariaDBReadyCondition, condition.InitReason, OpenStackControlPlaneMariaDBReadyInitMessage),
1176-
condition.UnknownCondition(OpenStackControlPlaneMemcachedReadyCondition, condition.InitReason, OpenStackControlPlaneMemcachedReadyInitMessage),
1177-
condition.UnknownCondition(OpenStackControlPlaneKeystoneAPIReadyCondition, condition.InitReason, OpenStackControlPlaneKeystoneAPIReadyInitMessage),
1178-
condition.UnknownCondition(OpenStackControlPlanePlacementAPIReadyCondition, condition.InitReason, OpenStackControlPlanePlacementAPIReadyInitMessage),
1179-
condition.UnknownCondition(OpenStackControlPlaneGlanceReadyCondition, condition.InitReason, OpenStackControlPlaneGlanceReadyInitMessage),
1180-
condition.UnknownCondition(OpenStackControlPlaneCinderReadyCondition, condition.InitReason, OpenStackControlPlaneCinderReadyInitMessage),
1181-
condition.UnknownCondition(OpenStackControlPlaneNovaReadyCondition, condition.InitReason, OpenStackControlPlaneNovaReadyInitMessage),
1182-
condition.UnknownCondition(OpenStackControlPlaneIronicReadyCondition, condition.InitReason, OpenStackControlPlaneIronicReadyInitMessage),
1183-
condition.UnknownCondition(OpenStackControlPlaneClientReadyCondition, condition.InitReason, OpenStackControlPlaneClientReadyInitMessage),
1184-
condition.UnknownCondition(OpenStackControlPlaneManilaReadyCondition, condition.InitReason, OpenStackControlPlaneManilaReadyInitMessage),
1185-
condition.UnknownCondition(OpenStackControlPlaneHorizonReadyCondition, condition.InitReason, OpenStackControlPlaneHorizonReadyInitMessage),
1186-
condition.UnknownCondition(OpenStackControlPlaneDNSReadyCondition, condition.InitReason, OpenStackControlPlaneDNSReadyInitMessage),
1187-
condition.UnknownCondition(OpenStackControlPlaneTelemetryReadyCondition, condition.InitReason, OpenStackControlPlaneTelemetryReadyInitMessage),
1188-
condition.UnknownCondition(OpenStackControlPlaneHeatReadyCondition, condition.InitReason, OpenStackControlPlaneHeatReadyInitMessage),
1189-
condition.UnknownCondition(OpenStackControlPlaneSwiftReadyCondition, condition.InitReason, OpenStackControlPlaneSwiftReadyInitMessage),
1190-
condition.UnknownCondition(OpenStackControlPlaneOctaviaReadyCondition, condition.InitReason, OpenStackControlPlaneOctaviaReadyInitMessage),
1191-
condition.UnknownCondition(OpenStackControlPlaneDesignateReadyCondition, condition.InitReason, OpenStackControlPlaneDesignateReadyInitMessage),
1192-
condition.UnknownCondition(OpenStackControlPlaneBarbicanReadyCondition, condition.InitReason, OpenStackControlPlaneBarbicanReadyInitMessage),
1193-
condition.UnknownCondition(OpenStackControlPlaneRedisReadyCondition, condition.InitReason, OpenStackControlPlaneRedisReadyInitMessage),
11941174
condition.UnknownCondition(OpenStackControlPlaneCAReadyCondition, condition.InitReason, OpenStackControlPlaneCAReadyInitMessage),
11951175
condition.UnknownCondition(OpenStackControlPlaneOpenStackVersionInitializationReadyCondition, condition.InitReason, OpenStackControlPlaneOpenStackVersionInitializationReadyInitMessage),
1196-
condition.UnknownCondition(OpenStackControlPlaneWatcherReadyCondition, condition.InitReason, OpenStackControlPlaneWatcherReadyInitMessage),
11971176
condition.UnknownCondition(OpenStackControlPlaneInfrastructureReadyCondition, condition.InitReason, OpenStackControlPlaneInfrastructureReadyInitMessage),
11981177
condition.UnknownCondition(OpenStackControlPlaneBackupConfigReadyCondition, condition.InitReason, OpenStackControlPlaneBackupConfigReadyInitMessage),
1199-
1200-
// Also add the overall status condition as Unknown
1178+
condition.UnknownCondition(OpenStackControlPlaneClientReadyCondition, condition.InitReason, OpenStackControlPlaneClientReadyInitMessage),
12011179
condition.UnknownCondition(condition.ReadyCondition, condition.InitReason, condition.ReadyInitMessage),
12021180
)
1181+
1182+
// Only init conditions for enabled services to avoid misleading status
1183+
// when the controller doesn't reach a disabled service's reconciler
1184+
// (e.g., during minor update gating).
1185+
if instance.Spec.Rabbitmq.Enabled {
1186+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneRabbitMQReadyCondition, condition.InitReason, OpenStackControlPlaneRabbitMQReadyInitMessage))
1187+
}
1188+
if instance.Spec.Ovn.Enabled {
1189+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneOVNReadyCondition, condition.InitReason, OpenStackControlPlaneOVNReadyInitMessage))
1190+
}
1191+
if instance.Spec.Neutron.Enabled {
1192+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneNeutronReadyCondition, condition.InitReason, OpenStackControlPlaneNeutronReadyInitMessage))
1193+
}
1194+
if instance.Spec.Galera.Enabled {
1195+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneMariaDBReadyCondition, condition.InitReason, OpenStackControlPlaneMariaDBReadyInitMessage))
1196+
}
1197+
if instance.Spec.Memcached.Enabled {
1198+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneMemcachedReadyCondition, condition.InitReason, OpenStackControlPlaneMemcachedReadyInitMessage))
1199+
}
1200+
if instance.Spec.Keystone.Enabled {
1201+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneKeystoneAPIReadyCondition, condition.InitReason, OpenStackControlPlaneKeystoneAPIReadyInitMessage))
1202+
}
1203+
if instance.Spec.Placement.Enabled {
1204+
cl.Set(condition.UnknownCondition(OpenStackControlPlanePlacementAPIReadyCondition, condition.InitReason, OpenStackControlPlanePlacementAPIReadyInitMessage))
1205+
}
1206+
if instance.Spec.Glance.Enabled {
1207+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneGlanceReadyCondition, condition.InitReason, OpenStackControlPlaneGlanceReadyInitMessage))
1208+
}
1209+
if instance.Spec.Cinder.Enabled {
1210+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneCinderReadyCondition, condition.InitReason, OpenStackControlPlaneCinderReadyInitMessage))
1211+
}
1212+
if instance.Spec.Nova.Enabled {
1213+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneNovaReadyCondition, condition.InitReason, OpenStackControlPlaneNovaReadyInitMessage))
1214+
}
1215+
if instance.Spec.Ironic.Enabled {
1216+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneIronicReadyCondition, condition.InitReason, OpenStackControlPlaneIronicReadyInitMessage))
1217+
}
1218+
if instance.Spec.Manila.Enabled {
1219+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneManilaReadyCondition, condition.InitReason, OpenStackControlPlaneManilaReadyInitMessage))
1220+
}
1221+
if instance.Spec.Horizon.Enabled {
1222+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneHorizonReadyCondition, condition.InitReason, OpenStackControlPlaneHorizonReadyInitMessage))
1223+
}
1224+
if instance.Spec.DNS.Enabled {
1225+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneDNSReadyCondition, condition.InitReason, OpenStackControlPlaneDNSReadyInitMessage))
1226+
}
1227+
if instance.Spec.Telemetry.Enabled {
1228+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneTelemetryReadyCondition, condition.InitReason, OpenStackControlPlaneTelemetryReadyInitMessage))
1229+
}
1230+
if instance.Spec.Heat.Enabled {
1231+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneHeatReadyCondition, condition.InitReason, OpenStackControlPlaneHeatReadyInitMessage))
1232+
}
1233+
if instance.Spec.Swift.Enabled {
1234+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneSwiftReadyCondition, condition.InitReason, OpenStackControlPlaneSwiftReadyInitMessage))
1235+
}
1236+
if instance.Spec.Octavia.Enabled {
1237+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneOctaviaReadyCondition, condition.InitReason, OpenStackControlPlaneOctaviaReadyInitMessage))
1238+
}
1239+
if instance.Spec.Designate.Enabled {
1240+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneDesignateReadyCondition, condition.InitReason, OpenStackControlPlaneDesignateReadyInitMessage))
1241+
}
1242+
if instance.Spec.Barbican.Enabled {
1243+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneBarbicanReadyCondition, condition.InitReason, OpenStackControlPlaneBarbicanReadyInitMessage))
1244+
}
1245+
if instance.Spec.Redis.Enabled {
1246+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneRedisReadyCondition, condition.InitReason, OpenStackControlPlaneRedisReadyInitMessage))
1247+
}
1248+
if instance.Spec.Watcher.Enabled {
1249+
cl.Set(condition.UnknownCondition(OpenStackControlPlaneWatcherReadyCondition, condition.InitReason, OpenStackControlPlaneWatcherReadyInitMessage))
1250+
}
1251+
12031252
// Init Topology condition if there's a reference
12041253
if instance.Spec.TopologyRef != nil {
1205-
c := condition.UnknownCondition(condition.TopologyReadyCondition, condition.InitReason, condition.TopologyReadyInitMessage)
1206-
cl.Set(c)
1254+
cl.Set(condition.UnknownCondition(condition.TopologyReadyCondition, condition.InitReason, condition.TopologyReadyInitMessage))
12071255
}
1256+
12081257
// initialize conditions used later as Status=Unknown
12091258
instance.Status.Conditions.Init(&cl)
12101259
}

0 commit comments

Comments
 (0)