【问题标题】:Getting a meaningful error message from async_status loop when retries exceeded超出重试次数时从 async_status 循环中获取有意义的错误消息
【发布时间】: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


    【解决方案1】:

    我认为在这种情况下您的解决方案会很好。

    请查看官方 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 }}"
    

    【讨论】:

    • 不幸的是,此方法不适用于异步任务。为异步任务返回的唯一变量是 'ansible_job_id'、'changed'、'failed'、'finished'、'item'、'results_file' 和 'started'。只有在任务完成后,其他变量才可见。我当然可以报告该任务没有及时完成,但我无法确定有关该任务的任何其他信息,例如命令、标准输出、标准错误等。如果只有某种方法至少可以从异步任务...
    • @FSchwartz 似乎 async_status 可以轮询并填充包含 stdout_lines 的结构。但是,我不知道如何让 async_status 任务在其自己的注册变量上循环并输出
    猜你喜欢
    • 1970-01-01
    • 2011-02-08
    • 2020-06-03
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多