Ansible:我们可以异步运行一个include剧本吗?



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

基本上我想做的是运行一个任务"立即忘记,稍后再检查"。当我稍后检查它时,我还想发送结果的空闲通知。

然而,我注意到slack通知所包含的剧本需要比预期更长的时间来完成,因此它占用了剧本的其余部分。

我想要的是异步包含的剧本松弛通知,使当前剧本继续。

例如,我有一个剧本。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

我的松弛。Yml文件看起来像:

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

在上面的剧本中,对于这样一个简单的任务,"发送slack成功消息"任务需要花费非常长的时间来执行。它似乎不是异步运行的,尽管我已经明确地说过它应该异步运行。

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

include不能使用async关键字
如果你懈怠。Yml就是这么简单,只需用一个调用替换你的include内容:

- 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

注:但我不明白如何是单一的Slack http调用减慢你的剧本,如果你有一个长期运行的任务(高asyncretries数字)就在它之前…

相关内容

  • 没有找到相关文章

最新更新