ansible playbook 通过封装 api 后执行日志问题请教

2020-05-28 19:56:20 +08:00
 fanne

目前封装了 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 任务时候,实时返回执行信息到前端怎么搞的。

2627 次点击
所在节点    Django
5 条回复
Haujilo
2020-05-29 00:36:52 +08:00
快糙猛的方法就是把这些 task 的 json 日志对象合并成 json 日志对象列表存储在一个 SQL 数据库的 JSON field 或者 mongo 或者其他你喜欢的存储,playbook 运行要有状态,然后前端根据状态定时轮训,状态为结束就停止轮训。
Haujilo
2020-05-29 00:39:29 +08:00
我之前做过一个,用户量不大,转化成 application/json-seq 类型直接存成进 MongoDB 的 GridFS 。
Firxiao
2020-05-29 00:45:30 +08:00
可以参考下 awx 的做法
ericls
2020-05-29 01:08:52 +08:00
你都有 websocket 了 为何不直接送到 websocket 呢?
vanwtf
2020-05-29 08:47:33 +08:00
都用 websocketl 了,把那个 Callback 类重写一下,初始化的时候把你那个连接对象传进去,在触发调用的时候,把日志发出去就行啊,我用的事 channels 是这么写的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/676424

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX