docs: 更新开发日志 — 记录 Ansible Playbook 全栈 CRUD+真实执行

This commit is contained in:
attacker committed 2026-06-14 23:14:54 +08:00
1 parent ae6af93360
commit b7c4d90b6b
1 file changed
+42
+42
View File
@@ -461,3 +461,45 @@ cd ~/devops/aiops
- K8s拓扑图增加缩放/拖拽交互 - 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 路由中使用,低优先级)