Build an operator that can deploy and reconcile a working OpenStack control plane on Kubernetes.
- Declarative deployment: users describe the desired control plane in CRs; the operator converges the cluster to match.
- Repeatable wiring: consistent handling of endpoints, credentials, service discovery, and rendered config.
- Day-2 operability: Conditions/events/metrics explain what is blocked and what changed. (In progress; status reporting today is limited; see Architecture.)
- Service-first structure: OpenStack is modeled as a set of services (e.g., Keystone, Nova, Neutron) that are composed into a deployment.
- Full OpenStack lifecycle management for all upgrades by changing an image tag.
- Automatic orchestration of every cross-service upgrade sequence.
- Managing every prerequisite dependency (database, message queue, storage) inside the operator.
- Kolla and OpenStack-Helm do not expose a Kubernetes-native API schema for "what is configurable", which makes configuration discovery and navigation harder.
- Kolla primarily orchestrates containers imperatively (historically via Ansible), which does not provide a reconciled, controller-driven steady state.
- OpenStack-Helm has a high entry cost and often assumes significant OpenStack/Kubernetes expertise to operate successfully.
The operator does day-1 provisioning well, but a lot of the design intent is not yet implemented. This page collects the planned work so the rest of the documentation can describe only what exists today. Nothing here is a commitment or a schedule; it is a record of known gaps and direction.
- Cluster status.
OpenStackClusternever writesstatustoday. Planned:observedGeneration, aReadyrollup, andReconciling/Blocked/Degraded/InvalidSpecconditions that point at the specific failing child resource. - Per-service conditions. Only Keystone reports
Ready. The other six services have empty status structs; they should each surface readiness. - Events. No Kubernetes Events are emitted. Planned for transitions to blocked/degraded states and for bootstrap completion.
- Metrics. Only the default controller-runtime metrics are exposed.
- Sub-conditions. The
ExternalServiceReconcilerperforms real reachability and auth checks for all five dependency types and writes a singleReadycondition. The design calls for finer-grainedSecretResolved,EndpointReachable,Authenticated, andTLSReadysub-conditions. - Gate rollout on readiness. Service rollout is not yet gated on external-service readiness; services proceed independently and rely on retries.
- Drift reconciliation. Bootstrap steps run once (tracked by annotations) and are not re-run when inputs change. Ongoing reconciliation of rendered config against running workloads is not implemented.
- Retry on failed steps. A failed bootstrap Job blocks its step until an operator deletes it. Automatic, bounded retry with clear status is desirable.
- TLS everywhere. Public endpoints are plain HTTP; rendered service configs largely
ignore the
tlsblocks on external services. Only the external-service checks and the Glance S3 client honour TLS today. - Secret hygiene. Unresolved credentials fall back to well-known development passwords. Production deployments need enforced, unique secrets and no insecure defaults.
- Multi-AZ. Availability-zone handling currently keys off the first AZ only (naming and selector). True multi-AZ scheduling is not yet supported.
- Validation webhooks. The only schema validation is CEL on
OpenStackExternalService. Admission webhooks for shape/reference validation are a design goal.
- Upgrades. There is no upgrade support at all: no
spec.version, no upgrade state machine, no version policy. The intended direction treats an upgrade as a controlled transition (status.currentVersion→spec.version) executed as an idempotent, status-tracked sequence of phases (preflight, prepare, migrate, roll control plane, post-migrate, roll data plane, verify), supporting only a small, explicit version graph (adjacent upgrades). None of this is built.
- Published images. Glance, Nova, and Neutron require locally built images
(
localhost/{glance,nova,neutron}:latest); there is no image registry pipeline. - Install tooling. A Helm chart exists at
charts/openstack-operator/but is not published to a chart repository; there is no Kustomize overlay set or OLM bundle. - CI. There is no continuous integration configured.