Skip to content

[apps] Add OpenBAO as a managed secrets management service#2059

Merged
kvaps merged 4 commits intomainfrom
feat/openbao-application
Feb 27, 2026
Merged

[apps] Add OpenBAO as a managed secrets management service#2059
kvaps merged 4 commits intomainfrom
feat/openbao-application

Conversation

@lexfrei
Copy link
Contributor

@lexfrei lexfrei commented Feb 16, 2026

What this PR does

Adds OpenBAO (open-source Vault fork) as a new managed PaaS application in Cozystack.

Structure follows existing app patterns (qdrant, nats):

  • System chart with vendored upstream openbao/openbao (chart v0.25.3, appVersion v2.5.0)
  • App chart with standalone/HA mode switching based on replicas count
  • TLS via cert-manager self-signed certificates per instance
  • ApplicationDefinition, PackageSource, PaaS bundle entry
  • E2E test with init/unseal workflow

Key design decisions:

  • replicas: 1 → standalone mode with file storage; replicas > 1 → HA with Raft integrated storage and retry_join with TLS peer verification
  • TLS enabled by default — each instance gets a self-signed Certificate with DNS SANs covering services and pod addresses
  • disable_mlock = true in HCL config since default security context drops IPC_LOCK capability
  • Injector and CSI provider disabled (cluster-scoped components, not safe per-tenant)
  • No auto-init/unseal — OpenBAO requires manual initialization by design
  • E2E test performs full lifecycle: deploy, wait for certificate + API, init, unseal, verify readiness, cleanup

Release note

[apps] Add OpenBAO as a managed secrets management service with standalone and HA Raft modes, TLS enabled by default

Summary by CodeRabbit

Release Notes

  • New Features
    • Added OpenBAO managed secrets management service with high-availability and standalone deployment options
    • Integrated monitoring and dashboards for operational visibility
    • Enabled configurable external access and web UI
    • Added automated snapshot backup capability

@lexfrei lexfrei marked this pull request as ready for review February 16, 2026 16:52
@dosubot dosubot bot added size:XXL This PR changes 1000+ lines, ignoring generated files. enhancement New feature or request labels Feb 16, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 16, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a managed OpenBAO application and upstream OpenBAO packaging: new apps Helm chart, extensive upstream system Helm chart (CSI, injector, StatefulSet, services, monitoring, RBAC, PSP), ApplicationDefinition/packaging entries, and an end-to-end bats test for install/init/unseal lifecycle.

Changes

