实现 v1alpha1 首个可用版本 #1

Open
opened 2026-09-10 05:39:21 +00:00 by panxiao81 · 0 comments
Owner

目标

按已批准的 docs/specification.md 和 docs/api-reference.md 实现 PostgreSQL Tenant Operator v1alpha1。每个切片保持可构建、可测试、可独立 review;达到合适 commit 边界时先请求人工确认。提出 PR 前必须再次停下确认。

上位合同

  • docs/specification.md
  • docs/api-reference.md
  • docs/architecture.md
  • docs/deployment.md
  • docs/security.md
  • docs/development.md
  • docs/operations.md
  • docs/migration.md

实现发现歧义或需要改变外部行为时,先修改规格并重新审批,不在代码中隐含决定。

实现切片

  • API 与生成物:更新两个 CRD 的 spec/status、默认值、校验、immutable/append-only 合同、print columns 和 samples;生成 CRD、RBAC、DeepCopy;用 envtest 覆盖 API 合同。
  • 状态机与 Conditions:实现两个 CR 的 status.phase checkpoint、Ready Condition、Reason、observedGeneration、错误分类,以及 status 丢失/落后/超前后的保守重建测试。
  • PostgreSQL registry:实现 Instance 初始化、UID 所有权、安装身份和 Retain/unmanaged 记录;不得把 registry 作为协调 phase 来源;覆盖同名冲突和伪造 COMMENT。
  • OpenBao adapter:实现 Kubernetes auth、管理凭据只读、部署级 KV mount/base path、确定性 Tenant path、一次性密码生成和 KV v2 metadata 所有权;覆盖中断恢复与 Secret 泄漏测试。
  • PostgreSQL provisioning:幂等创建作为 owner 的 login role、database、CONNECT 权限和 allowlist extension;实际验证应用登录与权限边界。
  • ExternalSecret / ESO:创建固定命名的 ExternalSecret,支持用户指定合法 target Secret 名称,投射七个原子字段;只有 ExternalSecret Ready、Secret 存在且应用登录成功后 Tenant 才 Ready。
  • Retain / Delete:实现 finalizer、所有权复核、Retain unmanaged 标记,以及 Delete 的 Secret、连接、database、role、KV 历史和 registry 清理顺序;为每个故障点覆盖可重试性。
  • TLS 与完整 E2E:在隔离 Kind 中部署 PostgreSQL、OpenBao、ESO,验证 DNS SAN/IP SAN、DNS host/IP hostaddr、最小权限、完整创建与两种删除路径。
  • 迁移演练:在临时环境执行 docs/migration.md 的 dump/rename/restore/切换/回滚,记录版本、结果并修正文档,之后才能标记 Verified。

每个切片的完成条件

  • 测试可追溯到已批准验收标准,且先失败后由最小实现通过。
  • 不混入无关重构、格式化或依赖升级。
  • API/marker 变化同时提交生成文件和 sample,并明确说明生成 diff。
  • 运行与风险相称的 make test、make lint、adapter integration 或 Kind E2E。
  • 日志、Event、Condition、metric、trace、CR 和测试 artifact 不含密码或 Token。
  • 在创建 commit 前请求人工确认;一个 PR 可以包含多个小 commit。

总体验收

满足 docs/specification.md 第 15 节全部验收标准;迁移 runbook 完成真实临时环境演练;Gitea Actions 的 Tests、Lint 和 E2E 在 runs-on: self-hosted runner 上通过。

## 目标 按已批准的 `docs/specification.md` 和 `docs/api-reference.md` 实现 PostgreSQL Tenant Operator v1alpha1。每个切片保持可构建、可测试、可独立 review;达到合适 commit 边界时先请求人工确认。提出 PR 前必须再次停下确认。 ## 上位合同 - `docs/specification.md` - `docs/api-reference.md` - `docs/architecture.md` - `docs/deployment.md` - `docs/security.md` - `docs/development.md` - `docs/operations.md` - `docs/migration.md` 实现发现歧义或需要改变外部行为时,先修改规格并重新审批,不在代码中隐含决定。 ## 实现切片 - [ ] **API 与生成物**:更新两个 CRD 的 spec/status、默认值、校验、immutable/append-only 合同、print columns 和 samples;生成 CRD、RBAC、DeepCopy;用 envtest 覆盖 API 合同。 - [ ] **状态机与 Conditions**:实现两个 CR 的 `status.phase` checkpoint、`Ready` Condition、Reason、`observedGeneration`、错误分类,以及 status 丢失/落后/超前后的保守重建测试。 - [ ] **PostgreSQL registry**:实现 Instance 初始化、UID 所有权、安装身份和 Retain/unmanaged 记录;不得把 registry 作为协调 phase 来源;覆盖同名冲突和伪造 COMMENT。 - [ ] **OpenBao adapter**:实现 Kubernetes auth、管理凭据只读、部署级 KV mount/base path、确定性 Tenant path、一次性密码生成和 KV v2 metadata 所有权;覆盖中断恢复与 Secret 泄漏测试。 - [ ] **PostgreSQL provisioning**:幂等创建作为 owner 的 login role、database、CONNECT 权限和 allowlist extension;实际验证应用登录与权限边界。 - [ ] **ExternalSecret / ESO**:创建固定命名的 ExternalSecret,支持用户指定合法 target Secret 名称,投射七个原子字段;只有 ExternalSecret Ready、Secret 存在且应用登录成功后 Tenant 才 Ready。 - [ ] **Retain / Delete**:实现 finalizer、所有权复核、Retain unmanaged 标记,以及 Delete 的 Secret、连接、database、role、KV 历史和 registry 清理顺序;为每个故障点覆盖可重试性。 - [ ] **TLS 与完整 E2E**:在隔离 Kind 中部署 PostgreSQL、OpenBao、ESO,验证 DNS SAN/IP SAN、DNS host/IP hostaddr、最小权限、完整创建与两种删除路径。 - [ ] **迁移演练**:在临时环境执行 `docs/migration.md` 的 dump/rename/restore/切换/回滚,记录版本、结果并修正文档,之后才能标记 Verified。 ## 每个切片的完成条件 - 测试可追溯到已批准验收标准,且先失败后由最小实现通过。 - 不混入无关重构、格式化或依赖升级。 - API/marker 变化同时提交生成文件和 sample,并明确说明生成 diff。 - 运行与风险相称的 `make test`、`make lint`、adapter integration 或 Kind E2E。 - 日志、Event、Condition、metric、trace、CR 和测试 artifact 不含密码或 Token。 - 在创建 commit 前请求人工确认;一个 PR 可以包含多个小 commit。 ## 总体验收 满足 `docs/specification.md` 第 15 节全部验收标准;迁移 runbook 完成真实临时环境演练;Gitea Actions 的 Tests、Lint 和 E2E 在 `runs-on: self-hosted` runner 上通过。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: panxiao81/postgresql-tenant-operator#1