Bagaimana saya bisa memiliki loop bersarang dengan pola fileglob?

13

Saya mencoba membuat satu set kunci SSH resmi untuk satu set pengguna di Ansible. Saya memiliki pengaturan usersvariabel seperti:

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

Dalam peran yang sama, saya juga memiliki satu set file kunci yang diotorisasi dalam files/public_keysdirektori, satu file per kunci yang diotorisasi:

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

Saya ingin menyalin setiap kunci publik ke setiap pengguna.

Saya telah mencoba menggunakan tugas berikut:

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

Namun, item.1berisi string literal "lookup('fileglob', 'public_keys/*')", tidak setiap jalur file di bawah files/public_keys.

Apakah ada cara saya bisa mendapatkan daftar files/public_keysdirektori dan menyalin setiap kunci publik untuk setiap pengguna?

mipadi
sumber

Jawaban:

8

Kuncinya adalah mengubah nilai pengembalian fileglob menjadi daftar melalui splitfungsi, sehingga Anda dapat beralih pada nilai-nilai:

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

Perhatikan bahwa menggunakan variabel kosong, tanpa {{dan }}, with_itemssudah tidak digunakan lagi dalam Ansible v2.

Conorsch
sumber
Ini harus diterima jawaban
Beyers
0

Anda mungkin harus menulis ulang perintah Anda secara signifikan, tetapi ada ketentuan untuk mengulang fileglobs

dari contoh:

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

Pilihan menjanjikan lainnya adalah Looping over Subelements yang sebenarnya diilustrasikan oleh kunci SSH

Tom O'Connor
sumber
3
Saya tahu Anda dapat mengulangi gumpalan file menggunakan with_fileglob; Saya hanya tidak yakin bagaimana menggunakannya bersama dengan loop bersarang. Melonggarkan subelemen bisa berfungsi, tetapi saya berharap saya tidak harus secara manual menentukan seluruh daftar kunci yang ingin saya salin, karena saya seharusnya bisa mendapatkannya sebagai daftar (menggunakan with_fileglob).
mipadi
Saya juga tidak yakin. Saran terbaik berikutnya adalah untuk pop ke #ansibleatas irc.freenode.netdan melihat apakah guru ada yang punya ide cemerlang.
Tom O'Connor