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

django celery 执行 ansible playbook yaml 问题

  •  
  •   fanne · 2020-04-26 16:25:22 +08:00 · 4973 次点击
    这是一个创建于 1432 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1 、封装 ansible playbook api 后,直接脚本调用,可以执行 yaml 任务。

    https://i.imgur.com/cgCNruu.png

    2 、在 django celery 进行异步任务时候,无法执行 yaml 任务

    task 内容

    https://i.imgur.com/MBi3goA.png

    views.py 进行 task 调用

    https://i.imgur.com/1lj6OUW.png

    执行结果,为空

    https://i.imgur.com/7k27yRN.png

    现在无法定位到哪里问题,望各位大老指点。

    21 条回复    2020-04-27 14:33:39 +08:00
    defunct9
        1
    defunct9  
       2020-04-26 16:40:37 +08:00
    开 ssh,让我上去看看
    话说回来,貌似我都用 awx
    fanne
        2
    fanne  
    OP
       2020-04-26 16:51:17 +08:00
    @defunct9 #1 awx 是 aws 云主机的吧,我这个就公司内网的机器
    defunct9
        3
    defunct9  
       2020-04-26 20:36:23 +08:00 via iPhone
    defunct9
        4
    defunct9  
       2020-04-26 20:36:42 +08:00 via iPhone
    @fanne AWX 是一个开源的 web 应用,并为 ansible 的任务引擎提供用户接口和 REST API 。它是 ansible Tower 的开源版本。
    honmaple
        5
    honmaple  
       2020-04-26 21:25:02 +08:00
    @fanne ansible 使用的是多进程模式,celery 里执行 ansible 需要设置 PYTHONOPTIMIZE=1,以前有遇到过,不知道是不是一样的问题
    zhoudaiyu
        6
    zhoudaiyu  
       2020-04-26 21:32:30 +08:00

    我当时也是 celery+ ansible,后台任务执行有些问题,加上这个就好了,仅供参考
    fanne
        7
    fanne  
    OP
       2020-04-26 22:47:09 +08:00
    @honmaple #5 是的,后面采用了这个环境变量后就 OK 了
    fanne
        8
    fanne  
    OP
       2020-04-26 22:47:52 +08:00
    @zhoudaiyu #6 好的,我研究下看看
    fanne
        9
    fanne  
    OP
       2020-04-26 22:52:42 +08:00
    @defunct9 #4 好吧,涨知识了
    helloZwq
        10
    helloZwq  
       2020-04-27 08:47:20 +08:00
    @zhoudaiyu
    # 非常神奇的一句话
    current_process()._config = {'semprefix': '/mp'}
    我也是这么解决的 有大佬能分析下原因么
    zhoudaiyu
        11
    zhoudaiyu  
       2020-04-27 09:46:36 +08:00 via iPhone
    @helloZwq 好像是 celery 用的 multiprocess 和 ansible 里的一些东西有啥冲突
    fanne
        12
    fanne  
    OP
       2020-04-27 09:47:57 +08:00
    @helloZwq #10
    @zhoudaiyu #6 current_process()._config = {'semprefix': '/mp'}
    固定语句么,哪里引入的这个函数的 current_process ()
    zhoudaiyu
        13
    zhoudaiyu  
       2020-04-27 09:50:18 +08:00
    @fanne from multiprocessing import current_process
    wampyl
        14
    wampyl  
       2020-04-27 10:34:00 +08:00
    问大家一个问题,如果想让 ansible 按照顺序执行任务(根据上一个任务的返回值来判断是否执行下一个任务)的话,是不是可以用 celery chain 啊
    fanne
        15
    fanne  
    OP
       2020-04-27 10:49:58 +08:00
    @honmaple #5
    @zhoudaiyu #6

    另外请教大佬们一个问题,ansible 2.8 的 playbook api 关于 extra_vars

    我按照 2.7 的方式传递,

    ```bash
    def playbookrun(self,playbook_path,extra_vars=None):
    context.CLIARGS = ImmutableDict(self.options)
    if extra_vars:self.variable_manager.extra_vars = extra_vars ##<<===在这里传入
    pbex = PlaybookExecutor(playbooks=playbook_path,
    inventory=self.inventory,
    variable_manager=self.variable_manager,
    loader=self.loader,
    passwords=self.passwords)
    pbex._tqm._stdout_callback = self.pb_results_callback
    pbex.run()
    ```


    提示错误,找了一圈,没看到怎么传的

    ```
    if extra_vars:self.variable_manager.extra_vars = extra_vars
    AttributeError: can't set attribute
    ```
    zhoudaiyu
        16
    zhoudaiyu  
       2020-04-27 10:58:40 +08:00
    @fanne 我用的 2.6 版本的 ansible

    from ansible.inventory.manager import InventoryManager

    variable_manager = VariableManager(loader=loader, inventory=inventory)
    variable_manager.extra_vars = self._evars #这里传入其他参数
    fanne
        17
    fanne  
    OP
       2020-04-27 11:16:45 +08:00
    @zhoudaiyu #16
    ansible 2.8 的
    self.variable_manager._extra_vars = extra_vars
    这样 OK 了

    ansible 2.4 2.6 2.7 2.8,每一个版本都在改 api,也是醉了
    fanne
        18
    fanne  
    OP
       2020-04-27 11:42:06 +08:00
    再咨询各位大佬一个问题,celery 进行异步执行时候,当改了 task 任务内容后,怎么使得 celery 自动生效的
    当前都是需要重启一下 celery 才生效的。

    @zhoudaiyu #6
    @honmaple #5
    @defunct9 #4
    zhoudaiyu
        19
    zhoudaiyu  
       2020-04-27 12:02:09 +08:00 via iPhone
    @fanne 改代码?
    fanne
        20
    fanne  
    OP
       2020-04-27 14:25:06 +08:00
    @zhoudaiyu #19
    修改 @task 里面的内容。修改后要重启下 celery 方可生效。
    zhoudaiyu
        21
    zhoudaiyu  
       2020-04-27 14:33:39 +08:00 via iPhone
    @fanne 好像没有热加载的方法吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3512 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:04 · PVG 19:04 · LAX 04:04 · JFK 07:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.