超过重试次数时,从async_status循环中获取有意义的错误消息

时间:2018-12-12 18:31:05

标签: ansible

使用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任务将失败。

不幸的是,如果未及时满足“直到”条件,错误消息将无济于事。返回的值包括:

  • 已更改:错误
  • 消息:“所有项目均已完成”
  • 结果:[上面的shell任务的结果数组]
  • 已更改:错误
  • 失败:是
  • 完成了:0

尤其是“所有项目已完成”消息具有误导性。

在这种情况下,是否可以产生有意义的错误消息?我可以添加“ failed_when”选项,并带有附加的“ Fail”任务来检查条件(完成== 0)以显示自定义错误消息(某些“长时间运行的任务未及时完成”的效果) ,但这似乎并不雅致。

1 个答案:

答案 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 }}"