我会像这样自动保护 SSL 密钥:
- name: Find ssl keys
find: paths="/etc/ssl/" patterns="*.key" recurse=yes
register: secure_ssl_keys_result
- name: Secure ssl keys
file: path={{ item.path }} user=root group=root mode=600
with_items: secure_ssl_keys_result.files
现在,对于每个项目,都有一个包含项目全部内容的巨大日志消息:
ok: [127.0.0.1] => (item={u'uid': 0, u'woth': False, u'mtime': 1454939377.264, u'inode': 400377, u'isgid': False, u' size': 3243, u'roth': False, u'isuid': False, u'isreg': True, u'gid': 0, u'ischr': False, u'wusr': True, u'xoth ': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': False, u'path': u'/etc/ssl/foo.key', u 'xusr':假,u'atime':1454939377.264,u'isdir':假,u'ctime':1454939657.116,u'isblk':假,u'xgrp':假,u'dev':65025,u' wgrp':假,u'isfifo':假,u'mode':u'0600',u'islnk':假})
这是难以置信的不可读,因为我只想知道正在处理(并且可能更改)的项目的路径。使用大量键,这很快就会失控。
如何以仅item.path
打印每个项目的方式来更改此播放?
我已经尝试过no_log: True
了,但这当然完全忽略了输出。
Ansible 2.2 可以做到
loop_control.label
这一点。方法一
利用
它将返回路径列表:
你的整个任务将变成:
请注意,您只能选择单个属性,不能使用
attribute=['path', 'mode']
或类似。方法二
我想使用extract来获取多个键(因为有时需要为
when
条件提供第二个键),但没有设法做到这一点,因为我需要映射字典列表,然后映射特定 dict 上的键列表,这似乎是不可能的,因为 map 只接受函数名,但不接受函数定义/链接函数。我将不胜感激这里的建议!评论中的一个好主意(谢谢,Uditha Desilva!):
方法三
或者,可以使用这样的自定义过滤器(这就是我在发现之前所做的
map
):ansible.cfg
:你不能。要么全有,要么全无(通过
no_log: True
)