Come posso avere un ciclo nidificato con un pattern fileglob?


13

Sto cercando di creare un set di chiavi SSH autorizzate per un set di utenti in Ansible. Ho una usersvariabile impostata in questo modo:

users:
  - { username: root, name: 'root' }
  - { username: user, name: 'User' }

Nello stesso ruolo, ho anche un set di file di chiavi autorizzati in una files/public_keysdirectory, un file per chiave autorizzata:

roles/common/files/public_keys/home
roles/common/files/public_keys/work

Voglio copiare ogni chiave pubblica per ciascun utente.

Ho provato a utilizzare la seguente attività:

- name: copy authorized keys
  authorized_key: user={{ item.0.username }} key={{ item.1 }}
  with_nested:
    - users
    - lookup('fileglob', 'public_keys/*')

Tuttavia, item.1contiene la stringa letterale "lookup('fileglob', 'public_keys/*')", non ogni percorso di file in files/public_keys.

Esiste un modo per ottenere un elenco della files/public_keysdirectory e copiare ciascuna chiave pubblica per ciascun utente?

Risposte:


8

Il trucco è trasformare il valore restituito da fileglob in un elenco tramite la splitfunzione, in modo da poter scorrere i valori:

- name: copy authorized keys
  authorized_key: 
    user: "{{ item.0.username }}"
    key: "{{ lookup('file', item.1) }}"
  with_nested:
    - "{{ users }}"
    - "{{ lookup('fileglob', 'public_keys/*').split(',') }}"

Si noti che l'utilizzo di variabili nude, senza {{e }}, per è with_itemsstato deprecato in Ansible v2.


Questa dovrebbe essere una risposta accettata
Oltre il

0

Potrebbe essere necessario riscrivere in modo significativo il comando, ma è previsto il looping su fileglobs

dall'esempio:

- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
  with_fileglob:
    - /playbooks/files/fooapp/*

Altre opzioni promettenti sono il Looping over Subelements che è in realtà illustrato dalle chiavi SSH


3
So che puoi passare in rassegna i file globs usando with_fileglob; Non sono sicuro di come usarlo insieme a un ciclo nidificato. Il ciclo dei sottoelementi potrebbe funzionare, ma spero di non dover specificare manualmente l'intero elenco di chiavi che voglio copiare, dal momento che dovrei essere in grado di ottenerlo come elenco (usando with_fileglob).
mipadi,

Neanche io ne sono sicuro. Il miglior suggerimento successivo è quello di pop in #ansiblesu irc.freenode.nete vedere se il guru non hanno qualche idea brillante.
Tom O'Connor,
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.