美文网首页ansible
ansible任务的异步执行

ansible任务的异步执行

作者: 茶客furu声 | 来源:发表于2016-07-12 01:40 被阅读5224次

ansible方便在于能批量下发,并返回结果和呈现。简单、高效。
但有的任务执行起来却不那么直接,可能会花比较长的时间,甚至可能会比ssh的超时时间还要长。这种情况任务是不是没法执行了?
ansible考虑到了这种情况,官方文档介绍了这个问题的解决方法,就是让下发的任务执行的连接变为异步:任务下发之后,长连接不再保持,而是每隔一段时间轮询结果,直到任务结束。
这是官网相关的介绍
他们在playbook的任务中加入两个参数:async和poll。

  • async参数值代表了这个任务执行时间的上限值。即任务执行所用时间如果超出这个时间,则认为任务失败。此参数若未设置,则为同步执行。
  • poll参数值代表了任务异步执行时轮询的时间间隔。
    官方给出例子:
  ----
    hosts: all
    remote_user: root
    tasks:
      - name: simulate long running op (15 sec), wait for up to 45 sec, poll every 5 sec
        command: /bin/sleep 15
        async: 45
        poll: 5

这时候已经不怕任务超时了。可以执行一个45s的任务,当然也可以根据需要自己设置。另外,如果poll为0,就相当于一个不关心结果的任务。

如果还想要更方便地看轮询结果,ansible还提供了这个模块async_status。

  ---
    # Requires ansible 1.8+
    - name: 'YUM - fire and forget task'
      yum: name=docker-io state=installed
      async: 1000
      poll: 0
      register: yum_sleeper

    - name: 'YUM - check on fire and forget task'
      async_status: jid={{ yum_sleeper.ansible_job_id }}
      register: job_result
      until: job_result.finished
      retries: 30

第一个job执行异步任务,并且注册了一个名字叫yum_sleeper,用于提供给第二个job作为轮询对象,并且poll设为0,它自己不再轮询。
第二个job使用async_status模块,进行轮询并返回轮询结果。准备检查30次。结果如下:

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
ok: [cloudlab001]

TASK [YUM - fire and forget task] **********************************************
ok: [cloudlab001]

TASK [YUM - check on fire and forget task] *************************************
FAILED - RETRYING: TASK: YUM - check on fire and forget task (29 retries left).
FAILED - RETRYING: TASK: YUM - check on fire and forget task (28 retries left).
FAILED - RETRYING: TASK: YUM - check on fire and forget task (27 retries left).
FAILED - RETRYING: TASK: YUM - check on fire and forget task (26 retries left).
FAILED - RETRYING: TASK: YUM - check on fire and forget task (25 retries left).
FAILED - RETRYING: TASK: YUM - check on fire and forget task (24 retries left).
changed: [cloudlab001]

PLAY RECAP *********************************************************************
cloudlab001                : ok=3    changed=1    unreachable=0    failed=0

相关文章

  • ansible任务的异步执行

    ansible方便在于能批量下发,并返回结果和呈现。简单、高效。但有的任务执行起来却不那么直接,可能会花比较长的时...

  • Ansible常用功能说明 [异步、并发、委托等]

    Ansible的同步模式与异步模式同步模式: 如果节点数太多,ansible无法一次在所有远程节点上执行任务,那么...

  • python ansible celery 实现任务异步执行(A

    项目背景 在公司内部运维自动化平台开发中,使用 ansible + celery 来实现添加主机之后,异步的更新主...

  • 【javaScript练习】2021-02-23

    javaScript 作用域,异步执行,requestAnimationFrame 微任务,宏任务,异步执行 Ar...

  • js执行顺序总结

    流程图 首先执行同步任务,异步任务会插入到异步队列中。同步任务执行完毕,查询是否有异步任务,回到主任务执行。 微任...

  • 深入浅出Javascript事件循环机制-上(转)

    浅薄概念 Javascript是单线程,执行任务时,分同步任务和异步任务,执行同步任务时放入栈中执行,执行异步任务...

  • 异步任务执行

    《深入理解ES6》阅读随笔 在使用 JavaScript 写程序的过程中,会遇到一些异步调用的情况,如果只是单层的...

  • NSQ 消息队列

    异步任务与消息队列 同步任务:一定要等任务执行完了,得到结果,才执行下一个任务。 异步任务:不用等任务执行完,直接...

  • 02、NodeJS-基础

    一、异步编程 异步操作 Node大量采用异步操作,即任务不是马上执行,而是直接插入任务队列的尾部,等前面任务执行完...

  • 02、NodeJS-基础

    一、异步编程 异步操作 Node大量采用异步操作,即任务不是马上执行,而是直接插入任务队列的尾部,等前面任务执行完...

网友评论

    本文标题:ansible任务的异步执行

    本文链接:https://www.haomeiwen.com/subject/vobjjttx.html