Estou protegendo automaticamente chaves SSL como esta:
- 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
Agora, para cada item, há uma enorme mensagem de log com todo o conteúdo do item:
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': Falso, u'isuid': Falso, u'isreg': Verdadeiro, u'gid': 0, u'ischr': Falso, u'wusr': Verdadeiro, u'xoth ': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': False, u'path': u'/etc/ssl/foo.key', u 'xusr': False, u'atime': 1454939377.264, u'isdir': False, u'ctime': 1454939657.116, u'isblk': False, u'xgrp': False, u'dev': 65025, u' wgrp': False, u'isfifo': False, u'mode': u'0600', u'islnk': False})
Isso é incrivelmente ilegível, pois só quero saber o caminho do item que está sendo processado (e talvez alterado). Com um grande número de chaves, isso sai do controle muito rápido.
Como posso alterar este jogo de forma que apenas o item.path
esteja sendo impresso para cada item?
Eu já tentei no_log: True
, mas isso omite completamente a saída, é claro.
O Ansible 2.2 tem
loop_control.label
para isso.Método 1
Usar
Ele retornará uma lista de caminhos:
Toda a sua tarefa se tornaria:
Cuidado que você só pode selecionar um único atributo, não é possível usar
attribute=['path', 'mode']
ou similar.Método 2
Pensei em usar o extract para poder buscar várias chaves (porque às vezes é necessário ter uma segunda chave para uma
when
condição), mas não consegui, pois precisaria mapear a lista de dicts, depois mapear a lista de chaves sobre o dict específico, o que não parece possível, pois map aceita apenas um nome de função, mas não uma definição de função/funções encadeadas. Eu ficaria grato por uma sugestão aqui!Uma ótima ideia dos comentários (Obrigado, Uditha Desilva !):
Método 3
Como alternativa, um filtro personalizado como este pode ser usado (foi o que fiz antes de descobrir sobre
map
):ansible.cfg
:Você não pode. É tudo ou nada (via
no_log: True
)