V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fanne
V2EX  ›  Django

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

  •  
  •   fanne · 2020-05-28 19:56:20 +08:00 · 2812 次点击
    这是一个创建于 1634 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    5 条回复    2020-05-29 08:47:33 +08:00
    Haujilo
        1
    Haujilo  
       2020-05-29 00:36:52 +08:00
    快糙猛的方法就是把这些 task 的 json 日志对象合并成 json 日志对象列表存储在一个 SQL 数据库的 JSON field 或者 mongo 或者其他你喜欢的存储,playbook 运行要有状态,然后前端根据状态定时轮训,状态为结束就停止轮训。
    Haujilo
        2
    Haujilo  
       2020-05-29 00:39:29 +08:00
    我之前做过一个,用户量不大,转化成 application/json-seq 类型直接存成进 MongoDB 的 GridFS 。
    Firxiao
        3
    Firxiao  
       2020-05-29 00:45:30 +08:00 via iPhone
    可以参考下 awx 的做法
    ericls
        4
    ericls  
       2020-05-29 01:08:52 +08:00
    你都有 websocket 了 为何不直接送到 websocket 呢?
    vanwtf
        5
    vanwtf  
       2020-05-29 08:47:33 +08:00
    都用 websocketl 了,把那个 Callback 类重写一下,初始化的时候把你那个连接对象传进去,在触发调用的时候,把日志发出去就行啊,我用的事 channels 是这么写的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5395 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:28 · PVG 17:28 · LAX 01:28 · JFK 04:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.