目前封装了 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 是这么写的
|