我可以根据ansible详细级别设置ansible no_log默认值吗?
默认情况下,有很多ansible模块的输出非常详细,比如我可以根据ansible详细级别设置ansible no_log默认值吗?,ansible,Ansible,默认情况下,有很多ansible模块的输出非常详细,比如sync、file,以及所有os*模块,它们都有在控制台上返回大量结果的坏习惯 ANSIBLE\u详细程度level对于这些都是无用的,因为即使是level0也不会从输出中删除“结果” 通过ANSIBLE\u STDOUT\u CALLBACK使用替代输出插件是另一个失败的原因,因为目前没有任何现有替代回调具有禁用这些插件的选项 向每次出现的垃圾邮件模块添加no_log:true或类似no_log:result.rc==0等更智能的替代方案
sync
、file
,以及所有os*
模块,它们都有在控制台上返回大量结果的坏习惯
ANSIBLE\u详细程度
level对于这些都是无用的,因为即使是level0也不会从输出中删除“结果”
通过ANSIBLE\u STDOUT\u CALLBACK
使用替代输出插件是另一个失败的原因,因为目前没有任何现有替代回调具有禁用这些插件的选项
向每次出现的垃圾邮件模块添加no_log:true
或类似no_log:result.rc==0
等更智能的替代方案在实践中不会扩展
我知道可以在playbook级别定义
no\u log:true
,但这不允许我有条件地启用日志记录。如果您想要“干净”的解决方案,您一定要编写自定义回调插件,以将输出量减少到所需的级别
但您可以选择使用此解决方案,根据详细程度有条件地模板化no_log
:
---
- hosts: localhost
gather_facts: no
no_log: "{{ verbose_check | default(dict(skipped=true)) | skipped }}"
vars:
mydict:
password: abc
tasks:
- debug:
msg: "Shown only with verbosity > 2"
verbosity: 3
register: verbose_check
- debug:
var: mydict
debug
模块具有内置的跳过功能,具体取决于详细程度。我们可以注册它的输出并基于它定义no\u log
。由于Jinja{{…}}
表达式在使用时是模板化的,而不是在定义时,下面的每个任务都将根据跳过的状态将no_log
评估为true
或false
,具体取决于我们的verbose\u检查您可以根据详细程度(至少从2.9开始在ansible_verbosity
中公开)对no_log
选项进行模板化
除非详细程度为3或更高,否则这将对其中一个任务禁用它
- hosts: localhost
tasks:
- name: Show verbosity level
debug:
var: ansible_verbosity
- name: Get a list of installed packages
no_log: "{{ ansible_verbosity < 3 }}"
package_facts:
manager: auto
-hosts:localhost
任务:
-名称:显示详细级别
调试:
变量:ansible_冗余
-名称:获取已安装软件包的列表
无日志:“{{ansible\u详细信息<3}”
一揽子事实:
经理:汽车
(这也应该在广泛的范围内起作用,通过将其与