Назад | Перейти на главную страницу

Как создать вложенный цикл с шаблоном файлового глобуса?

Я пытаюсь создать набор авторизованных ключей 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 каталог и копировать каждый открытый ключ каждому пользователю?

Уловка состоит в том, чтобы преобразовать возвращаемое значение 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.

Возможно, вам придется значительно переписать свою команду, но есть положение для зацикливание файловых глобусов

из примера:

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

Другие многообещающие варианты: Цикл по субэлементам что на самом деле иллюстрируется ключами SSH