需要在ansible任务中隐藏失败的日志

时间:2016-03-01 13:13:04

标签: ansible ansible-playbook

我是ansible任务的新手,正在创建一个执行登录操作的yml,如果登录失败,则需要调用一些脚本。

  - name: Logging Action
    shell: "/usr/local/bin/cqlsh -u xyzyx -p 1234abc"
    register: loginoutput
    ignore_errors: yes
    no_log: True


  - name: Run the cql script to create new user
    shell:  sh create-new-user.cql"
    when: loginoutput|failed

对于上面的一个我创建的taks工作正常。

我的问题是,当执行登录操作时 - 它失败并显示如下的错误消息......

我不想在日志中显示日志乱七八糟的字符串。

我尝试no_log: True,这给了

  

失败:[127.0.0.1] => {"审查":"由于no_log参数隐藏了结果","更改":true," rc":1}

我不想在o / p中显示失败的字符串。

2 个答案:

答案 0 :(得分:12)

你做不到。 no_log: True是防止输出的最佳选择。

如果有帮助,在ignore_errors: yes旁边有failed_when选项,您可以在其中准确定义导致任务失败的原因。我们的想法是不要让任务首先失败。

- name: Logging Action
  shell: "/usr/local/bin/cqlsh -u xyzyx -p 1234abc"
  register: loginoutput
  failed_when: false
  no_log: True

因此,在这种情况下,任务永远不会失败(false),但您可以提供任何可能基于任务输出的复杂条件。

现在,任务没有失败,但cqlsh的返回码仍然是1,您可以在下一个任务的条件下使用它。

- name: Run the cql script to create new user
  shell:  sh create-new-user.cql"
  when: loginoutput.rc == 1

理论上,这应该具有与以前相同的结果,只是第一个任务没有被标记为失败,因此no_log: True应该具有预期的效果。

答案 1 :(得分:0)

如果您预计会出现故障,我想知道是否可以调整库存以使其仅不在预期的故障节点上运行。签出组,也许您可​​以建立一个组(在设置动态清单时)。

另一种策略是检查某个文件或帐户是否存在,以识别可能成功的位置,然后仅在成功后运行任务。