Як я можу мати вкладений цикл із шаблоном fileglob?


13

Я намагаюся створити набір авторизованих ключів SSH для набору користувачів у Ansible. У мене usersналаштована змінна так:

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

У цій же ролі я також маю набір авторизованих файлів ключів у files/public_keysкаталозі, один файл на авторизований ключ:

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

Я хочу скопіювати кожен відкритий ключ для кожного користувача.

Я спробував використати таке завдання:

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

Однак item.1містить буквальний рядок "lookup('fileglob', 'public_keys/*')", не кожен шлях до файлу під files/public_keys.

Чи є спосіб я отримати список files/public_keysкаталогу та скопіювати кожен відкритий ключ для кожного користувача?

Відповіді:


8

Трюк полягає в тому, щоб перетворити повернене значення fileglob у список за допомогою splitфункції, щоб ви могли перебирати значення:

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

Зауважте, що використання "голих" змінних, без {{і }}для, with_itemsбуло застарене в Ansible v2.


Це слід прийняти відповіддю
гравці

0

Можливо, вам доведеться значно переписати свою команду, але є можливість переглядати файли

з прикладу:

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

Іншими перспективними варіантами є перекидання субелементів, що насправді ілюструється ключами SSH


3
Я знаю, що ви можете перебирати файли, використовуючи файли with_fileglob; Я просто не впевнений, як це використовувати в поєднанні з вкладеним циклом. Циркулювання на піддебелях може спрацювати, але я сподіваюся, що мені не доведеться вручну вказувати весь список клавіш, які я хочу скопіювати, оскільки я повинен бути у змозі отримати це як список (використовуючи with_fileglob).
mipadi

Я також не впевнений. Наступне кращу пропозицію поп в #ansibleна irc.freenode.netі подивитися , якщо гуру там є якісь - або яскраві ідеї.
Том О'Коннор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.