feat(api): ActionType.SSH_COMMAND + auto_repair_service SSH分支 (Task 12)
- playbook.py: 新增 SSH_COMMAND ActionType - auto_repair_service._execute_step: SSH_COMMAND 分支,格式 layer/component Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -47,6 +47,7 @@ class ActionType(str, Enum):
|
||||
KUBECTL = "kubectl" # Kubernetes 命令
|
||||
SCRIPT = "script" # 腳本執行
|
||||
MANUAL = "manual" # 需人工操作
|
||||
SSH_COMMAND = "ssh_command" # 2026-04-05 Claude Code: 主機層 SSH 修復 (Sprint 3)
|
||||
|
||||
|
||||
class RiskLevel(str, Enum):
|
||||
|
||||
@@ -497,6 +497,20 @@ class AutoRepairService:
|
||||
logger.warning("action_executor_not_available")
|
||||
return "SKIPPED (executor not available)"
|
||||
|
||||
# 2026-04-05 Claude Code: SSH_COMMAND — 主機層修復 (Sprint 3 Host Auto-Repair)
|
||||
if step.action_type == ActionType.SSH_COMMAND:
|
||||
from src.services.host_repair_agent import HostRepairAgent
|
||||
agent = HostRepairAgent()
|
||||
# step.command 格式: "<layer>/<component>" 例如 "docker-110/sentry"
|
||||
try:
|
||||
layer, component = step.command.split("/", 1)
|
||||
except ValueError:
|
||||
return f"FAILED: invalid ssh_command format '{step.command}' (expected layer/component)"
|
||||
result = await agent.repair(layer=layer, component=component)
|
||||
if result.success:
|
||||
return f"SUCCESS: {result.output}"
|
||||
return f"FAILED: {result.error}"
|
||||
|
||||
return "UNKNOWN_ACTION_TYPE"
|
||||
|
||||
# === ADR-037: Tier-based Repair (2026-03-29) ===
|
||||
|
||||
Reference in New Issue
Block a user