![将 shell 通配符与 Ansible 模板结合使用](https://linux22.com/image/12957/%E5%B0%86%20shell%20%E9%80%9A%E9%85%8D%E7%AC%A6%E4%B8%8E%20Ansible%20%E6%A8%A1%E6%9D%BF%E7%BB%93%E5%90%88%E4%BD%BF%E7%94%A8.png)
这是一种使用 shell globing 将多个文件指定为src
模板模块中的方法吗?
- name: Copy keys
template:
src: "{{ item }}"/RPM-*
dest: /etc/pki/{{ item }}/
loop:
- gf
答案1
你可以使用 Ansible 的fileglob
查找去做这个。您可以将模式作为参数列表传递给with_fileglob
,如下所示(而不是将模式放入模块src
的参数中template
):
- hosts: localhost
gather_facts: false
tasks:
- name: Copy keys
template:
src: "{{ item }}"
dest: "./pki/{{ '/'.join(item.split('/')[-2:]) }}"
with_fileglob:
- "gf/RPM-*"
- "xz/RPM-*"
这会将文件复制到./pki/gf/RPM-...
和./pki/xz/RPM-...
。该表达式'/'.join(item.split('/')[-2:])
采用类似的路径名/some/path/to/gf/RPM-foo
并将其转换为gf/RPM-foo
.
请注意,您需要首先确保目标目录存在,这可能需要在此之前执行单独的任务来创建它们。