没有“ FAILED” json输出的条件语句

时间:2019-09-25 02:43:21

标签: ansible

我想根据是否安装了某个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',因此输出已被隐藏”}

有没有办法抑制失败命令的输出?

  • Ansible:2.4.2.0
  • 操作系统:RHEL 7.7

1 个答案:

答案 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
}

这些是您可以用来忽略,检查和不让任务失败的唯一组合。