【问题标题】:Ansible: Can we run an include playbook Asynchronously?Ansible:我们可以异步运行包含剧本吗?
【发布时间】:2017-01-04 23:43:37
【问题描述】:

我有兴趣了解 Ansible 是否可以异步运行包含的剧本?

基本上我想要做的是运行一个任务“触发并忘记,稍后再检查”。当我稍后检查它时,我还想发送一个带有结果的松弛通知。

但是我注意到包含的松弛通知剧本比预期的完成时间要长一些,因此它支撑了剧本的其余部分。

我想要的是异步包含的 playbook 以获取松弛通知,以便当前的 playbook 继续。

例如,我有一个 playbook.yml 文件,如下所示:

- hosts: localhost

  tasks:
  - name: Fire and forget task
    shell: some_task.sh
           chdir=/tmp/
    register: fire_and_forget_task
    async: 3600
    poll: 0


  - name: Check on fire and forget task
    async_status: jid={{ fire_and_forget_task.ansible_job_id }}
    register: task_status
    until: task_status.finished
    retries: 100
    ignore_errors: yes


  - name: Send slack success msg
    include: slack.yml msg="Fire and forget task SUCCESS"
    when: task_status.stdout is defined and 
          'SUCCESS' in fire_and_forget_task.stdout
    async: 3600
    poll: 0


  - name: Send slack failed msg
    include: slack.yml msg="Fire and forget task FAILED"
    when: task_status.stdout is defined and 
          'FAILED' in fire_and_forget_task.stdout
    async: 3600
    poll: 0

我的 slack.yml 文件如下所示:

  - name: Send notification message via Slack
    local_action:
      module: slack
      token: <REDACTED>
      attachments:
      - text: "{{ msg }}"
        color: "#83F52C"
        title: "Ansible Status {{ lookup('pipe','date') }}"

使用上面的剧本,“Send slack success msg”任务需要非常长的时间来执行这样一个简单的任务。即使我已经明确指出它应该异步运行,它似乎也没有异步运行。

实现预期结果的最佳方法是什么? 谢谢。

【问题讨论】:

    标签: ansible ansible-playbook ansible-2.x


    【解决方案1】:

    include 不能使用async 关键字。
    如果您的 slack.yml 就这么简单,只需用一个调用替换您的包含内容:

    - name: Send notification message via Slack
      local_action:
        module: slack
        token: <REDACTED>
        attachments:
        - text: "Task result {{ (task_status.stdout is defined and 'SUCCESS' in task_status.stdout) | ternary('SUCCESS','FAILURE') }}"
          color: "#83F52C"
          title: "Ansible Status {{ lookup('pipe','date') }}"
      async: 3600
      poll: 0
    

    附:但我不明白如果你有一个长时间运行的任务(asyncretries 数字很高)就在它之前,单个 Slack HTTP 调用会减慢你的剧本......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 2018-11-05
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多