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.
Extrait de openkeel-ironic/README.md (en anglais).
API REST
131 opérations de l'API REST d'origine (routes et actions de corps), et leur état dans OpenKeel.
Ironic reste le service Python amont dans un chart Helm ; les tests vérifient qu'il fonctionne via le Keystone Go, le client standard et le Nova Go, sur une fausse machine Redfish.
De bout en bout sur un lab
Smoke test sur faux matériel Redfish
openstack baremetal via le Keystone Go enrôle une machine sushy-tools, la mène jusqu'à available, la déploie jusqu'à wait call-back et la dé-déploie.
Exécution
openkeel-ironic/test/smoke.sh depuis un pod client (python-ironicclient 6.3.0) sur un cluster kind.
Dernier résultat Vérifié (2026-10-31). Aucune machine ne démarre : IPA et active ne sont pas couverts.
Source : openkeel-docs/IRONIC-DESIGN.md
De bout en bout sur un lab
okadm install, lab et production
Le chart installé par okadm install --components ironic réussit le smoke test dans les deux modes de déploiement.
Exécution
okadm install en mode lab (kind, 3 nœuds) et en mode production (3 API, 2 conductors, Galera 3), puis smoke.sh sur chacun.
Dernier résultat Exécuté le 2026-11-02 ; la production sur kind a nécessité deux ajouts propres aux tests (contournement NetworkPolicy pour le DNS, automated_clean: false).
Source : openkeel-docs/IRONIC-DESIGN.md
Scénario
Serveur bare metal via Nova
openstack server create avec une flavor bare metal pilote Ironic via le Nova Go, et la suppression libère le nœud.
Exécution
openkeel-ironic/test/nova.sh sur un lab avec Nova et Ironic, Neutron flat et sushy-tools.
Dernier résultat Vérifié sur kind jusqu'à wait call-back ; machine réelle, IPA, config drive et active non vérifiés.
Source : openkeel-nova/docs/CONFORMANCE.md
Écarté de la réécriture
Ironic reste le Python amont dans un chart OpenKeel, déployé sans RabbitMQ, sans URL temporaires Swift ni scripts de démarrage Kolla.
Mécanique interne simplifiée
RPC RabbitMQ entre API et conductor
Pourquoi c'est écarté
Ironic n'a besoin de RabbitMQ pour rien d'autre ; json-rpc sur le port 8089 du conductor, avec des noms DNS par Pod issus du StatefulSet, fait le même travail.
Pourquoi la solution n'est pas affectée
L'API et le conductor se comportent comme en amont ; les notifications restent désactivées. JSON-RPC n'est pas encore chiffré, et une NetworkPolicy le limite à l'API.
Source : openkeel-docs/IRONIC-DESIGN.md
Mécanique interne simplifiée
URL temporaires Swift pour les images
Pourquoi c'est écarté
OpenKeel n'a pas de service Swift propre.
Pourquoi la solution n'est pas affectée
Les images et config drives sont servis par le serveur HTTP du conductor (image_download_source http, configdrive_use_object_store false) : le déploiement fonctionne donc toujours.
Source : openkeel-docs/IRONIC-DESIGN.md
Mécanique interne simplifiée
Scripts de démarrage Kolla et sudo
Repris par Kubernetes
Pourquoi c'est écarté
Les images Kolla sont épinglées par digest et leurs binaires s'exécutent directement, configurés depuis une ConfigMap, sans kolla_start ni sudo.
Pourquoi la solution n'est pas affectée
Même code Ironic ; l'API et le conductor tournent sans privilèges, avec une racine en lecture seule et sans capacités.
Source : openkeel-docs/IRONIC-DESIGN.md
Seul ce qui a été écarté par choix de conception figure ici ; le travail pas encore fait se trouve dans les Known gaps du docs/CONFORMANCE.md du module. Tous les modules
Interactions de Ironic
Vue « service » générée par la skill diagramme depuis le modèle d'OpenKeel.