Upstream OpenStack Ironic (Python, 2026.2) in OpenKeel: a Helm chart, not a Go rewrite. Design, decisions and evidence are in openkeel-docs/IRONIC-DESIGN.md.
Auszug aus openkeel-ironic/README.md (auf Englisch).
REST-API
131 Operationen der Original-REST-API (Routen und Body-Aktionen) und ihr Status in OpenKeel.
Ironic bleibt der Upstream-Python-Dienst in einem Helm-Chart; die Tests prüfen, dass er über das Go-Keystone, den Standard-Client und das Go-Nova auf einer Fake-Redfish-Maschine funktioniert.
End-to-End in einem Lab
Smoke Test auf Fake-Redfish-Hardware
openstack baremetal über das Go-Keystone registriert eine sushy-tools-Maschine, bringt sie auf available, stellt sie bis wait call-back bereit und nimmt die Bereitstellung zurück.
Ausführung
openkeel-ironic/test/smoke.sh aus einem Client-Pod (python-ironicclient 6.3.0) auf einem kind-Cluster.
Letztes Ergebnis Verifiziert (2026-10-31). Keine Maschine bootet: IPA und active sind nicht abgedeckt.
Quelle: openkeel-docs/IRONIC-DESIGN.md
End-to-End in einem Lab
okadm install, Lab und Produktion
Das mit okadm install --components ironic installierte Chart besteht den Smoke Test in beiden Bereitstellungsmodi.
Ausführung
okadm install im Lab-Modus (kind, 3 Knoten) und im Produktionsmodus (3 API, 2 Conductors, Galera 3), danach jeweils smoke.sh.
Letztes Ergebnis Ausgeführt am 2026-11-02; die Produktion auf kind erforderte zwei reine Testergänzungen (DNS-NetworkPolicy-Workaround, automated_clean: false).
Quelle: openkeel-docs/IRONIC-DESIGN.md
Szenario
Bare-Metal-Server über Nova
openstack server create mit einem Bare-Metal-Flavor steuert Ironic über das Go-Nova, und das Löschen gibt den Knoten frei.
Ausführung
openkeel-ironic/test/nova.sh in einem Lab mit Nova und Ironic, Neutron flat und sushy-tools.
Letztes Ergebnis Auf kind bis wait call-back verifiziert; echte Maschine, IPA, Config Drive und active nicht verifiziert.
Quelle: openkeel-nova/docs/CONFORMANCE.md
Im Rewrite ausgelassen
Ironic bleibt das Upstream-Python in einem OpenKeel-Chart, bereitgestellt ohne RabbitMQ, temporäre Swift-URLs oder die Kolla-Startskripte.
Vereinfachte interne Mechanik
RabbitMQ-RPC zwischen API und Conductor
Warum es ausgelassen wurde
Ironic benötigt RabbitMQ für nichts anderes; json-rpc auf Port 8089 des Conductors, mit DNS-Namen pro Pod aus dem StatefulSet, erfüllt dieselbe Aufgabe.
Warum die Lösung nicht beeinträchtigt ist
API und Conductor verhalten sich wie upstream; Benachrichtigungen bleiben deaktiviert. JSON-RPC ist noch nicht verschlüsselt, und eine NetworkPolicy beschränkt es auf die API.
Quelle: openkeel-docs/IRONIC-DESIGN.md
Vereinfachte interne Mechanik
Temporäre Swift-URLs für Images
Warum es ausgelassen wurde
OpenKeel hat keinen eigenen Swift-Dienst.
Warum die Lösung nicht beeinträchtigt ist
Images und Config Drives werden vom HTTP-Server des Conductors ausgeliefert (image_download_source http, configdrive_use_object_store false), sodass die Bereitstellung weiterhin funktioniert.
Quelle: openkeel-docs/IRONIC-DESIGN.md
Vereinfachte interne Mechanik
Kolla-Startskripte und sudo
Übernommen von Kubernetes
Warum es ausgelassen wurde
Die Kolla-Images sind per Digest fixiert und ihre Binaries laufen direkt, konfiguriert aus einer ConfigMap, ohne kolla_start oder sudo.
Warum die Lösung nicht beeinträchtigt ist
Gleicher Ironic-Code; API und Conductor laufen ohne Privilegien, mit schreibgeschütztem Root-Dateisystem und ohne Capabilities.
Quelle: openkeel-docs/IRONIC-DESIGN.md
Hier ist nur aufgeführt, was bewusst ausgelassen wurde; noch nicht erledigte Arbeit steht in den Known gaps der docs/CONFORMANCE.md des Moduls. Alle Module
Ironic-Interaktionen
Dienstansicht, vom Diagramm-Skill aus dem OpenKeel-Modell generiert.