OpenKeel implementation in Go of OpenStack Barbican (key manager), generated from the reverse-specification of branch stable/2026.2 by the generate-go-from-spec skill. It replaces the Python service without its clients noticing: same routes, status codes, error bodies, microversions and policies. What is reproduced and what differs is in docs/CONFORMANCE.md; the security checklist is in docs/SECURITY.md.
Go module: github.com/openkeel/openkeel-barbican
Binaries (one image holds all four): | Binary | Replaces | Role | |---|---|---| | barbican-api | barbican-wsgi-api | REST API on port 9311, health and metrics on 9090; -migrate applies the schema | | barbican-worker | barbican-worker | processes orders (key and asymmetric generation) from RabbitMQ, oslo.messaging wire format | | barbican-keystone-listener | barbican-keystone-listener | deletes a project's resources on Keystone's identity.project.deleted notification | | barbican-manage | barbican-manage | db upgrade/clean/sync_secret_stores, simple_crypto rewrap_pkek/new_pkek/rewrap_secrets, hsm gen_mkek/check_mkek/gen_hmac/check_hmac/rewrap_pkek | barbican-retry is not ported (no retry is ever scheduled on this branch, CONFORMANCE.md).
Secret stores: simple_crypto (Fernet, master KEK file), p11_crypto (PKCS#11 HSM, cgo build only, below), vault_plugin (Vault or OpenBao KV v1/v2). The database is shareable with Python Barbican (Alembic head 8c74e2d7f1ff).
Configuration: YAML, see config/config.example.yaml
Setting up a development environment, the database and the tests: docs/GETTING-STARTED.md
Database schema, migrations and upgrades: docs/DATABASE.md
Auszug aus openkeel-barbican/README.md (auf Englisch).
REST-API
57 Operationen der Original-REST-API (Routen und Body-Aktionen) und ihr Status in OpenKeel.
Barbican wird per Replay geprüft, mit Barbicans eigenen Funktionstests, durch Senden derselben Anfragen an Python und Go und durch den Parallelbetrieb beider auf derselben Datenbank und demselben Bus.
Replay aufgezeichneter Austausche
E2E-Replay der funktionalen Austausche
Die aufgezeichneten funktionalen Austausche liefern vom Go-Dienst dieselben Antworten.
Ausführung
make e2e-strict auf der eingebetteten Engine und auf MariaDB 11.4.
Letztes Ergebnis 2 766 / 2 792 gleich, 26 bekannte Unterschiede (Zufallsschlüssel, aufgezeichnete Datumsangaben, gemeinsame Datenbank); alle bestehen im Live-Betrieb.
Quelle: openkeel-barbican/docs/CONFORMANCE.md
Client-Vertrag
Barbican-functionaltests auf Go
Barbicans Upstream-functionaltests/ bestehen gegen den Go-Dienst mit einem echten Keystone.
Ausführung
test/functional/run_functional.py --target go über den Konformitätsadapter.
Python und Go teilen sich eine MariaDB und ein RabbitMQ: gegenseitiges Lesen jedes Secret-Typs, Orders in beide Richtungen, barbicanclient, castellan und openstack secret.
Ausführung
test/functional/interop.py; test/amqp/run.sh mit oslo.messaging auf RabbitMQ 3.13 und 4.4.
Letztes Ergebnis Interop 75 / 75; AMQP 3 / 3.
Quelle: openkeel-barbican/docs/CONFORMANCE.md
Nebenläufigkeit auf Galera
Nebenläufigkeit auf MariaDB Galera
Schreibvorgänge über einen Knoten und über drei Knoten bleiben konsistent.
Ausführung
make galera-test: TestOneWriteNode, TestThreeWriteNodes.
Letztes Ergebnis Bestanden, je 3 Durchläufe.
Quelle: openkeel-barbican/docs/CONFORMANCE.md
Im Rewrite ausgelassen
Barbican behält seine vollständige API und die Stores simple_crypto, PKCS#11 und Vault und verzichtet auf den nicht genutzten Retry-Prozess, Dogtag und die oslo-Infrastruktur.
Upstream veraltet oder ungenutzt
barbican-retry-Prozess
Warum es ausgelassen wurde
Auf diesem Branch plant kein Codepfad einen Retry: Der Prozess fragt nur eine stets leere Tabelle ab.
Warum die Lösung nicht beeinträchtigt ist
Keine: Aufträge werden wie upstream von barbican-worker verarbeitet.
Quelle: openkeel-barbican/docs/CONFORMANCE.md
Upstream veraltet oder ungenutzt
Dogtag-Secret-Store und CA
Warum es ausgelassen wurde
Es erfordert einen Dogtag-Server und dessen Python-Client, und Zertifikatsaufträge sind upstream auf diesem Branch deaktiviert.
Warum die Lösung nicht beeinträchtigt ist
Secrets nutzen simple_crypto, ein HSM über PKCS#11 oder Vault. Die Zertifikatstabellen existieren, bleiben aber unberührt.
Quelle: openkeel-barbican/docs/CONFORMANCE.md
Von der Cloud-Native-Plattform übernommen
Logging in Dateien, Healthcheck-Middleware, oslo_reports
Übernommen von Kubernetes probes
Warum es ausgelassen wurde
Logs gehen auf stdout, der Zustand an Kubernetes-Probes, Diagnosedaten an pprof auf dem Admin-Listener.
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
Barbican-Interaktionen
Dienstansicht, vom Diagramm-Skill aus dem OpenKeel-Modell generiert.