当 grep 结果为空时,Ansible shell 模块返回错误
我正在使用 Ansible 的 shell 模块来查找特定字符串并将其存储在变量中.但是如果 grep 没有找到任何东西,我就会收到错误消息.
I am using Ansible's shell module to find a particular string and store it in a variable. But if grep did not find anything I am getting an error.
示例:
- name: Get the http_status
shell: grep "http_status=" /var/httpd.txt
register: cmdln
check_mode: no
当我运行此 Ansible 剧本时,如果 http_status
字符串不存在,剧本将停止.我没有收到 stderr.
When I run this Ansible playbook if http_status
string is not there, playbook is stopped. I am not getting stderr.
即使没有找到字符串,如何让 Ansible 不间断地运行?
How can I make Ansible run without interruption even if the string is not found?
如您所见,如果 grep
退出代码不为零,ansible 将停止执行.您可以使用 ignore_errors
忽略它.
Like you observed, ansible will stop execution if the grep
exit code is not zero. You can ignore it with ignore_errors
.
另一个技巧是将 grep 输出通过管道传送到 cat
.所以 cat
退出代码将始终为零,因为它的标准输入是 grep 的标准输出.如果有匹配项和不匹配项,它都可以工作.试试吧.
Another trick is to pipe the grep output to cat
. So cat
exit code will always be zero since its stdin is grep's stdout. It works if there is a match and also when there is no match. Try it.
- name: Get the http_status
shell: grep "http_status=" /var/httpd.txt | cat
register: cmdln
check_mode: no