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?

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.


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


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.