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.
| Service | Command groups | Python reference |
|---|
| Nova | server, flavor, keypair, aggregate, hypervisor... (openstack.compute.v2) | python-openstackclient |
| Keystone | project, user, role, token, federation... (openstack.identity.v3, .v2) | python-openstackclient |
| Glance | image (openstack.image.v2, .v1) | python-openstackclient |
| Cinder, cinder-backup | volume, volume backup, block storage... (openstack.volume.v3, .v2) | python-openstackclient |
| Neutron | network, subnet, port, router, security group... (openstack.network.v2) | python-openstackclient |
| neutron-fwaas, neutron-vpnaas, BGP VPN, dynamic routing, TaaS | firewall group, vpn, bgpvpn, bgp, tap... | python-openstackclient |
| Neutron logs, SFC | network log, sfc | python-neutronclient |
| Octavia (served by neutron-api in OpenKeel) | loadbalancer | python-octaviaclient |
| Swift (Ceph RGW in OpenKeel) | object, container | python-openstackclient |
| Placement | resource provider, allocation, trait... | osc-placement |
| Ironic | baremetal | python-ironicclient |
| Barbican | secret, acl, ca | python-barbicanclient |
| Designate | zone, recordset, ptr, tld... | python-designateclient |
| Manila | share | python-manilaclient |
| Heat | stack, orchestration | python-heatclient |
| Masakari | segment, notification | python-masakariclient |
| cross-service | quota, limits, availability zone, extension, versions, project cleanup | python-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...