Ansible with_items non stampa l'intero articolo?


16

Sto automaticamente proteggendo le chiavi SSL in questo modo:

- 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

Ora, per ogni articolo, c'è un enorme messaggio di registro con l'intero contenuto dell'articolo:

ok: [127.0.0.1] => (item = {u'uid ': 0, u'woth': False, u'mtime ': 1454939377.264, u'inode': 400377, u'isgid ': False, u' taglia ': 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': 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})

Questo è incredibilmente illeggibile, poiché voglio solo conoscere il percorso dell'articolo che viene elaborato (e forse modificato). Con un gran numero di chiavi, questo è davvero fuori controllo.

Come posso cambiare questo gioco in modo che item.pathsia stampato solo per ciascun oggetto?

Ho già provato no_log: True, ma questo ovviamente omette completamente l'output.


Forse potresti scrivere un set [Jinja Filter] (docs.ansible.com/ansible/playbooks_filters.html) no_log: truee restituire il valore di item.pathcon il modulo di debug
Henrik Pingel,

Risposte:



5

Metodo 1

Uso

secure_ssl_keys_result.files|map(attribute='path')|list

Restituirà un elenco di percorsi:

['/etc/ssl../', '/etc/ssl/.../']

Tutto il tuo compito diventerebbe:

- name: Secure ssl keys
  file: path={{ item }} user=root group=root mode=600
  with_items: secure_ssl_keys_result.files|map(attribute='path')|list

Attenzione che puoi selezionare solo un singolo attributo, non è possibile utilizzarlo attribute=['path', 'mode'] o simili.

Metodo 2

Ho pensato di usare extract per essere in grado di recuperare più chiavi (perché a volte è necessario avere una seconda chiave per awhen condizione), ma non sono riuscito a farlo, poiché avrei bisogno di mappare l'elenco di dadi, quindi mappare l'elenco di chiavi sopra il dict specifico, che non sembra possibile, poiché map accetta solo un nome di funzione ma non una definizione di funzione / funzioni concatenate. Sarei grato per un suggerimento qui!

Un'ottima idea dai commenti (Grazie, Uditha Desilva !):

- name: Secure ssl keys file: path={{ item.0 }} mode=600 owner={{ item.1 }}
  with_together: 
  - secure_ssl_keys_result.files|map(attribute='path')|list 
  - secure_ssl_keys_result.files|map(attribute='uid')|list 

Metodo 3

In alternativa, è possibile utilizzare un filtro personalizzato come questo (è quello che ho fatto prima di scoprirlo map):

from ansible import errors
import re

def cleandict(items, keepkeys):
    try:
        newitems = []
        if not isinstance(items, list):
          items = [items]
        if not isinstance(keepkeys, list):
          keepkeys = [keepkeys]
        for dictionary in items:
          newdictionary = {}
          for keepkey in keepkeys:
            newdictionary[keepkey] = dictionary.get(keepkey)
          newitems.append(newdictionary)  
        return newitems
    except Exception, e:
        raise errors.AnsibleFilterError('split plugin error: %s' % str(e) )
        #raise errors.AnsibleFilterError('split plugin error: %s, string=%s' % str(e),str(items) )

class FilterModule(object):
    ''' A filter to split a string into a list. '''
    def filters(self):
        return {
            'cleandict' : cleandict
        }

ansible.cfg:

filter_plugins = ~/.ansible/plugins/filter_plugins/:/usr/share/ansible_plugins/filter_plugins

1
Per quanto riguarda il tuo metodo 2, sembrerebbe fattibile usare "with_together", anche se non è super efficiente (sfortunatamente i commenti non possono usare tag di codice quindi sembrerà strano): - name: Secure ssl keys file: path = {{item [0]}} mode = 600 owner = {{item [1]}} with_together: - secure_ssl_keys_result.files | map (attributo = 'percorso') | list - secure_ssl_keys_result.files | map (attributo = 'uid' ) | list
Uditha Desilva

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.