feat: PostgreSQL 角色与数据库创建闭环 #16

Open
panxiao81 wants to merge 1 commits from feat/database-resource-provisioning into main
Owner

范围

承接 #15 的显式装配与领域边界,将已确认应用凭据接入真实 PostgreSQL 角色、数据库和连接 ACL 创建。一个可 review 的完整行为切片,不混入扩展、Import、ESO 或 Retain/Delete。

  • 原生非 superuser 管理账号,每次操作重验权限及 Secret;复用已有 InstanceService/pgxpool,不新增连接池或 registry。
  • 角色、数据库分别创建并回读后保存 CR status.roleOID/status.databaseOID;CEL 阻止覆盖确认。未知同名、结果不确定、确认保存失败或对象重建均 Conflict,人工处理。
  • 新库先 ALLOW_CONNECTIONS false,确认身份后收紧 PUBLIC CONNECT,再开放连接。应用账号无管理特权,不重置已有密码或 owner。
  • 新增显式 --database-provision-resources(默认 false);必须先升级 CRD,并配置管理 Secret 与 OpenBao 凭据准备。
  • 启用资源创建时,同一条 reconcile 顺序执行凭据准备/检查与供应,避免两个 controller 争写同一 Database status。所有依赖仍在 bootstrap 手动注入。

Review 入口

  1. domain/provisioning/state.go:确认和恢复规则。
  2. application/database_provisioning.go:每轮一个创建步骤与确认。
  3. adapter/postgresql/resources.go:原生 SQL、对象观察与错误分类。
  4. adapter/kubernetes/provisioning_resources.go 与 API 字段:并发和持久确认。
  5. bootstrap/database_wiring.go:共享管理连接与顺序装配。

验证

  • make test、make build、普通及 integration lint(0 issues)。
  • make test-database-integration:真实 API server + PostgreSQL + OpenBao,含 race;最终装配全量通过。
  • 组合集成验证真实应用密码登录/建表、管理权限拒绝、无关账号连接拒绝、重复协调/manager 重启、权限恢复、未知同名角色和数据库、角色重建、并发创建、调用结果丢失、角色/数据库确认持久化失败及删除停止。
  • 源文档链接检查与 git diff --check。

边界

ResourcesReady 仅确认角色、数据库及 ACL,不代表扩展或 Tenant 交付完成;总体 Ready 仍为 False。无运行期应用登录健康检查,不修改其他数据库 ACL,不提供跨系统事务或任意管理员并发 DDL 的恢复保证。尚未部署。

文档详见 docs/database/README.md 的 PostgreSQL 资源创建闭环;homelab-wiki 对应服务页同步启用与人工处理边界。

## 范围 承接 #15 的显式装配与领域边界,将已确认应用凭据接入真实 PostgreSQL 角色、数据库和连接 ACL 创建。一个可 review 的完整行为切片,不混入扩展、Import、ESO 或 Retain/Delete。 - 原生非 superuser 管理账号,每次操作重验权限及 Secret;复用已有 InstanceService/pgxpool,不新增连接池或 registry。 - 角色、数据库分别创建并回读后保存 CR status.roleOID/status.databaseOID;CEL 阻止覆盖确认。未知同名、结果不确定、确认保存失败或对象重建均 Conflict,人工处理。 - 新库先 ALLOW_CONNECTIONS false,确认身份后收紧 PUBLIC CONNECT,再开放连接。应用账号无管理特权,不重置已有密码或 owner。 - 新增显式 --database-provision-resources(默认 false);必须先升级 CRD,并配置管理 Secret 与 OpenBao 凭据准备。 - 启用资源创建时,同一条 reconcile 顺序执行凭据准备/检查与供应,避免两个 controller 争写同一 Database status。所有依赖仍在 bootstrap 手动注入。 ## Review 入口 1. domain/provisioning/state.go:确认和恢复规则。 2. application/database_provisioning.go:每轮一个创建步骤与确认。 3. adapter/postgresql/resources.go:原生 SQL、对象观察与错误分类。 4. adapter/kubernetes/provisioning_resources.go 与 API 字段:并发和持久确认。 5. bootstrap/database_wiring.go:共享管理连接与顺序装配。 ## 验证 - make test、make build、普通及 integration lint(0 issues)。 - make test-database-integration:真实 API server + PostgreSQL + OpenBao,含 race;最终装配全量通过。 - 组合集成验证真实应用密码登录/建表、管理权限拒绝、无关账号连接拒绝、重复协调/manager 重启、权限恢复、未知同名角色和数据库、角色重建、并发创建、调用结果丢失、角色/数据库确认持久化失败及删除停止。 - 源文档链接检查与 git diff --check。 ## 边界 ResourcesReady 仅确认角色、数据库及 ACL,不代表扩展或 Tenant 交付完成;总体 Ready 仍为 False。无运行期应用登录健康检查,不修改其他数据库 ACL,不提供跨系统事务或任意管理员并发 DDL 的恢复保证。尚未部署。 文档详见 docs/database/README.md 的 PostgreSQL 资源创建闭环;homelab-wiki 对应服务页同步启用与人工处理边界。
panxiao81 added 1 commit 2026-09-29 16:05:28 +00:00
feat: 接通 PostgreSQL 角色与数据库创建闭环
Verify / test (pull_request) Successful in 9m19s
Verify / lint (pull_request) Successful in 10m19s
Verify / database-integration (pull_request) Successful in 12m12s
e2016d3727
All checks were successful
Verify / test (pull_request) Successful in 9m19s
Verify / lint (pull_request) Successful in 10m19s
Verify / database-integration (pull_request) Successful in 12m12s
You are not authorized to merge this pull request.
This pull request can be merged automatically.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/database-resource-provisioning:feat/database-resource-provisioning
git checkout feat/database-resource-provisioning
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: panxiao81/ayatori#16