Ansible:我们可以异步运行include playbook吗?

时间:2016-08-29 02:46:39

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

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

基本上我要做的就是执行任务"点火,忘记,稍后再检查。"当我稍后检查它时,我也想发送一个松散的通知结果。

但是我注意到包含松弛通知的剧本需要比预期更长的时间来完成,因此它可以保持剧本的其余部分。

我想要的是同步所包含的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') }}"

通过上面的剧本,&#34;发送松弛的成功消息&#34;任务需要很长时间来执行这样的简单任务。它似乎没有异步运行,即使我已经明确说明它应该。

达到预期结果的最佳方法是什么? 谢谢。

1 个答案:

答案 0 :(得分:2)

3无法使用include关键字 如果你的slack.yml就这么简单,只需用一个电话替换你的包含东西:

async

P.S。但是我不明白如果你在它之前有一个长期运行的任务(高- 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 async个数字),单个Slack HTTP调用会如何减慢你的剧本... < / p>