【发布时间】: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