docs: record ssh mcp adapter rollout
This commit is contained in:
@@ -25717,3 +25717,58 @@ production browser smoke:
|
||||
- Ansible / PlayBook 自動執行:約 0% runtime-ready;`ansible_playbook_binary_missing` gate 未解除前不可宣稱可自動執行。
|
||||
- 24h 完整自動修復 production claim:0%;目前可視化與單點 smoke 已補強,但完整自動修復閉環仍需 24h production evidence。
|
||||
- 完整 AI 自動化管理產品化:約 99.45%;可視化接近完整,下一段應處理 MCP allowlist / adapter 失敗與 Ansible runtime gate。
|
||||
|
||||
## 2026-06-01 | 自建 MCP SSH alias / filter_name 合約修正
|
||||
|
||||
**背景**:Run detail MCP 證據矩陣上線後,production Run 顯示自建 MCP audit total `100`、success `88`、failed `12`。失敗不是「MCP 沒用」,而是兩個具體 adapter/參數契約問題:
|
||||
- `Host 'wooo' not in SSH_MCP_ALLOWED_HOSTS`
|
||||
- `'filter_name'`
|
||||
|
||||
**根因判定**:
|
||||
- Production `SSH_MCP_ALLOWED_HOSTS` 仍是既有 IP 白名單:`192.168.0.110,192.168.0.120,192.168.0.121,192.168.0.188`;不應為了 `wooo` 直接放寬 SSH scope。
|
||||
- `wooo` 在實際事件裡是 110 devops host 的別名,應在 provider / PDI 層正規化成 `192.168.0.110`。
|
||||
- `decision_manager.py` 仍有舊呼叫使用 `container_name` 呼叫 `ssh_get_container_status`;正式 schema 要求 `filter_name`,因此 audit 會記錄 `'filter_name'`。
|
||||
|
||||
**完成變更**:
|
||||
- `apps/api/src/plugins/mcp/providers/ssh_provider.py`
|
||||
- `SHORT_HOST_MAP` 增加 `wooo -> 192.168.0.110`,只做 alias normalization,不擴大 allowed hosts。
|
||||
- `ssh_get_container_status` command builder 支援舊呼叫 `container_name` / `name` fallback,缺參時回明確 `Missing filter_name for ssh_get_container_status`。
|
||||
- `apps/api/src/services/pre_decision_investigator.py`
|
||||
- `_SHORT_HOST_MAP` 增加 `wooo -> 192.168.0.110`,讓決策前調查的 MCP 參數先落在 production allowlist。
|
||||
- `apps/api/src/services/decision_manager.py`
|
||||
- `ssh_get_container_status` 呼叫改送 `filter_name`,並保留 `container_name` 相容欄位。
|
||||
- 測試新增:
|
||||
- `test_normalize_ssh_host_strips_exporter_ports_and_users` 覆蓋 `wooo` / `wooo:9100`。
|
||||
- `test_ssh_container_status_accepts_legacy_container_name_alias` 覆蓋舊呼叫相容。
|
||||
- `test_build_tool_params_maps_wooo_alias_to_allowed_ssh_host` 覆蓋 PDI 事件參數建構。
|
||||
|
||||
**驗證與部署**:
|
||||
- Local validation:
|
||||
- `DATABASE_URL=postgresql://test:test@localhost:5432/test PYTHONPATH=apps/api pytest apps/api/tests/test_ssh_provider_tools.py apps/api/tests/test_pre_decision_investigator.py -q`
|
||||
- 結果:`44 passed in 0.62s`
|
||||
- `python3 -m py_compile apps/api/src/plugins/mcp/providers/ssh_provider.py apps/api/src/services/pre_decision_investigator.py apps/api/src/services/decision_manager.py`
|
||||
- `git diff --check`
|
||||
- Commit:`87378b45 fix(api): normalize ssh mcp evidence inputs`,已推 `gitea main`。
|
||||
- Gitea:
|
||||
- `code-review #2358` success。
|
||||
- `cd #2357` success:`tests`、`build-and-deploy`、`post-deploy-checks` 全部 success。
|
||||
- Production image / rollout:
|
||||
- `awoooi-api=192.168.0.110:5000/awoooi/api:87378b452d8635b12ec23e33c95bfbedccc3de00`
|
||||
- `awoooi-worker=192.168.0.110:5000/awoooi/api:87378b452d8635b12ec23e33c95bfbedccc3de00`
|
||||
- `awoooi-web=192.168.0.110:5000/awoooi/web:87378b452d8635b12ec23e33c95bfbedccc3de00`
|
||||
- `kubectl rollout status deployment/awoooi-api deployment/awoooi-worker deployment/awoooi-web` 全部成功。
|
||||
- Production pod 內驗證:
|
||||
- `_normalize_ssh_host("wooo:9100") -> 192.168.0.110`
|
||||
- `_build_tool_params(...)["host"] -> 192.168.0.110`
|
||||
- `SSHProvider()._build_command("ssh_get_container_status", {"container_name": "awoooi-api"}) -> docker ps -a --filter name=awoooi-api`
|
||||
|
||||
**目前整體進度(本階段完成後)**:
|
||||
- MCP / 自建 MCP 可視化:約 99.2%;前端已能看見成功 / 失敗與工具來源。
|
||||
- MCP adapter 正確性:約 98.8%;本輪已修掉 `wooo` alias 與 `filter_name` 兩個已驗證失敗根因,後續需觀察新 Incident audit failed count 是否下降。
|
||||
- AwoooP Runs / Approvals / Work Items 前端同步:約 99.95%;Run detail 能追到 Incident、MCP、補救試跑與狀態鏈。
|
||||
- Telegram / DB / AwoooP / 前端 truth-chain 可視化:約 99.95%;下一段應補 callback/action 的更細歷史與 source provider log drill-down。
|
||||
- Sentry / SigNoz source correlation:約 99.0%;e2e-health 已通過,仍需逐筆 Incident source-link 持續收斂。
|
||||
- KM governance:約 82.5%;stale KM 仍需 Hermes 產草稿、owner 審核後寫入。
|
||||
- Ansible / PlayBook 自動執行:約 0% runtime-ready;`ansible_playbook_binary_missing` gate 未解除前不可宣稱自動執行完成。
|
||||
- 24h 完整自動修復 production claim:0%;本輪修的是 MCP 證據 / adapter,還不是 24h 全自動修復閉環證據。
|
||||
- 完整 AI 自動化管理產品化:約 99.5%;可視化與 MCP 技術債已再收斂一段,下一段主線應轉向 Ansible runtime gate 與 Telegram callback/action 歷史閉環。
|
||||
|
||||
Reference in New Issue
Block a user