我正在尝试在 Ansible 中为一组用户创建一组授权的 SSH 密钥。我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
并将每个公钥复制给每个用户?
答案1
诀窍是通过函数将 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(',') }}"
请注意,在 Ansible v2 中已弃用使用不带{{
and}}
的裸变量。with_items
答案2
答案3
对我来说这只在这种形式下有效
- name: Set up authorized keys for root
authorized_key:
user: root
state: present
key: "{{ lookup('file', item) }}"
with_fileglob: 'public_keys/*.pub'