OpenKeel : la solution Cloud souveraine, française à portée européenne du groupe inherent Découvrir inherent

Composants · Console et outils

ok (CLI)

Le client OpenStack : commandes de python-openstackclient 10.3.1 et de ses plugins, mêmes arguments, sorties et codes retour.

Go Binaire Go statiqueopenkeel-ok

Le module

ok is the OpenStack client of OpenKeel: the commands of the Python openstack CLI (python-openstackclient 10.3.1, branch stable/2026.2) and of its plugins, in one static Go binary.

ServiceCommand groupsPython reference
Novaserver, flavor, keypair, aggregate, hypervisor... (openstack.compute.v2)python-openstackclient
Keystoneproject, user, role, token, federation... (openstack.identity.v3, .v2)python-openstackclient
Glanceimage (openstack.image.v2, .v1)python-openstackclient
Cinder, cinder-backupvolume, volume backup, block storage... (openstack.volume.v3, .v2)python-openstackclient
Neutronnetwork, subnet, port, router, security group... (openstack.network.v2)python-openstackclient
neutron-fwaas, neutron-vpnaas, BGP VPN, dynamic routing, TaaSfirewall group, vpn, bgpvpn, bgp, tap...python-openstackclient
Neutron logs, SFCnetwork log, sfcpython-neutronclient
Octavia (served by neutron-api in OpenKeel)loadbalancerpython-octaviaclient
Swift (Ceph RGW in OpenKeel)object, containerpython-openstackclient
Placementresource provider, allocation, trait...osc-placement
Ironicbaremetalpython-ironicclient
Barbicansecret, acl, capython-barbicanclient
Designatezone, recordset, ptr, tld...python-designateclient
Manilasharepython-manilaclient
Heatstack, orchestrationpython-heatclient
Masakarisegment, notificationpython-masakariclient
cross-servicequota, limits, availability zone, extension, versions, project cleanuppython-openstackclient

Compatibility contract: the command names, arguments, defaults, output formats (-f table|json|yaml|value|csv|shell, -c, --sort-column...), error messages, exit codes and HTTP requests are those of openstack, so scripts keep working. Configuration is read the same way: clouds.yaml, secure.yaml (./, ~/.config/openstack/, the platform config directory, /etc/openstack/), OS_* variables and --os-* options, with the same precedence. okadm --export-config writes a clouds.yaml that ok uses as is. The exceptions are listed in docs/CONFORMANCE.md (upstream defects that ok fixes, no interactive shell).

export OS_CLOUD=openkeel
ok server list
ok network create private --description "lab network" -f json
ok loadbalancer create --vip-subnet-id private-subnet --name lb1

Note: until the rename to okadm, ok was the name of the OpenKeel installer. ok install, ok plan and the other lifecycle commands are now okadm install, okadm plan...

Extrait de openkeel-ok/README.md (en anglais).

Comment la compatibilité est testée

ok est comparé à la CLI openstack Python : mêmes lignes de commande analysées, mêmes formats de sortie, et les deux CLI exécutées contre le même faux cloud puis sur le lab OpenKeel.

Test différentiel

Comparaison différentielle avec la CLI Python

openstack Python et ok, exécutés contre le même faux cloud, donnent le même code de sortie, les mêmes stdout et stderr et chaque requête envoyée à l'identique.

Exécution

4,142 cas sur le catalogue de commandes avec des réponses préenregistrées ; méthode, chemin, query, corps et en-têtes de microversion comparés.

Dernier résultat 4,059 comparent tout ; 83 ignorent une partie, chacun avec une note.

Source : openkeel-ok/docs/CONFORMANCE.md

Tests unitaires et golden tests

Analyse des arguments

Les lignes de commande sont analysées dans le même namespace, ou produisent la même erreur, qu'avec l'argparse de Python.

Exécution

9,500 lignes de commande synthétiques sur toutes les commandes (internal/argparse).

Dernier résultat Namespace ou erreur identique.

Source : openkeel-ok/docs/CONFORMANCE.md

Tests unitaires et golden tests

Formateurs de sortie et configuration

Les sorties table, json, yaml, csv, value et shell sont identiques à l'octet près ; la résolution de clouds.yaml et OS_* correspond à osc-lib.

Exécution

13 résultats de référence issus de cliff et PyYAML (internal/output) ; 19 scénarios de configuration (internal/app).

Dernier résultat Octet pour octet ; 1,325 commandes de 25 groupes implémentées.

Source : openkeel-ok/docs/CONFORMANCE.md

De bout en bout sur un lab

De bout en bout sur le lab OpenKeel

ok et openstack s'exécutent côte à côte sur des commandes de lecture couvrant chaque service installé, puis un cycle d'écriture avec ok.

Exécution

Lab installé par okadm install --mode lab, atteint via kubectl port-forward et des surcharges d'endpoint.

Dernier résultat 37 / 42 commandes de lecture identiques (les 5 autres : les plugins Python ignorent les surcharges d'endpoint) ; cycle d'écriture sans erreur ; server create --wait non concluant (2026-11-02).

Source : openkeel-ok/docs/CONFORMANCE.md

Écarté de la réécriture

ok reproduit les commandes, arguments et sorties de la CLI openstack et de ses plugins dans un seul binaire statique, sans shell interactif ni chargement de plugins Python.

Mécanique interne simplifiée

Shell interactif cmd2

Pourquoi c'est écarté

ok est conçu pour les scripts et les commandes ponctuelles.

Pourquoi la solution n'est pas affectée

ok sans commande affiche une erreur ; chaque commande s'exécute toujours depuis le shell avec des arguments et une sortie identiques.

Source : openkeel-ok/docs/CONFORMANCE.md

Mécanique interne simplifiée

Plugins Python installés séparément

Pourquoi c'est écarté

Les groupes de commandes de python-openstackclient et des plugins clients (Placement, Octavia, Ironic, Barbican, Designate, Manila, Heat, Masakari) sont compilés dans un seul binaire Go.

Pourquoi la solution n'est pas affectée

Aucun virtualenv ni installation de plugins ; 1 325 commandes sont présentes. module list affiche les modules Go d'ok au lieu de paquets Python.

Source : openkeel-ok/README.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

Spécifications