我正在尝试为 Ansible 中的一组用户创建一组授权的 SSH 密钥。我有一个users像这样设置的变量:
users:
- { username: root, name: 'root' }
- { username: user, name: 'User' }
Run Code Online (Sandbox Code Playgroud)
在同一个角色中,我在一个files/public_keys目录中还有一组授权密钥文件,每个授权密钥一个文件:
roles/common/files/public_keys/home
roles/common/files/public_keys/work
Run Code Online (Sandbox Code Playgroud)
我想将每个公钥复制给每个用户。
我尝试使用以下任务:
- name: copy authorized keys
authorized_key: user={{ item.0.username }} key={{ item.1 }}
with_nested:
- users
- lookup('fileglob', 'public_keys/*')
Run Code Online (Sandbox Code Playgroud)
但是,item.1包含文字字符串"lookup('fileglob', 'public_keys/*')",而不是files/public_keys.
有没有办法获得files/public_keys目录列表并将每个公钥复制给每个用户?
诀窍是通过split函数将 fileglob 返回值转换为列表,以便您可以迭代这些值:
- name: copy authorized keys
authorized_key:
user: "{{ item.0.username }}"
key: "{{ lookup('file', item.1) }}"
with_nested:
- "{{ users }}"
- "{{ lookup('fileglob', 'public_keys/*').split(',') }}"
Run Code Online (Sandbox Code Playgroud)
请注意,在 Ansible v2 中不推荐使用没有{{和}}, for 的裸变量with_items。
您可能必须大幅重写命令,但可以循环遍历文件团
从例子来看:
- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
with_fileglob:
- /playbooks/files/fooapp/*
Run Code Online (Sandbox Code Playgroud)
其他有前途的选项是循环子元素,这实际上是通过 SSH 密钥来说明的
| 归档时间: |
|
| 查看次数: |
15047 次 |
| 最近记录: |