fix(pikaoa): 初始化附件备份仓库

This commit is contained in:
Codex
2026-07-15 08:32:09 +02:00
parent 7a428e0656
commit 21f359e1e2
4 changed files with 104 additions and 16 deletions
@@ -8,13 +8,13 @@ PikaOA 生产附件离机备份已完成首阶段代码、owning YAML、受控 C
- `config/pikaoa.yaml`:声明 04:17 日常 Restic 备份、retention、只读附件 PVC、`.tmp` 排除、PK01 SFTP 目标、独立 check 与 forget/prune schedule、临时目录 restore smoke 和非阻塞策略。
- `config/secrets-distribution.yaml`:声明 Restic 密码 env 与 SSH 私钥、`known_hosts` 两个 raw-file 的 `sourceRef``sourceKey``targetKey`,禁止从运行面反解或手写 Secret。
- `scripts/src/pikaoa-attachments-backup.ts`:提供 `plan``status``apply``backup-now``restore-smoke`长 apply 使用异步 UniDesk job手动备份和恢复提交 Kubernetes Job 后立即返回并通过 `status` 轮询。
- `scripts/src/pikaoa-attachments-backup.ts`:提供 `plan``status``init``apply``backup-now``restore-smoke``init` 通过独立短生命周期 Job 精确区分已初始化、仓库不存在和认证/网络失败,且不挂载生产 PVC;长 apply 使用异步 UniDesk job手动备份和恢复提交 Kubernetes Job 后立即返回并通过 `status` 轮询。
- `scripts/src/pikaoa-test-target.ts`:把 `pikaoa attachments-backup` 接入现有 PikaOA CLI dispatcher。
- `scripts/src/pikaoa-attachments-backup.test.ts`:覆盖独立 CronJob、只读 PVC、`.tmp` 排除、retention、Secret 不泄露与临时 `emptyDir` restore smoke。
- `scripts/src/pikaoa-attachments-backup.test.ts`:覆盖独立 CronJob、只读 PVC、`.tmp` 排除、retention、Secret 不泄露、init 必须 confirm、init 已存在 no-op/精确 fresh init 语义与临时 `emptyDir` restore smoke。
## 验证
- `bun test ./scripts/src/pikaoa-attachments-backup.test.ts`2 pass0 fail。
- `bun test ./scripts/src/pikaoa-attachments-backup.test.ts`3 pass0 fail,覆盖备份、init 与 restore smoke 安全边界
- `pikaoa attachments-backup plan --target NC01 --output json``ok=true``mode=local-render`、4 个对象、schedule 为 04:17、晚于数据库 03:37、`valuesPrinted=false`
- `pikaoa attachments-backup apply --target NC01 --output json`:默认 dry-run`mutation=false`
- `pikaoa attachments-backup status --target NC01 --output json`:真实只读观察返回 `prerequisite-waiting``businessBlocking=false`,未发现生产 namespace、附件 PVC、备份 Secret 和 PK01 目标目录。
@@ -26,10 +26,11 @@ PikaOA 生产附件离机备份已完成首阶段代码、owning YAML、受控 C
1. `bun scripts/cli.ts secrets sync --config config/secrets-distribution.yaml --target pikaoa-nc01 --confirm`
2. `bun scripts/cli.ts pikaoa attachments-backup status --target NC01`
3. `bun scripts/cli.ts pikaoa attachments-backup apply --target NC01 --confirm`
4. `bun scripts/cli.ts pikaoa attachments-backup backup-now --target NC01 --confirm`
5. `bun scripts/cli.ts pikaoa attachments-backup status --target NC01`
3. `bun scripts/cli.ts pikaoa attachments-backup init --target NC01 --confirm`
4. `bun scripts/cli.ts pikaoa attachments-backup apply --target NC01 --confirm`
5. `bun scripts/cli.ts pikaoa attachments-backup backup-now --target NC01 --confirm`
6. `bun scripts/cli.ts pikaoa attachments-backup restore-smoke --target NC01 --confirm`
7. `bun scripts/cli.ts pikaoa attachments-backup status --target NC01`
`init``backup-now``restore-smoke` 提交后均使用 `bun scripts/cli.ts pikaoa attachments-backup status --target NC01` 轮询,不改变上述主流程顺序。
只有首备 snapshot 摘要与临时目录 restore smoke 成功后,才可把 MDTODO R1.6.1.2 从 `in_progress` 更新为 `completed`