le connesse con_items non printingno l'integer elemento

Riconosco automaticamente i tasti SSL come questo:

- 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 

Adesso, per each articolo, esiste un enorme messaggio di registro con l'integer contenuto dell'articolo:

  • Dove posso trovare il più recente log di errore ansible
  • Quale è l'equivalente di Puppet's `unless 'in Ansible?
  • playbook sensibile, utente diverso da sistema operativo
  • Creazione di un simbolo con un messaggio e di un elenco di variables
  • un task non potente innesca i gestori
  • Uscita di visualizzazione con Ansible
  • ok: [127.0.0.1] => (articolo = {u'uid ': 0, u'woth': False, u'mtime ': 1454939377.264, u'inode': 400377, u'isgid ': False, u' Dimensione ': 3243, u'roth': False, u'isuid ': False, u'isreg': vero, u'gid ': 0, u'ischr': falso, u'wusr ': vero, u'xoth ': Falso, u'rath': u '/ etc / ssl / foo.key', u 'xusr': False, u'atime ': 1454939377.264, u'isdir': False, u'ctime ': 1454939657.116, u'isblk': False, u'xgrp ': falso, u'dev': 65025, u ' wgrp ': False, u'isfifo': ​​False, u'mode ': u'0600', u'islnk ': False})

    Questo è incredibilmente illeggibile, perché voglio solo conoscere il path dell'elemento che viene elaborato (e forse cambiato). Con un gran numero di chiavi, questo gioco è fuori mano davvero veloce.

    Come posso modificare questa riproduzione in modo che venga printingto solo il file item.path per each elemento?

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

  • Disabile: Imansible connettersi all'host tramite ssh
  • Crea utente se non esiste in Ansible
  • Possibile: copia model solo quando il file di destinazione non esiste
  • Passaggio dei parametri a chiamate richieste
  • Aggiunta di elenchi o aggiunta di chiavi per i dizionari in Ansible
  • Esegui l'attività compresa come un task autonomo
  • 3 Solutions collect form web for “le connesse con_items non printingno l'integer elemento”

    Ansible 2.2 ha loop_control.label per questo.

     - name: Secure ssl keys file: path={{ item.path }} user=root group=root mode=600 with_items: secure_ssl_keys_result.files loop_control: label: "{{ item.path }}" 

    Metodo 1

    Uso

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

    Restituisce un elenco di routes:

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

    Tutto il tuo task sarebbe diventato:

     - 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 select solo un singolo attributo, non è ansible utilizzare attribute=['path', 'mode'] o simili.

    Metodo 2

    Ho pensato di usare l' estratto per poter recuperare più chiavi (perché a volte è necessario avere una seconda chiave per una condizione di when ), ma non l'ho rioutput, perché avrei bisogno di mappare l'elenco di dicts, quindi mappare l'elenco delle chiavi sopra il dict specifico, che non sembra ansible, in quanto la mappa accetta solo un nome di function, ma non una function di definizione / funzioni incatenate. Sarei grato per un suggerimento qui!

    Una grande idea dei 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, è ansible utilizzare un filter personalizzato come questo (è quello che ho fatto prima di aver scoperto la 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 

    Non puoi. È tutto o niente (via no_log: True )

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.