将 shell 通配符与 Ansible 模板结合使用

将 shell 通配符与 Ansible 模板结合使用

这是一种使用 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.

请注意,您需要首先确保目标目录存在,这可能需要在此之前执行单独的任务来创建它们。

相关内容