
目前封装了 ansible playbook api,执行 playbook 后返回结果类似如下
{ "ok": { "include_tasks": "OK" }, "failed": { "获取 XX 信息[192.168.21.1]": "Unable to gather facts for non-existing VM " }, "unreachable": {}, "skipped": {}, "status": {}, "programbug": {}, "virtual_ip": "192.168.21.1", "task_id": "add_virtual-1590664169876" } 现在的需求是,根据执行每个 playbook,写入一个 log 文件,到时再通过 websocket 进行获取这个日志文件,实时再前端显示每个 task 结果,而不必等到全部执行完再获取结果,因为有时候一个 playbook 包含了好几个 task 的。
要实现这个功能应该怎么搞法。
或者各位大佬在实现 django 执行 ansible playbook 任务时候,实时返回执行信息到前端怎么搞的。
1 Haujilo 2020-05-29 00:36:52 +08:00 快糙猛的方法就是把这些 task 的 json 日志对象合并成 json 日志对象列表存储在一个 SQL 数据库的 JSON field 或者 mongo 或者其他你喜欢的存储,playbook 运行要有状态,然后前端根据状态定时轮训,状态为结束就停止轮训。 |
2 Haujilo 2020-05-29 00:39:29 +08:00 我之前做过一个,用户量不大,转化成 application/json-seq 类型直接存成进 MongoDB 的 GridFS 。 |
3 Firxiao 2020-05-29 00:45:30 +08:00 via iPhone 可以参考下 awx 的做法 |
4 ericls 2020-05-29 01:08:52 +08:00 你都有 websocket 了 为何不直接送到 websocket 呢? |
5 vanwtf 2020-05-29 08:47:33 +08:00 都用 websocketl 了,把那个 Callback 类重写一下,初始化的时候把你那个连接对象传进去,在触发调用的时候,把日志发出去就行啊,我用的事 channels 是这么写的 |