Ansible:在基于stdout值的异步任务上执行failed_when :.

时间:2016-08-21 23:09:22

标签: ansible ansible-playbook

如果之前已经回答过这个问题,请提前道歉。我确实进行了广泛的搜索,但找不到符合我标准的现有解决方案。

我正在尝试根据stdout中的值对异步任务执行failed_when:

这是我的任务:

  - name: RUN SOME TASK LOCALLY
    command: <run_some_script_here>.sh
             chdir=/task_folder/
    delegate_to: localhost
    register: task_status
    async: 3600
    poll: 0

这是我检查任务状态的地方,并且当指定的文本在stdout中时希望它失败。

 - name: CHECK TASK PROGRESS
   async_status: jid={{ task_status.ansible_job_id }}
   register: poll_status
   until: poll_status.finished
   retries: 100
   failed_when: "'ERROR. TASK FAILED.' in poll_status.stdout"

当我运行上面的剧本时,我面临来自Ansible的以下错误

TASK [CHECK TASK PROGRESS] ************************************************* 
fatal: [localhost]: FAILED! => {"failed": true, "msg": "The conditional check ''ERROR. TASK FAILED.' in poll_status.stdout' failed. The error was: error while evaluating conditional ('ERROR. TASK FAILED.' in poll_status.stdout): Unable to look up a name or access an attribute in template string ({% if 'ERROR. TASK FAILED.' in poll_status.stdout %} True {% else %} False {% endif %}).\nMake sure your variable name does not contain invalid characters like '-': argument of type 'StrictUndefined' is not iterable"}

提前致谢。

1 个答案:

答案 0 :(得分:5)

由于未定义的变量,您可以帮助避免模板崩溃 像这样更改fail_when:

failed_when: "poll_status.stdout is defined and 'ERROR' in poll_status.stdout"

如果第一轮轮询任务未完成作业,则stdout尚未填充,因此未定义,导致模板引擎崩溃。