From b7c4d90b6b19837bf1660c4d3244d948cd4902cd Mon Sep 17 00:00:00 2001 From: attacker Date: Sun, 14 Jun 2026 23:14:54 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E6=97=A5=E5=BF=97=20=E2=80=94=20=E8=AE=B0=E5=BD=95=20Ansible?= =?UTF-8?q?=20Playbook=20=E5=85=A8=E6=A0=88=20CRUD+=E7=9C=9F=E5=AE=9E?= =?UTF-8?q?=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/dev-log.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/docs/dev-log.md b/docs/dev-log.md index e18e0fc..614f334 100644 --- a/docs/dev-log.md +++ b/docs/dev-log.md @@ -461,3 +461,45 @@ cd ~/devops/aiops - K8s拓扑图增加缩放/拖拽交互 - 定时任务创建对话框增加目标服务器选择(当前仅本地执行) - 脚本编辑器增加在线编辑+保存功能(当前新建对话框无编辑入口) + +## 2026-06-14 23:15 自动推进 + +- **任务**: Ansible Playbook 全栈 CRUD + 真实执行 — 替换 mock 为后端持久化(最后一个 mock→real 模块自动化运维 AnsibleManager) +- **修改**: + - `backend/internal/models/automation.go` — Playbook 模型新增 `Category string` + `Tags string`(JSON数组) 字段;新增 `CreatePlaybookRequest` 请求 struct + - `backend/internal/api/handlers/automation.go`: + - 新增 `randomCode(prefix)` 辅助函数:crypto/rand 生成 4 字节随机 hex + 时间戳,解决 `pb-%d` 时间戳碰撞导致 UNIQUE constraint 失败 + - 新增 `runPlaybookLocal(content, inventory, timeout)` — 写临时 YAML 文件 + `ansible-playbook -i localhost, --connection=local` 执行,采集 stdout+stderr/退出码/耗时;二进制不存在时输出友好提示 + - 新增 6 个 handler:`ListPlaybooks`/`GetPlaybook`/`CreatePlaybook`/`UpdatePlaybook`/`DeletePlaybook`/`ExecutePlaybook`(Execute 创建 TaskExecution(task_type=playbook) 记录 + 本地执行 + 更新 run_count) + - `backend/internal/api/routes/routes.go` — 注册 `/playbooks` 路由组(GET/POST/GET:id/PUT:id/DELETE:id/POST:id/execute) + - `frontend/src/services/api.ts` — `ansibleApi` 从 mock 重写为真实 `/playbooks` 后端调用(getPlaybooks/getPlaybook/createPlaybook/updatePlaybook/deletePlaybook/executePlaybook) + - `frontend/src/components/automation/AnsibleManager.tsx` 完全重写(705→480行): + - Playbook 管理 tab:真实数据卡片列表(id/name/category徽章/tags徽章/run_count/timeout)+ 搜索 + 分类筛选 + - 新建/编辑对话框复用(编辑模式预填数据)— **新增编辑入口**(原仅有新建无编辑) + - 查看内容对话框:终端风格 YAML 查看器 + 快捷编辑按钮 + - 执行:ConfirmProvider 确认 + 本地 ansible-playbook 执行 + toast 结果反馈(成功/失败+耗时) + - 执行记录 tab:真实 TaskExecution 记录(#/Playbook/状态/开始时间/耗时/查看日志) + - 执行日志查看器:黑底绿字终端风格展示完整输出 + - 4 个统计卡片(总数/执行中/今日成功/今日失败)基于真实执行记录 + - 移除原 inventory 占位 tab(无后端支持,避免非功能按钮,符合用户偏好) + - tags 后端 JSON 字符串 ↔ 前端 string[] 互转映射(mapPlaybook 解析 + tagsToJson 序列化) +- **结果**: + - 后端 `go build ./...` 编译通过 ✅ + - 前端 `npx tsc --noEmit` + `npm run build` 通过 ✅ + - API 验证:POST /playbooks 创建4条种子(Nginx部署/安全加固/数据库备份/NTP配置)✅ + - API 验证:PUT /playbooks/:id 更新成功(category/tags/description/timeout)✅ + - API 验证:POST /playbooks/:id/execute 创建执行记录 status=failed(macOS无ansible-playbook,输出友好提示)✅ + - API 验证:GET /task-executions?task_type=playbook 返回真实执行记录 ✅ + - 浏览器验证:4 个 Playbook 卡片正确展示(分类徽章/标签徽章/执行次数/超时)✅ + - 浏览器验证:编辑对话框预填数据(名称/分类/描述/标签/超时/完整YAML内容)✅ + - 浏览器验证:查看内容终端风格展示完整YAML ✅ + - 浏览器验证:执行记录tab展示真实记录(任务名/失败状态/开始时间/日志查看)✅ + - 浏览器验证:执行日志对话框展示友好错误信息("无法执行 ansible-playbook...请安装 ansible")✅ + - 浏览器验证:统计卡片显示真实数值(4/0/0/1)✅ + - 浏览器验证:无 console 错误 ✅ + - git push origin master 成功 (commit ae6af93) ✅ +- **下一步建议**: + - K8s 拓扑图增加缩放/拖拽交互(当前为静态 SVG) + - 定时任务创建对话框增加目标服务器选择(当前仅本地执行) + - 脚本编辑器增加在线编辑+保存功能(当前新建对话框无独立编辑入口) + - CabinetView 仍使用 mock 数据(但未在 App.tsx 路由中使用,低优先级)