使用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命令返回非零返回码,或者在30秒内“ my_task_results.finished”不为真,则async_status任务将失败。
不幸的是,如果未及时满足“直到”条件,错误消息将无济于事。返回的值包括:
尤其是“所有项目已完成”消息具有误导性。
在这种情况下,是否可以产生有意义的错误消息?我可以添加“ failed_when”选项,并带有附加的“ Fail”任务来检查条件(完成== 0)以显示自定义错误消息(某些“长时间运行的任务未及时完成”的效果) ,但这似乎并不雅致。
答案 0 :(得分:0)
在这种情况下,我认为您的解决方案会很好。
请查看Ansible官方文档: https://docs.ansible.com/ansible/2.5/user_guide/playbooks_loops.html#id10
在这里您可以找到您的方法:
- name: Fail if return code is not 0
fail:
msg: "The command ({{ item.cmd }}) did not have a 0 return code"
when: item.rc != 0
loop: "{{ echo.results }}"
有时候我需要更多美感-描述性更强的输出我正在使用模板/文件,然后在任务中使用注册的变量,即可自定义输出。
For example:
- name:
template:
...
- shell: cat <template_location>.yml
register: stack_test
- debug:
msg: "{{ stack_test.stdout }}"