Manual init and unseal — loop script (Approach 1)
Test cases(26 of 50)
Complete the OpenBao prerequisites before running these tests. Go to prerequisites
Seal migration — Shamir to Transit auto-unseal
Seal migration — Shamir to AWS KMS auto-unseal
Requires AWS KMS, IAM permissions, and credentials. Independent of transit auto-unseal (UNSEAL-002).
Enable and Use KV v2 Secrets Engine
Enable the KV version 2 secrets engine, write and read secrets, use versioning, and perform soft delete and undelete operations. CLI steps are required for validation; an optional Verify in UI block confirms the same data in the OpenBao web UI after TC-OPENBAO-OCP-001. Follows OpenBao Part 8 — Secrets Engines KV.
Prerequisites checklist
Confirm these before running steps:
1Set up local CLI access and verify cluster
To do so, we will now use port-forwarding and use the local
bao command instead of oc execoc port-forward openbao-0 8200:8200 -n openbao &export BAO_ADDR='https://127.0.0.1:8200'export BAO_CACERT="$PWD/openbao-ca.crt"Log in to OpenBao using the root token
export BAO_TOKEN=$(jq -r '.root_token' openbao-init.json)2Verify cluster is healthy
bao status→ Cluster is healthy
3Verify enabled engines
bao secrets list# This will return by default the following engines:
Path Type Accessor Description
---- ---- -------- -----------
cubbyhole/ cubbyhole cubbyhole_0e7556ee per-token private secret storage
identity/ identity identity_f87bdbf5 identity store
sys/ system system_dd2b50d0 system endpoints used for control, policy and debugging4CLI — enable KV v2
bao secrets enable -version=2 -path=secret -description="Application secrets" kv→ Engine mounted at
secret/ with version 25CLI — write and read
bao kv put secret/myapp/config db_host=pghost.example.com db_port=5432 db_name=myappbao kv get secret/myapp/config#====== Secret Path ======
secret/data/myapp/config
====== Metadata ======
Key Value
--- -----
created_time 2026-07-14T15:52:01.907838454Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 1
====== Data ======
Key Value
--- -----
db_host pghost.example.com
db_name myapp
db_port 54326CLI — versioning
Let's write a new version of the secret. We will change the
db_hostbao kv put secret/myapp/config db_host=pghost2.example.com db_port=5432 db_name=myappbao kv get secret/myapp/config#====== Secret Path ======
secret/data/myapp/config
====== Data ======
Key Value
--- -----
db_host pghost2.example.com # < Updated value
db_name myapp
db_port 54327CLI — get specific version
bao kv get -version=1 secret/myapp/config→ Will show version 1 of the secret with db_host=pghost.example.com
8CLI — soft delete, undelete, destroy
Delete specific version (soft delete)
bao kv delete -versions=2 secret/myapp/configUndelete a version (restore deleted version)
bao kv undelete -versions=2 secret/myapp/configPermanently destroy a version
bao kv destroy -versions=1 secret/myapp/config9Verify in UI (optional) — after CLI steps above
Open the OpenBao Route from OCP-001, e.g.
https://openbao.apps.<cluster-domain>/Sign in with the root token (Method: Token)
Secrets Engines → confirm secret/ KV v2 mount is listed

Navigate secret → myapp → config
→ Secret data matches latest CLI write (
db_host=pghost2.example.com, …)Open Version History (or version selector) → confirm version 2 is current

KV v2 Metadata and Custom Metadata
KV Secret Rotation Pattern with CAS
Configure PKI Engine as Internal CA
Auto-Rotate TLS Certificates with cert-manager
Cross-Sign External CA with OpenBao PKI
Dynamic PostgreSQL Credentials
Dynamic MySQL/MariaDB Credentials
Kubernetes Auth Method
OIDC Authentication with Keycloak/DEX
Raft Cluster Operations
Raft Snapshot and Restore
Full OpenBao Backup Strategy
Disaster Recovery Restore
TLS Certificates for OpenShift Routes via PKI
Dynamic PostgreSQL Credentials for Applications
Multi-Tenant Secret Isolation
Encryption as a Service - Transit Encryption for Application Data
External Secrets Operator with OpenBao
CSI Secrets Store Driver with OpenBao
OpenBao Agent Sidecar Injector
Sealed Secrets Migration to OpenBao