我正在尝试为Ansible中的一组用户创build一组授权的SSH密钥。 我有一个usersvariables设置如下所示:
users: - { username: root, name: 'root' } - { username: user, name: 'User' }
在同一个angular色中,我还在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包含文本string"lookup('fileglob', 'public_keys/*')" ,而不是files/public_keys下的每个文件path。
有没有一种方法可以得到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(',') }}"
请注意,对于with_items ,不使用{{和}} ,在Ansible v2中不使用裸variables。
您可能不得不大幅重写您的命令,但是有一些规定可以循环使用fileglobs
从例子:
- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600 with_fileglob: - /playbooks/files/fooapp/*
其他有前途的选项是循环子元素 ,这实际上是由SSH密钥来说明的