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:

  • Cosa significa "localhost" FAILED => La mancanza di diventare password "significa? Come posso passarlo?
  • Come impostare il nome utente / la password predefiniti per la connessione SSH?
  • Utilizza il nome di attività come variabile
  • Possibile: copia file in base al nome host o al ruolo
  • Qual è il modo corretto di fare riferimento agli host come variables in Ansible?
  • Creazione di un simbolo con un messaggio e di un elenco di variables
  • 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.

  • eseguire un ruolo specifico in qualsiasi condizione
  • Passare le variables ai playbook sensibili
  • Inoltra l'authentication Kerberos su Ansible
  • Il clone di git possibili dal repo privato di Stash
  • La corsa perduta finisce con MODULE FAILURE?
  • Passaggio dei parametri a chiamate richieste
  • 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.