diff --git a/.agents/skills/04-awoooi-devops-commander.md b/.agents/skills/04-awoooi-devops-commander.md index 33c70bcb..a968d7a4 100644 --- a/.agents/skills/04-awoooi-devops-commander.md +++ b/.agents/skills/04-awoooi-devops-commander.md @@ -36,6 +36,7 @@ | v2.3 | 2026-03-31 | Claude Code | **📅 Phase 21 定期報告機制規劃 (Weekly/Daily E2E/K3s Report)** | | v2.4 | 2026-03-31 | Claude Code | **🔧 OTEL gRPC vs HTTP 端點區分 (K8s:24317, CI/CD:24318)** | | v2.5 | 2026-04-09 | Claude Sonnet 4.6 | **🔴 SSH 自動修復全鏈路 — 雙主機 E2E 閉環 + 12 Bug 修復** | +| v2.6 | 2026-04-11 | Claude Sonnet 4.6 | **Sprint B-1 Ansible IaC 骨架 + Architecture Review 安全修復** | --- @@ -1276,3 +1277,67 @@ links = DeepLinking.get_all_links( ❌ StrictHostKeyChecking=no(舊設定) ✅ known_hosts Secret 已建立,改用 StrictHostKeyChecking=yes ``` + +--- + +## 🏗️ Sprint B — Ansible Host IaC (2026-04-11) + +> **ADR**: ADR-069 Sprint B +> **狀態**: B-1 ✅ 骨架完成;B-2/B-3 待開工 + +### 目錄結構 + +``` +infra/ansible/ +├── inventory/ +│ ├── hosts.yml # 5 主機(110/188/120/121/112) +│ └── group_vars/ +│ ├── all.yml # 共用變數(github_runner_count 等) +│ ├── host_110.yml # swap/docker/keepalived BACKUP +│ └── host_188.yml # docker/keepalived MASTER +├── playbooks/ +│ ├── site.yml # 全站入口 +│ ├── 110-devops.yml # 110 預期狀態收斂 +│ ├── 188-ai-web.yml # 188 預期狀態收斂 +│ └── nginx-sync.yml # Nginx conf 同步(188 single source of truth) +└── roles/ + ├── nginx/ + │ ├── tasks/main.yml + │ └── templates/188-all-sites.conf.j2 + ├── docker-compose-service/tasks/main.yml + ├── swap/tasks/main.yml + └── pm2-service/tasks/main.yml +``` + +### 執行方式 + +```bash +# 全站收斂 +ansible-playbook -i inventory/hosts.yml playbooks/site.yml + +# 單主機 +ansible-playbook -i inventory/hosts.yml playbooks/110-devops.yml +ansible-playbook -i inventory/hosts.yml playbooks/188-ai-web.yml + +# nginx 同步(需 vault password) +ansible-playbook -i inventory/hosts.yml playbooks/nginx-sync.yml --tags 188 + +# 乾跑 +ansible-playbook -i inventory/hosts.yml playbooks/site.yml --check +``` + +### SSH MCP Provider 安全規則 (ADR-071 MCP-2a) + +Architecture Review 發現的安全要求(2026-04-11): + +1. **所有字串參數必須通過 `_validate_param()` 白名單驗證** + - container_name/service: `[a-zA-Z0-9._-]{1,128}` + - compose_dir: 必須以 `/opt/` 或 `/srv/` 開頭,禁止 `..` + - domain: FQDN 白名單 + - 數值參數: int() + 上下限夾緊 + +2. **known_hosts 驗證** + - 設定 `SSH_MCP_KNOWN_HOSTS_FILE` 環境變數指向 `ssh-keyscan` 產生的文件 + - 未設定時會 warning log,但不阻擋(內網快速啟動模式) + +3. **群組 B 工具需 trust_score >= 0.8**(硬編碼守衛) diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index d72c84d4..a0c6a258 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -6,6 +6,28 @@ --- +## 📍 當前狀態 (2026-04-11 — Sprint B-1 完成 + 架構Review修復) + +### Sprint B-1 Ansible IaC + Architecture Review (2026-04-11) + +| 項目 | 說明 | Commit | +|------|------|--------| +| B-1 Ansible IaC | inventory(5主機) + 4 playbooks + 4 roles 完整骨架 | 0139aa7 | +| ansible-lint CI | `.gitea/workflows/ansible-lint.yml` infra/** 觸發 | 0139aa7 | +| Architecture Review | `feature-dev:code-reviewer` 全面審查,5 項高信心問題 | — | +| fix: command injection | ssh_provider `_validate_param()` 白名單驗證 | 2af4dff | +| fix: known_hosts | SSH_MCP_KNOWN_HOSTS_FILE 環境變數 + warning log | 2af4dff | +| fix: 模組副作用 | ALERT_EVENT_TYPES 移回 repository 層靜態定義 | 2af4dff | +| fix: create_task競爭 | KM 轉換改 await + try/except,不再靜默丟失 | 2af4dff | +| fix: ORM懶載入 | convert() 加頂層 try/except,錯誤 error log | 2af4dff | + +**⚠️ 待首席架構師確認**: `2af4dff` 觸發橙區警告(telegram_gateway.py) +確認後執行: `git push gitea main` + +**架構 Review 規則**: 新建 `feedback_architecture_review_gates.md` + +--- + ## 📍 當前狀態 (2026-04-11 夜 — ADR-071 第一批 + MCP Phase 2 全完成) ### ADR-071 第一批 + MCP Phase 2 (2026-04-11 深夜)