Ansible:shell命令返回空白是致命的

时间:2016-09-06 22:09:46

标签: shell ansible ansible-playbook ansible-2.x

我正在尝试使用Ansible运行一个简单的tail命令。迭代3个字符串,直到找不到所有字符串。如果发现在tail命令上循环,直到找不到所有。

   - name: Tail the logs for string
     shell: "tail -10 /path/to/log/file.log | egrep 'STRING1|STRING2|STRING3'"
     register: tail
     until: "'STRING1' and 'STRING2' and 'STRING3' not in tail.stdout_lines" 
     retries: 10
     delay: 5

当我运行上述任务并且没有任何东西可以返回时,它会以致命错误退出。即使这是成功案例。

fatal: [testserver]: FAILED! => {"changed": true, "cmd": "tail -10 /path/to/log/file.log | egrep 'STRING1|STRING2|STRING3'", "delta": "0:00:00.012770", "end": "2016-09-07 07:44:35.684238", "failed": true, "invocation": {"module_args": {"_raw_params": "tail -10 /path/to/log/file.log | egrep 'STRING1|STRING2|STRING3'", "_uses_shell": true, "chdir": null, "creates": null, "executable": null, "removes": null, "warn": true}, "module_name": "command"}, "rc": 1, "start": "2016-09-07 07:44:35.671468", "stderr": "", "stdout": "", "stdout_lines": [], "warnings": []}

我不确定为什么它会以致命的状态结束。

2 个答案:

答案 0 :(得分:2)

grep在没有匹配任何内容时返回非零值。如果要覆盖其退出状态:

shell: "tail -10 /path/to/log/file.log | egrep 'STRING1|STRING2|STRING3' ||:"

答案 1 :(得分:0)

在解决了tail命令之后,感谢来自@ charles-duffy的建议,问题仍然存在于循环条件中。

这是正确的条件: until: '"STRING1" not in tail.stdout and "STRING2" not in tail.stdout and "STRING3" not in tail.stdout'

我还使用tail.stdout代替tail.stdout_lines

由于