Jak mogę uzyskać zagnieżdżoną pętlę ze wzorem fileglob?

13

Próbuję utworzyć zestaw autoryzowanych kluczy SSH dla zestawu użytkowników w Ansible. Mam userszmienną skonfigurowaną tak:

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

W tej samej roli mam również zestaw autoryzowanych plików kluczy w files/public_keyskatalogu, jeden plik na autoryzowany klucz:

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

Chcę skopiować każdy klucz publiczny do każdego użytkownika.

Próbowałem użyć następującego zadania:

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

Jednak item.1zawiera ciągiem znaków "lookup('fileglob', 'public_keys/*')", a nie każdy pod ścieżka do pliku files/public_keys.

Czy istnieje sposób, aby uzyskać listę files/public_keyskatalogu i skopiować każdy klucz publiczny do każdego użytkownika?

mipadi
źródło

Odpowiedzi:

8

Sztuczka polega na przekształceniu wartości zwracanej pliku fileglob w listę za pomocą splitfunkcji, dzięki czemu można iterować po wartościach:

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

Zauważ, że używanie nagich zmiennych, bez {{i }}, dla with_itemsprzestało być używane w Ansible v2.

conorsch
źródło
Należy zaakceptować odpowiedź
Beyers
0

Być może będziesz musiał znacznie przepisać swoje polecenie, ale istnieje możliwość zapętlania plików cookie

z przykładu:

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

Inne obiecujące opcje to Pętla nad podelementami, która jest faktycznie zilustrowana kluczami SSH

Tom O'Connor
źródło
3
Wiem, że możesz przeglądać globusy plików za pomocą with_fileglob; Po prostu nie jestem pewien, jak tego użyć w połączeniu z zagnieżdżoną pętlą. Pętla nad podelementami może działać, ale mam nadzieję, że nie muszę ręcznie określać całej listy kluczy, które chcę skopiować, ponieważ powinienem być w stanie uzyskać ją jako listę (za pomocą with_fileglob).
mipadi
Nie jestem też pewien. Kolejna propozycja to najlepszy pop na #ansiblena irc.freenode.neti zobaczyć, czy guru nie ma żadnych jasnych pomysłów.
Tom O'Connor,