我正在尝试为 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 次 |
最近记录: |