我有兴趣了解Ansible是否可以异步运行附带的剧本吗?

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

但是,我注意到随附的用于松弛通知的手册要比预期的完成花费更长的时间,因此它可以容纳其余的手册。

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

例如,我有一个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') }}"

对于上述剧本,“Slack slack success msg”任务需要花费很长时间才能完成类似这样的简单任务。即使我已经明确指出它似乎也不是异步运行的。

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

最佳答案

include不能使用async关键字。
如果您的slack.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

附言但是我不明白,如果您之前有一个长期运行的任务(具有较高的asyncretries数字),那么单个Slack HTTP调用会如何减慢您的剧本...

关于ansible - Ansible:我们可以异步运行包含剧本吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39197845/

10-11 09:30