我想根据是否安装了某个RPM运行命令。我有一系列看起来像以下的任务:
- name: This is the test for the RPM
command: rpm -q some-rpm
register: rpm_is_installed
ignore_errors: True
- name: Command to run if the RPM is installed
command: some_command_to_run
when: rpm_is_installed is succeeded
从功能上讲,这可行。但是,如果测试失败(即未安装RPM),则在执行“ rpm -q some-rpm”时会收到描述该失败的讨厌的JSON打印输出。这将被忽略,从而使ansible继续进行,并且一切都会按预期运行,但是我想抑制该错误输出,因此我每次运行这些任务时都不会看到该错误消息。
我确实找到了this post,它建议在测试任务中添加“ no_log:True”。这不会抑制我的ansible版本中的输出,但是会将输出更改为:
失败! => {“审查”:“由于为此结果指定了'no_log:true',因此输出已被隐藏”}
有没有办法抑制失败命令的输出?
答案 0 :(得分:0)
无法抑制错误日志,但是您可以做的一件事就是使用failed_when
。
no_log: true
->这将检查输出。
ignore_errors: true
->这将忽略该错误并继续播放。
failed_when: false
->这不会使任务失败。
剧本看起来像这样:
- name: This is the test for the RPM
command: rpm -q some-rpm
register: rpm_is_installed
failed_when: false
no_log: true
除了ignore_errors
以外,这里还有failed_when
选项,您可以在其中精确定义使任务失败的原因。首先,我们不应该让任务失败。在这种情况下,任务将永远不会失败。
输出时没有failed_when:
fatal: [localhost]: FAILED! => {
"censored": "the output has been hidden due to the fact that 'no_log: true' was specified for this result",
"changed": true
}
输出带有fail_when的时间:
changed: [localhost] => {
"censored": "the output has been hidden due to the fact that 'no_log: true' was specified for this result",
"changed": true
}
这些是您可以用来忽略,检查和不让任务失败的唯一组合。