我怎样才能有一个fileglob模式的嵌套循环?

我正在尝试为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密钥来说明的