fix(auto_execute): 安全守衛 — 拒絕執行含 unknown 或未解析 placeholder 的 action
主機層告警(HostHighCpuLoad、DockerContainerUnhealthy 等)沒有對應
K8s deployment 名稱,affected_services=[],導致 _target='unknown',
執行 'kubectl rollout restart deployment unknown' 這種無意義命令。
修復: 替換後若 action 仍含 'unknown' 或 <...>/{...} 格式,
直接拒絕執行並通知人工介入,不允許帶 placeholder 的命令上線。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -678,6 +678,25 @@ class DecisionManager:
|
||||
action = _re.sub(r"<deployment_name>", _target, action)
|
||||
action = _re.sub(r"<[^>]+>", _target, action)
|
||||
|
||||
# 安全守衛: 替換後仍含 "unknown" 或未替換的 <...>/{...} → 拒絕執行
|
||||
# 主機層告警(HostHighCpuLoad 等)沒有 deployment 名稱,不應盲目執行
|
||||
if "unknown" in action or _re.search(r"[<{][^>}]+[>}]", action):
|
||||
logger.warning(
|
||||
"auto_execute_blocked_unresolved_placeholder",
|
||||
incident_id=incident.incident_id,
|
||||
action=action,
|
||||
target=_target,
|
||||
reason="action 含未解析的 placeholder 或 unknown,拒絕執行",
|
||||
)
|
||||
token.state = DecisionState.ERROR
|
||||
token.error = f"Auto-execute blocked: unresolved placeholder in action: {action[:80]}"
|
||||
await self._save_token(token)
|
||||
asyncio.create_task(
|
||||
_push_auto_repair_result(incident, action, success=False,
|
||||
error="無法確認 deployment 名稱,請人工確認後手動執行")
|
||||
)
|
||||
return
|
||||
|
||||
try:
|
||||
# 延遲導入避免循環依賴
|
||||
from src.models.approval import ApprovalRequest, ApprovalStatus
|
||||
|
||||
Reference in New Issue
Block a user