Cohort / File(s) Summary
E2E Test
hack/e2e-apps/openbao.bats
New bats script performing full OpenBAO lifecycle: apply CR, wait for certs/HelmRelease/pods/PVCs, poll API, init/unseal, extract key, and cleanup.
Managed App Helm Chart
packages/apps/openbao/Chart.yaml, packages/apps/openbao/.helmignore, packages/apps/openbao/Makefile, packages/apps/openbao/README.md, packages/apps/openbao/values.yaml, packages/apps/openbao/values.schema.json, packages/apps/openbao/templates/_resources.tpl, packages/apps/openbao/templates/dashboard-resourcemap.yaml, packages/apps/openbao/templates/openbao.yaml, packages/apps/openbao/templates/workloadmonitor.yaml, packages/apps/openbao/charts/cozy-lib
New managed-app chart and assets: chart metadata, packaging rules, schema, README, resource presets template, HelmRelease template, dashboard RBAC, and WorkloadMonitor.
ApplicationDefinition / RD package
packages/system/openbao-rd/Chart.yaml, packages/system/openbao-rd/Makefile, packages/system/openbao-rd/cozyrds/openbao.yaml, packages/system/openbao-rd/templates/cozyrd.yaml, packages/system/openbao-rd/values.yaml
New RD package with ApplicationDefinition-style CR (openbao), packaging Makefile, and template loader to emit cozyrds files.
Upstream OpenBAO packaging (system)
packages/system/openbao/Chart.yaml, packages/system/openbao/Makefile, packages/system/openbao/values.yaml
Packaging metadata and update target for upstream OpenBAO chart (repo, chart vars, update target).
Upstream OpenBAO Chart core
packages/system/openbao/charts/openbao/Chart.yaml, .../.helmignore, .../README.md, .../values.yaml, .../values.schema.json, .../grafana/dashboards/dashboard.json
Adds upstream chart metadata, comprehensive values and schema, packaging ignore rules, documentation, and a large Grafana dashboard.
Helm Templates & Helpers (system chart)
packages/system/openbao/charts/openbao/templates/_helpers.tpl, .../templates/server-statefulset.yaml, .../templates/server-service*.yaml, .../templates/server-*.yaml, .../templates/csi-*.yaml, .../templates/injector-*.yaml, .../templates/snapshotagent-*.yaml, .../templates/prometheus-*.yaml, .../templates/extra-objects.yaml, .../templates/tests/*
Extensive new Helm template helpers and many conditional templates: StatefulSet, services (headless/active/standby/UI), HA/standalone modes, CSI (DaemonSet+RBAC/SA), injector (Deployment, webhook, RBAC, PSP), snapshot agent (CronJob/config), monitoring (ServiceMonitor/PrometheusRule/Grafana ConfigMaps), test hooks, and extraObjects rendering.
Platform integration & bundle
packages/core/platform/sources/openbao-application.yaml, packages/core/platform/templates/bundles/paas.yaml
Adds PackageSource for openbao-application and includes it into PAAS bundle variants.
Packaging placeholders & helmignore
packages/apps/openbao/.helmignore, packages/system/openbao/charts/openbao/.helmignore, packages/system/openbao/values.yaml, packages/system/openbao-rd/values.yaml
Helm ignore files and minimal values placeholders to support packaging and build.
Certificate template
packages/apps/openbao/templates/certificate.yaml
Adds cert-manager Issuer and Certificate resources used by the managed app.

Sequence Diagram(s)

sequenceDiagram
    participant User as User
    participant Test as E2E Test (bats)
    participant Kubectl as kubectl
    participant K8s as Kubernetes API
    participant OpenBAO as OpenBAO Server
    participant Poll as Status Poller

    User->>Test: run openbao.e2e
    Test->>Kubectl: apply OpenBAO CR (tenant-test)
    Kubectl->>K8s: create resources (HelmRelease, StatefulSet, Services, PVCs)
    Poll->>K8s: poll HelmRelease / resource readiness
    K8s-->>Poll: readiness updates
    Poll->>Kubectl: wait for pods & PVC bound
    Kubectl->>OpenBAO: poll /health until responsive
    OpenBAO-->>Kubectl: health OK
    Kubectl->>OpenBAO: init (key-shares=1)
    OpenBAO-->>Kubectl: returns unseal key
    Kubectl->>OpenBAO: unseal using extracted key
    OpenBAO-->>Kubectl: unsealed state
    Kubectl->>K8s: delete OpenBAO CR (cleanup)
Loading
sequenceDiagram
    participant Helm as Helm renderer
    participant HelmRelease as Flux HelmRelease
    participant K8s as Kubernetes API
    participant Storage as PVC/Storage
    participant OpenBAO as OpenBAO Pods

    Helm->>HelmRelease: render chart (values: mode, replicas, storage, CSI, injector)
    HelmRelease->>K8s: create StatefulSet, Services, ConfigMaps, RBAC, CSI/DaemonSet (conditional)
    K8s->>Storage: create PVCs
    K8s->>OpenBAO: schedule pods (mount volumes, env)
    OpenBAO->>Storage: mount volumes
    HelmRelease->>K8s: create monitoring (ServiceMonitor, ConfigMap dashboards)
    K8s-->>HelmRelease: report ready
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Poem

🐰 I hopped through charts with templates neat,

I chased the pods until they beat;
I found the key, I gave a squeal,
OpenBAO woke — carrots for the reveal. 🥕🔐

🚥 Pre-merge checks | ✅ 3 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Merge Conflict Detection ⚠️ Warning ❌ Merge conflicts detected (26 files):

⚔️ Makefile (content)
⚔️ packages/core/installer/Makefile (content)
⚔️ packages/core/installer/templates/cozystack-operator.yaml (content)
⚔️ packages/core/installer/templates/packagesource.yaml (content)
⚔️ packages/core/installer/values.yaml (content)
⚔️ packages/core/platform/sources/kilo.yaml (content)
⚔️ packages/core/platform/templates/bundles/paas.yaml (content)
⚔️ packages/core/platform/values.yaml (content)
⚔️ packages/core/testing/values.yaml (content)
⚔️ packages/extra/bootbox/images/matchbox.tag (content)
⚔️ packages/extra/seaweedfs/images/objectstorage-sidecar.tag (content)
⚔️ packages/system/backup-controller/values.yaml (content)
⚔️ packages/system/backupstrategy-controller/values.yaml (content)
⚔️ packages/system/cozystack-api/values.yaml (content)
⚔️ packages/system/cozystack-controller/values.yaml (content)
⚔️ packages/system/dashboard/templates/configmap.yaml (content)
⚔️ packages/system/dashboard/values.yaml (content)
⚔️ packages/system/grafana-operator/images/grafana-dashboards.tag (content)
⚔️ packages/system/kamaji/values.yaml (content)
⚔️ packages/system/kilo/templates/kilo.yaml (content)
⚔️ packages/system/kilo/values.yaml (content)
⚔️ packages/system/kubeovn-plunger/values.yaml (content)
⚔️ packages/system/kubeovn-webhook/values.yaml (content)
⚔️ packages/system/lineage-controller-webhook/values.yaml (content)
⚔️ packages/system/objectstorage-controller/values.yaml (content)
⚔️ packages/system/seaweedfs/values.yaml (content)

These conflicts must be resolved before merging into main.
Resolve conflicts locally and push changes to this branch.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding OpenBAO as a managed secrets management service to the apps layer.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/openbao-application

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @lexfrei, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces OpenBAO as a new managed secrets management service in Cozystack. It provides robust secrets management capabilities with flexible deployment options, including standalone and HA Raft modes. The integration follows established Cozystack application patterns, ensuring consistent management and includes comprehensive end-to-end testing for reliability.

Highlights

  • OpenBAO Integration: Added OpenBAO, an open-source Vault fork, as a new managed PaaS application within Cozystack.
  • Deployment Modes: Implemented support for both standalone mode with file storage and highly available (HA) mode using Raft integrated storage and retry_join for peer discovery, configurable via replica count.
  • Helm Chart Structure: Structured the integration with a system chart that vendors the upstream openbao/openbao Helm chart (v0.25.3, appVersion v2.5.0) and an application chart that manages mode switching logic.
  • Cozystack Platform Integration: Included necessary ApplicationDefinition, PackageSource, and PaaS bundle entries to seamlessly integrate OpenBAO into the Cozystack platform.
  • End-to-End Testing: Developed a comprehensive end-to-end test that covers the full lifecycle of OpenBAO, including deployment, API readiness checks, manual initialization, unsealing, and verification of operational status.
  • Security Defaults: Disabled the injector and CSI provider by default, as these are cluster-scoped components and are not considered safe for per-tenant deployments; manual initialization and unsealing are required for security-critical operations.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • hack/e2e-apps/openbao.bats
    • Added a new end-to-end test for OpenBAO deployment, initialization, unsealing, and cleanup.
  • packages/apps/openbao/.helmignore
    • Added a new Helm ignore file for the OpenBAO application chart.
  • packages/apps/openbao/Chart.yaml
    • Added the Helm chart definition for the OpenBAO application.
  • packages/apps/openbao/Makefile
    • Added a Makefile for generating Cozyvalues and updating CRDs for the OpenBAO application.
  • packages/apps/openbao/README.md
    • Added a README file detailing the managed OpenBAO service and its parameters.
  • packages/apps/openbao/charts/cozy-lib
    • Added a symlink to the cozy-lib library for the OpenBAO application chart.
  • packages/apps/openbao/logos/openbao.svg
    • Added the OpenBAO SVG logo.
  • packages/apps/openbao/templates/_resources.tpl
    • Added a template for defining resource presets for OpenBAO replicas.
  • packages/apps/openbao/templates/dashboard-resourcemap.yaml
    • Added RBAC roles and role bindings for dashboard resource access for OpenBAO.
  • packages/apps/openbao/templates/openbao.yaml
    • Added the HelmRelease definition for the OpenBAO system, configuring standalone/HA modes and resource settings.
  • packages/apps/openbao/templates/workloadmonitor.yaml
    • Added a WorkloadMonitor definition for OpenBAO.
  • packages/apps/openbao/values.schema.json
    • Added the JSON schema for OpenBAO application chart values.
  • packages/apps/openbao/values.yaml
    • Added default values for the OpenBAO application chart.
  • packages/core/platform/sources/openbao-application.yaml
    • Added a PackageSource definition for the OpenBAO application.
  • packages/core/platform/templates/bundles/paas.yaml
    • Included the OpenBAO application in the PaaS bundle.
  • packages/system/openbao-rd/Chart.yaml
    • Added the Helm chart definition for OpenBAO ApplicationDefinition.
  • packages/system/openbao-rd/Makefile
    • Added a Makefile for the OpenBAO ApplicationDefinition package.
  • packages/system/openbao-rd/cozyrds/openbao.yaml
    • Added the ApplicationDefinition for OpenBAO, including its OpenAPI schema and dashboard configuration.
  • packages/system/openbao-rd/templates/cozyrd.yaml
    • Added a template to include CozyRDS definitions for OpenBAO.
  • packages/system/openbao-rd/values.yaml
    • Added an empty values file for the OpenBAO ApplicationDefinition.
  • packages/system/openbao/Chart.yaml
    • Added the Helm chart definition for the vendored OpenBAO system chart.
  • packages/system/openbao/Makefile
    • Added a Makefile for updating the vendored OpenBAO Helm chart.
  • packages/system/openbao/charts/openbao/.helmignore
    • Added the Helm ignore file for the upstream OpenBAO chart.
  • packages/system/openbao/charts/openbao/Chart.yaml
    • Added the upstream OpenBAO Helm chart's Chart.yaml.
  • packages/system/openbao/charts/openbao/README.md
    • Added the upstream OpenBAO Helm chart's README.
  • packages/system/openbao/charts/openbao/grafana/dashboards/dashboard.json
    • Added the Grafana dashboard JSON for OpenBAO metrics.
  • packages/system/openbao/charts/openbao/templates/NOTES.txt
    • Added Helm chart notes for OpenBAO.
  • packages/system/openbao/charts/openbao/templates/_helpers.tpl
    • Added Helm helper templates for the OpenBAO chart.
  • packages/system/openbao/charts/openbao/templates/csi-agent-configmap.yaml
    • Added a ConfigMap for the CSI agent configuration.
  • packages/system/openbao/charts/openbao/templates/csi-clusterrole.yaml
    • Added a ClusterRole for the CSI provider.
  • packages/system/openbao/charts/openbao/templates/csi-clusterrolebinding.yaml
    • Added a ClusterRoleBinding for the CSI provider.
  • packages/system/openbao/charts/openbao/templates/csi-daemonset.yaml
    • Added a DaemonSet for the CSI provider.
  • packages/system/openbao/charts/openbao/templates/csi-role.yaml
    • Added a Role for the CSI provider.
  • packages/system/openbao/charts/openbao/templates/csi-rolebinding.yaml
    • Added a RoleBinding for the CSI provider.
  • packages/system/openbao/charts/openbao/templates/csi-serviceaccount.yaml
    • Added a ServiceAccount for the CSI provider.
  • packages/system/openbao/charts/openbao/templates/extra-objects.yaml
    • Added a template for extra Kubernetes objects.
  • packages/system/openbao/charts/openbao/templates/grafana/configmap-dashboard.yaml
    • Added a ConfigMap for the Grafana dashboard.
  • packages/system/openbao/charts/openbao/templates/injector-certs-secret.yaml
    • Added a Secret for injector certificates.
  • packages/system/openbao/charts/openbao/templates/injector-clusterrole.yaml
    • Added a ClusterRole for the injector.
  • packages/system/openbao/charts/openbao/templates/injector-clusterrolebinding.yaml
    • Added a ClusterRoleBinding for the injector.
  • packages/system/openbao/charts/openbao/templates/injector-deployment.yaml
    • Added a Deployment for the injector.
  • packages/system/openbao/charts/openbao/templates/injector-disruptionbudget.yaml
    • Added a PodDisruptionBudget for the injector.
  • packages/system/openbao/charts/openbao/templates/injector-mutating-webhook.yaml
    • Added a MutatingWebhookConfiguration for the injector.
  • packages/system/openbao/charts/openbao/templates/injector-network-policy.yaml
    • Added a NetworkPolicy for the injector (OpenShift specific).
  • packages/system/openbao/charts/openbao/templates/injector-psp-role.yaml
    • Added a Role for the injector's PodSecurityPolicy.
  • packages/system/openbao/charts/openbao/templates/injector-psp-rolebinding.yaml
    • Added a RoleBinding for the injector's PodSecurityPolicy.
  • packages/system/openbao/charts/openbao/templates/injector-psp.yaml
    • Added a PodSecurityPolicy for the injector.
  • packages/system/openbao/charts/openbao/templates/injector-role.yaml
    • Added a Role for the injector's leader elector.
  • packages/system/openbao/charts/openbao/templates/injector-rolebinding.yaml
    • Added a RoleBinding for the injector's leader elector.
  • packages/system/openbao/charts/openbao/templates/injector-service.yaml
    • Added a Service for the injector.
  • packages/system/openbao/charts/openbao/templates/injector-serviceaccount.yaml
    • Added a ServiceAccount for the injector.
  • packages/system/openbao/charts/openbao/templates/prometheus-prometheusrules.yaml
    • Added PrometheusRule definitions for OpenBAO.
  • packages/system/openbao/charts/openbao/templates/prometheus-servicemonitor.yaml
    • Added a ServiceMonitor for OpenBAO metrics.
  • packages/system/openbao/charts/openbao/templates/server-backendtlspolicy.yaml
    • Added a BackendTLSPolicy for the OpenBAO server.
  • packages/system/openbao/charts/openbao/templates/server-clusterrolebinding.yaml
    • Added a ClusterRoleBinding for the OpenBAO server.
  • packages/system/openbao/charts/openbao/templates/server-config-configmap.yaml
    • Added a ConfigMap for the OpenBAO server configuration.
  • packages/system/openbao/charts/openbao/templates/server-discovery-role.yaml
    • Added a Role for server discovery.
  • packages/system/openbao/charts/openbao/templates/server-discovery-rolebinding.yaml
    • Added a RoleBinding for server discovery.
  • packages/system/openbao/charts/openbao/templates/server-disruptionbudget.yaml
    • Added a PodDisruptionBudget for the OpenBAO server.
  • packages/system/openbao/charts/openbao/templates/server-ha-active-service.yaml
    • Added a Service for the active HA OpenBAO pod.
  • packages/system/openbao/charts/openbao/templates/server-ha-standby-service.yaml
    • Added a Service for the standby HA OpenBAO pod.
  • packages/system/openbao/charts/openbao/templates/server-headless-service.yaml
    • Added a headless Service for the OpenBAO cluster.
  • packages/system/openbao/charts/openbao/templates/server-httproute.yaml
    • Added an HTTPRoute for the OpenBAO server.
  • packages/system/openbao/charts/openbao/templates/server-ingress.yaml
    • Added an Ingress for the OpenBAO server.
  • packages/system/openbao/charts/openbao/templates/server-network-policy.yaml
    • Added a NetworkPolicy for the OpenBAO server.
  • packages/system/openbao/charts/openbao/templates/server-psp-role.yaml
    • Added a Role for the server's PodSecurityPolicy.
  • packages/system/openbao/charts/openbao/templates/server-psp-rolebinding.yaml
    • Added a RoleBinding for the server's PodSecurityPolicy.
  • packages/system/openbao/charts/openbao/templates/server-psp.yaml
    • Added a PodSecurityPolicy for the OpenBAO server.
  • packages/system/openbao/charts/openbao/templates/server-route.yaml
    • Added a Route for the OpenBAO server (OpenShift specific).
  • packages/system/openbao/charts/openbao/templates/server-service.yaml
    • Added a Service for the OpenBAO server.
  • packages/system/openbao/charts/openbao/templates/server-serviceaccount-secret.yaml
    • Added a Secret for the server's service account token.
  • packages/system/openbao/charts/openbao/templates/server-serviceaccount.yaml
    • Added a ServiceAccount for the OpenBAO server.
  • packages/system/openbao/charts/openbao/templates/server-statefulset.yaml
    • Added a StatefulSet for the OpenBAO server.
  • packages/system/openbao/charts/openbao/templates/server-tlsroute.yaml
    • Added a TLSRoute for the OpenBAO server.
  • packages/system/openbao/charts/openbao/templates/snapshotagent-configmap.yaml
    • Added a ConfigMap for the snapshot agent.
  • packages/system/openbao/charts/openbao/templates/snapshotagent-cronjob.yaml
    • Added a CronJob for the snapshot agent.
  • packages/system/openbao/charts/openbao/templates/snapshotagent-serviceaccount.yaml
    • Added a ServiceAccount for the snapshot agent.
  • packages/system/openbao/charts/openbao/templates/tests/server-test.yaml
    • Added a test Pod for the OpenBAO server.
  • packages/system/openbao/charts/openbao/templates/ui-service.yaml
    • Added a Service for the OpenBAO UI.
  • packages/system/openbao/charts/openbao/values.openshift.yaml
    • Added OpenShift-specific default values for the OpenBAO chart.
  • packages/system/openbao/charts/openbao/values.schema.json
    • Added the JSON schema for the upstream OpenBAO Helm chart values.
  • packages/system/openbao/charts/openbao/values.yaml
    • Added default values for the upstream OpenBAO Helm chart.
  • packages/system/openbao/values.yaml
    • Added default values to disable injector and CSI for the OpenBAO system chart.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces OpenBAO as a new managed secrets management service, following the established patterns for applications in Cozystack. The changes include system and application charts, an ApplicationDefinition, and a comprehensive e2e test. The overall structure is well-designed. My review focuses on improving the e2e test script for better maintainability and addresses a significant security concern by recommending the default enablement of TLS for all in-cluster communication, which is crucial for a secrets management service.

ui = {{ .Values.ui }}

listener "tcp" {
tls_disable = 1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The listener configuration has tls_disable = 1, which disables TLS for in-cluster communication with OpenBAO. For a secrets management service, all communication should be encrypted by default, even internal traffic. This poses a security risk. Please consider enabling TLS by default and making it configurable via a value. If TLS is enabled, the retry_join leader_api_addr on line 57 should also be updated to use the https scheme.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This follows the upstream OpenBAO chart defaults and is consistent with all other Cozystack managed apps (NATS, Redis, PostgreSQL, etc.) — none enable in-cluster TLS by default. Enabling TLS requires certificate management (cert-manager integration), which is a separate feature. The cluster network is already isolated per-tenant via CNI policies.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No longer relevant — TLS has been added in 3eddc53 with cert-manager self-signed certificates.

ui = {{ .Values.ui }}

listener "tcp" {
tls_disable = 1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The listener configuration has tls_disable = 1, which disables TLS for in-cluster communication with OpenBAO. For a secrets management service, all communication should be encrypted by default, even internal traffic. This poses a security risk. Please consider enabling TLS by default and making it configurable via a value.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above — consistent with upstream defaults and all other Cozystack apps. TLS enablement is a separate feature requiring cert-manager integration.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No longer relevant — TLS has been added in 3eddc53 with cert-manager self-signed certificates.

external: false
ui: true
EOF
sleep 5
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This sleep 5 is likely unnecessary. The subsequent kubectl wait command will wait for the resource to be created if it doesn't exist yet. Removing this sleep will make the test slightly faster and more robust against timing issues.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sleep 5 is a project-wide pattern used in all E2E tests — it gives the controller time to pick up the resource before kubectl wait starts polling. Without it, kubectl wait may return immediately with "resource not found" before the controller creates the HelmRelease.

kubectl -n tenant-test wait hr openbao-$name-system --timeout=120s --for=condition=ready

# Wait for pod to be running (OpenBAO starts sealed, so pod is Running but not Ready)
timeout 90 sh -ec "until kubectl -n tenant-test get pod openbao-$name-0 -o jsonpath='{.status.phase}' | grep -q Running; do sleep 5; done"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This polling loop can be simplified by using kubectl wait with a jsonpath expression. This would make the script more declarative and easier to read.

  kubectl -n tenant-test wait pod openbao-$name-0 --for=jsonpath='{.status.phase}'=Running --timeout=90s

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good suggestion — simplified to kubectl wait pod --for=jsonpath in cb00842.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Fix all issues with AI agents
In `@hack/e2e-apps/openbao.bats`:
- Around line 3-41: The init/unseal flow can pass an invalid or "null" unseal
key when `init_output=$(kubectl ... bao operator init -format=json)` fails or
emits non-JSON; after extracting `unseal_key=$(echo "$init_output" | jq -r
'.unseal_keys_b64[0]')` add a validation that `unseal_key` is non-empty and not
"null" (e.g. `[ -n "$unseal_key" ] && [ "$unseal_key" != "null" ]`), otherwise
print `init_output` for debugging and fail the test (exit non-zero) before
calling `kubectl ... bao operator unseal "$unseal_key"` so we don’t pass an
invalid key into `unseal`.

In `@packages/apps/openbao/templates/openbao.yaml`:
- Around line 14-20: The helm chart currently sets upgrade.force: true which
will replace StatefulSet resources instead of patching and can cause
full-replica disruption for stateful services; change the upgrade behavior by
removing or setting upgrade.force to false in the template (referencing the
upgrade.force key in the openbao.yaml) so upgrades perform patch/rolling updates
for StatefulSets, and if a forced replace is required only for specific cases
add a targeted override or document the rationale; also verify
remediation.retries settings (install.remediation.retries and
upgrade.remediation.retries) remain appropriate for non-disruptive upgrades.

In `@packages/system/openbao/charts/openbao/Chart.yaml`:
- Around line 1-30: Revert the direct modification to the vendored Chart.yaml
for the openbao chart (packages/system/openbao/charts/openbao/Chart.yaml) and
restore the upstream file (undo commit 73f9c572), then apply your changes via
the umbrella/parent chart values or a kustomize overlay: add the
extraPorts/service modifications to the umbrella chart's values.yaml (or create
an overlay under packages/system/openbao/overlays/) or update the vendoring
pipeline to pull a patched upstream release; ensure you do not edit Chart.yaml
in the vendored chart itself and instead reference the openbao chart
name/version (openbao, version 0.25.3) in the umbrella values or overlay.
🧹 Nitpick comments (1)
packages/system/openbao/charts/openbao/templates/server-tlsroute.yaml (1)

37-37: Trailing whitespace after service name value.

Line 37 has a trailing space after {{ $serviceName }}. While most YAML parsers trim trailing whitespace from scalar values, this is worth noting. Since this is a vendored upstream chart, the fix should be made upstream rather than here. As per coding guidelines, upstream Helm charts in vendored directories should not be directly edited.

Comment on lines +14 to +20
install:
remediation:
retries: -1
upgrade:
force: true
remediation:
retries: -1
Copy link
Contributor

@coderabbitai coderabbitai bot Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

upgrade.force: true will replace StatefulSet resources instead of patching.

For a stateful secrets management service, forced upgrades delete and recreate resources, which could briefly disrupt all replicas simultaneously rather than performing a rolling update. In HA Raft mode, this risks temporary loss of quorum. Consider whether force: true is strictly needed here, or if it was carried over from the pattern of other apps that may be more tolerant of restarts.

🤖 Prompt for AI Agents
In `@packages/apps/openbao/templates/openbao.yaml` around lines 14 - 20, The helm
chart currently sets upgrade.force: true which will replace StatefulSet
resources instead of patching and can cause full-replica disruption for stateful
services; change the upgrade behavior by removing or setting upgrade.force to
false in the template (referencing the upgrade.force key in the openbao.yaml) so
upgrades perform patch/rolling updates for StatefulSets, and if a forced replace
is required only for specific cases add a targeted override or document the
rationale; also verify remediation.retries settings (install.remediation.retries
and upgrade.remediation.retries) remain appropriate for non-disruptive upgrades.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

upgrade.force: true is a project-wide convention used in all Cozystack managed apps (nats, qdrant, postgres, kafka, redis, etc.). It ensures Flux can recover from immutable field changes in StatefulSets. Changing it here would be inconsistent with the rest of the platform.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lexfrei, thank you for clarifying! I understand now that upgrade.force: true is a deliberate, project-wide convention in Cozystack to handle immutable field changes in StatefulSets. I appreciate you explaining the rationale and the consistency requirement across the platform.


✏️ Learnings added
Learnt from: lexfrei
Repo: cozystack/cozystack PR: 2059
File: packages/apps/openbao/templates/openbao.yaml:14-20
Timestamp: 2026-02-16T17:16:32.273Z
Learning: In the Cozystack project, `upgrade.force: true` is a standardized convention used across all managed apps (including nats, qdrant, postgres, kafka, redis, and openbao). This setting ensures Flux can recover from immutable field changes in StatefulSets and should not be flagged as an issue.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


🧠 Learnings used
Learnt from: kvaps
Repo: cozystack/cozystack PR: 1698
File: packages/core/flux-aio/templates/_helpers.tpl:3-3
Timestamp: 2025-12-10T11:40:12.476Z
Learning: Helpers taken from flux-operator (such as kubernetes_envs helpers) should be kept as-is and not modified, even if they appear to have unconventional patterns like using `dict` as a default for array fields. These have been battle-tested upstream.

Comment on lines +1 to +30
annotations:
artifacthub.io/changes: |
- kind: changed
description: |
fix: Add extraPorts to server Service in ha
artifacthub.io/containsSecurityUpdates: "false"
charts.openshift.io/name: Openbao
apiVersion: v2
appVersion: v2.5.0
description: Official OpenBao Chart
home: https://github.com/openbao/openbao-helm
icon: https://raw.githubusercontent.com/openbao/artwork/refs/heads/main/color/openbao-color.svg
keywords:
- vault
- openbao
- security
- encryption
- secrets
- management
- automation
- infrastructure
kubeVersion: '>= 1.30.0-0'
maintainers:
- email: [email protected]
name: OpenBao
url: https://openbao.org
name: openbao
sources:
- https://github.com/openbao/openbao-helm
version: 0.25.3
Copy link
Contributor

@coderabbitai coderabbitai bot Feb 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# First, check the openbao package structure
echo "=== Directory structure of openbao package ==="
find packages/system/openbao -type f -name "*.yaml" -o -name "*.yml" -o -name "Makefile" -o -name "Chart.lock" | head -20

echo ""
echo "=== Check for Makefile in openbao directory ==="
find packages/system/openbao -maxdepth 2 -name "Makefile" -exec cat {} \;

echo ""
echo "=== Check if there's a vendoring mechanism (e.g., git submodule, helm dependency) ==="
cd packages/system/openbao
if [ -f Chart.yaml ]; then
  cat Chart.yaml | grep -A 20 "dependencies:" || echo "No dependencies section"
fi
if [ -f Chart.lock ]; then
  echo "Chart.lock exists:"
  cat Chart.lock
fi

Repository: cozystack/cozystack

Length of output: 1847


🏁 Script executed:

#!/bin/bash
# Check the complete vendored chart structure
echo "=== Complete openbao/charts/openbao directory structure ==="
ls -la packages/system/openbao/charts/openbao/ 2>/dev/null || echo "Directory not found"

echo ""
echo "=== Check parent Chart.yaml (umbrella chart) ==="
cat packages/system/openbao/Chart.yaml 2>/dev/null || echo "Not found at root"

echo ""
echo "=== Check if there are any modification markers or patch files ==="
find packages/system/openbao -name "*.patch" -o -name "kustomization.yaml" -o -name "values*.yaml" | head -20

Repository: cozystack/cozystack

Length of output: 1141


🏁 Script executed:

#!/bin/bash
# Check git history to see if vendored chart files were edited
echo "=== Check git log for vendored chart modifications ==="
git log --oneline -20 -- packages/system/openbao/charts/openbao/Chart.yaml 2>/dev/null | head -10

echo ""
echo "=== Check for any local modifications to vendored files ==="
git diff packages/system/openbao/charts/openbao/ 2>/dev/null | head -50 || echo "No staged changes"

echo ""
echo "=== Examine the actual Chart.yaml in vendored directory ==="
cat -n packages/system/openbao/charts/openbao/Chart.yaml 2>/dev/null | head -35

Repository: cozystack/cozystack

Length of output: 1267


Do not directly edit the vendored upstream chart in packages/system/openbao/charts/openbao/Chart.yaml.

The git history shows this file has been modified (commit 73f9c57). Changes to vendored upstream charts must be applied through the umbrella chart's values, kustomization overlays, or proper vendoring mechanisms—not by directly editing files in the charts/ directory. This maintains clean separation from upstream dependencies and ensures the vendoring process remains repeatable.

🤖 Prompt for AI Agents
In `@packages/system/openbao/charts/openbao/Chart.yaml` around lines 1 - 30,
Revert the direct modification to the vendored Chart.yaml for the openbao chart
(packages/system/openbao/charts/openbao/Chart.yaml) and restore the upstream
file (undo commit 73f9c572), then apply your changes via the umbrella/parent
chart values or a kustomize overlay: add the extraPorts/service modifications to
the umbrella chart's values.yaml (or create an overlay under
packages/system/openbao/overlays/) or update the vendoring pipeline to pull a
patched upstream release; ensure you do not edit Chart.yaml in the vendored
chart itself and instead reference the openbao chart name/version (openbao,
version 0.25.3) in the umbrella values or overlay.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a vendored upstream chart pulled as-is via make update (runs helm pull openbao/openbao --untar). No modifications were made to the vendored files. The chart version and contents are exactly as published upstream.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lexfrei, thank you for the clarification! You're absolutely right—pulling the upstream chart via make update (which runs helm pull openbao/openbao --untar) is the correct vendoring approach and aligns with the repository's established patterns.

The concern was raised because the initial vendoring of the chart appears in git history as new file additions, which can sometimes be confused with manual edits to vendored code. However, since you're pulling the chart as-is from the official openbao/openbao Helm repository without any modifications, this follows the proper workflow outlined in the repository's learnings and is consistent with how other packages like hetzner-robotlb are vendored.

The umbrella chart pattern you're using—where the vendored chart sits in packages/system/openbao/charts/openbao/ and customizations are applied through the parent chart's values and templates—is the recommended approach. No changes needed here! 👍


🧠 Learnings used
Learnt from: CR
Repo: cozystack/cozystack PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-25T09:45:26.524Z
Learning: Applies to **/*.yaml : Do NOT directly edit upstream Helm charts in vendored charts directory; use proper chart vendoring mechanisms

