我可以根据ansible详细级别设置ansible no_log默认值吗?

我可以根据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等更智能的替代方案

默认情况下,有很多ansible模块的输出非常详细,比如
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}”
一揽子事实:
经理:汽车
(这也应该在广泛的范围内起作用,通过将其与