我是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中显示失败的字符串。
答案 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)
如果您预计会出现故障,我想知道是否可以调整库存以使其仅不在预期的故障节点上运行。签出组,也许您可以建立一个组(在设置动态清单时)。
另一种策略是检查某个文件或帐户是否存在,以识别可能成功的位置,然后仅在成功后运行任务。