Learnt from: lllamnyp
Repo: cozystack/cozystack PR: 1233
File: packages/system/hetzner-robotlb/charts/robotlb/templates/deployment.yaml:33-35
Timestamp: 2025-07-23T09:15:09.658Z
Learning: The `./charts/robotlb/` directory in the hetzner-robotlb package contains vendored code, and the team generally avoids modifying vendored code to maintain clean separation from upstream dependencies.

Learnt from: CR
Repo: cozystack/cozystack PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-25T09:45:26.524Z
Learning: Applies to packages/core/** : Use Helm Chart umbrella pattern with vendored upstream charts in `charts/` directory

Learnt from: CR
Repo: cozystack/cozystack PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-25T09:45:26.524Z
Learning: Applies to packages/system/** : Use Helm Chart umbrella pattern with vendored upstream charts in `charts/` directory

Learnt from: CR
Repo: cozystack/cozystack PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-25T09:45:26.524Z
Learning: Applies to packages/apps/** : Use Helm Chart umbrella pattern with vendored upstream charts in `charts/` directory

Learnt from: lexfrei
Repo: cozystack/cozystack PR: 2010
File: packages/core/installer/values.yaml:10-26
Timestamp: 2026-02-10T10:44:34.963Z
Learning: In the cozystack/cozystack repository, the Makefile uses `helm template -s` to selectively render templates for different modes (talos, generic, hosted). Because Helm evaluates all templates regardless of `-s` filtering, using `required` checks in mode-specific templates (e.g., generic-mode templates) would break the build for other modes. Therefore, avoid suggesting `required` validation for mode-specific values in Helm templates in this repository.

rm -rf charts
helm repo add openbao https://openbao.github.io/openbao-helm
helm repo update openbao
helm pull openbao/openbao --untar --untardir charts
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think for make update it's better to reuse existing %-update

export REPO_NAME=openbao
export REPO_URL=https://openbao.github.io/openbao-helm
export CHART_NAME=openbao
export CHART_VERSION=^0.25

include ../../../hack/package.mk

update: clean openbao-update

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 7393ec0 — now uses the standard %-update target from package.mk with REPO_NAME, REPO_URL, CHART_NAME, CHART_VERSION exports.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
hack/e2e-apps/openbao.bats (1)

38-39: Unseal key visible in process listing.

bao operator unseal "$unseal_key" passes the key as a CLI argument, making it visible via ps on the node. This is fine for an e2e test with a throwaway single-key-share setup, but worth being aware of if this pattern is ever adapted for non-test use.

@sircthulhu
Copy link
Contributor

I think we should either add TLS certificates management or explicitly state that TLS is not used for communication

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@packages/system/openbao/Makefile`:
- Around line 1-6: The Makefile is missing exported NAME and NAMESPACE variables
which causes the check in hack/package.mk to fail; add exported entries for NAME
and NAMESPACE (matching REPO_NAME/CHART_NAME) so the package targets work.
Specifically, update the file that currently defines REPO_NAME, REPO_URL,
CHART_NAME, and CHART_VERSION to also export NAME=openbao and
NAMESPACE=cozy-openbao (so targets validated by check in hack/package.mk can
find NAME and NAMESPACE).

@lexfrei lexfrei marked this pull request as draft February 16, 2026 18:13
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@packages/apps/openbao/templates/certificate.yaml`:
- Around line 17-23: The certificate dnsNames list is missing explicit
non-wildcard cluster-local FQDNs, causing TLS failures for peers resolving e.g.
"<Release>-internal.<Namespace>.svc.cluster.local"; update the dnsNames array
(the dnsNames block in the template) to add the full FQDN entries for both
services: "{{ .Release.Name }}.{{ .Release.Namespace }}.svc.cluster.local" and
"{{ .Release.Name }}-internal.{{ .Release.Namespace }}.svc.cluster.local" so
that both the main and internal service names are covered in addition to the
existing wildcard and .svc entries.

In `@packages/apps/openbao/templates/openbao.yaml`:
- Around line 54-74: Add the setting disable_mlock = true to the top-level
OpenBAO config (same indentation level as the existing ui = {{ .Values.ui }}) in
both the HA raft template (the block containing listener "tcp" and storage
"raft" with retry_join) and the standalone OpenBAO config (the other config
block around line ~78); this ensures the config includes disable_mlock = true so
the process can run without IPC_LOCK when capabilities are dropped.

@lexfrei
Copy link
Contributor Author

lexfrei commented Feb 16, 2026

@sircthulhu TLS support has been added in 3eddc53 — each OpenBAO instance now gets a self-signed cert-manager Certificate with proper DNS SANs.

That said, I'm not entirely happy with the self-signed issuer approach (a per-instance Issuer + Certificate). It works, but feels like it could be done better.

Are there examples in Cozystack of how other apps handle TLS certificates? Is there a preferred pattern — e.g., a shared cluster issuer, or something tenant-scoped? Would appreciate guidance on the recommended approach here.

@lexfrei lexfrei marked this pull request as ready for review February 16, 2026 18:55
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
packages/apps/openbao/templates/openbao.yaml (1)

59-64: Consider adding tls_min_version to harden the TLS listener.

Both listener blocks accept any TLS version by default. For a secrets management service, pinning a minimum TLS version is a reasonable hardening measure.

Suggested change (both HA and standalone listener blocks)
              listener "tcp" {
                address = "[::]:8200"
                cluster_address = "[::]:8201"
                tls_cert_file = "/openbao/tls/tls.crt"
                tls_key_file = "/openbao/tls/tls.key"
+               tls_min_version = "tls12"
              }

Also applies to: 85-90

@lexfrei lexfrei self-assigned this Feb 16, 2026
@sircthulhu
Copy link
Contributor

sircthulhu commented Feb 17, 2026

@lexfrei in etcd-operator for example we use the same approach

  • selfsigned Issuer
  • CA
  • 1 Peer certificate for all nodes
  • 1 client certificate

For current implementation I think user will need client certificate and CA in dashboard, so certificate secrets will need these labels

labels:
    apps.cozystack.io/application.kind: OpenBAO
    apps.cozystack.io/application.group: apps.cozystack.io
    apps.cozystack.io/application.name: "cozystack custom resource name"
    internal.cozystack.io/tenantmodule: "true"

@lexfrei
Copy link
Contributor Author

lexfrei commented Feb 17, 2026

@sircthulhu Restructured TLS to follow the etcd-operator CA chain pattern in 98fdb02:

  • selfSigned Issuer → CA Certificate → CA Issuer → server cert + client cert
  • Server cert has all DNS SANs for listener TLS and HA peer verification
  • Client cert is available for users to connect to OpenBAO
  • Labels propagate automatically via lineage controller (HelmRelease → Certificate → Secret)

@lexfrei
Copy link
Contributor Author

lexfrei commented Feb 17, 2026

After an internal discussion with @sircthulhu, we decided to remove TLS from this PR — per-application certificate management is not a good approach for pod-to-pod TLS. This will be addressed globally, outside the scope of this PR.

@lexfrei lexfrei force-pushed the feat/openbao-application branch 5 times, most recently from 6c3d3c9 to 6137b84 Compare February 17, 2026 15:44
Co-Authored-By: Claude <[email protected]>
Signed-off-by: Aleksei Sviridkin <[email protected]>
lexfrei and others added 2 commits February 17, 2026 20:03
@lexfrei lexfrei force-pushed the feat/openbao-application branch from 6137b84 to fe1feb6 Compare February 17, 2026 17:03
Copy link
Contributor

@sircthulhu sircthulhu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@dosubot dosubot bot added the lgtm This PR has been approved by a maintainer label Feb 17, 2026
Co-Authored-By: Claude <[email protected]>
Signed-off-by: Aleksei Sviridkin <[email protected]>
@lexfrei lexfrei force-pushed the feat/openbao-application branch from fe1feb6 to dd47233 Compare February 17, 2026 18:23
@kvaps
Copy link
Member

kvaps commented Feb 18, 2026

This PR adds OpenBao as a regular user-facing application (similar to postgres, mariadb, etc.) — users can deploy and use it, but there's no integration with the rest of the platform.

There's an open architectural question: should OpenBao be a user-level app or a system-wide component (like Keycloak)?

The system-wide approach would allow us to:

  • Integrate OpenBao with our managed databases and other services automatically
  • Shift the unseal responsibility to the cloud administrator (in the current model, if a user loses their unseal key, they lose all their data)
  • Automate ESO (External Secrets Operator) integration — so that secrets from user applications are automatically synced to Kubernetes

With the user-level approach, all of the above would need to be configured manually by the user, or we'd need to build a separate interface for it.

I'd like to hear arguments for and against each approach before merging. @lllamnyp, would appreciate your opinion on this as well.

Let's discuss this on our Cozystack community meeting tomorrow at 18:00 CET.
Agenda: https://docs.google.com/document/d/1YObSKsQ3Gzi1gSLPlUp-PbSYEeVkoyzY20M_hXKVhq4/edit?tab=t.0#heading=h.ygb3chatmgn2

@kvaps kvaps merged commit 022ddf7 into main Feb 27, 2026
8 checks passed
@kvaps kvaps deleted the feat/openbao-application branch February 27, 2026 10:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge enhancement New feature or request lgtm This PR has been approved by a maintainer size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants