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