【发布时间】:2018-12-12 18:31:05
【问题描述】:
使用 Ansible 1.7,我在一个循环中执行多个异步任务,并使用 async_status 以 30 秒超时检查它们的状态:
- name: Some long-running task
shell: "./some_task {{ item }}"
loop: "{{ list_of_params }}"
async: 30
poll: 0
register: my_task
- name: Check async tasks for completion
async_status:
jid: "{{ item.ansible_job_id }}"
register: my_task_results
until: my_task_results.finished
retries: 30
delay: 1
loop: "{{ my_task.results }}"
这很好用,如果任何 shell 命令返回非零返回码,或者如果“my_task_results.finished”在 30 秒内不为真,则 async_status 任务会失败。
不幸的是,当“直到”条件没有及时满足时,错误消息没有帮助。返回值包括:
- 更改:错误
- msg:“所有项目已完成”
- 结果:[上述 shell 任务的结果数组]
- 更改:错误
- 失败:真
- 完成:0
特别是,“所有项目已完成”消息具有误导性。
在这种情况下,有没有办法产生有意义的错误消息?我可以添加一个“failed_when”选项,以及一个额外的“Fail”任务来检查条件(已完成 == 0)以显示自定义错误消息(“某些长时间运行的任务没有及时完成”的效果) ,但这似乎不优雅。
【问题讨论】:
标签: ansible