如何在Ansible中循环templates目录下的data-*.j2文件进行传输
批量部署以data-开头的Ansible模板文件
你可以通过以下两种方式实现批量传输templates目录下所有以data-开头的.j2模板文件:
方法一:使用with_fileglob(传统简洁写法)
这种方式语法直观,适合快速匹配指定模式的文件:
- name: 批量部署data开头的模板文件 ansible.builtin.template: src: "{{ item }}" dest: "/目标路径/{{ item | basename | regex_replace('\\.j2$', '') }}" with_fileglob: - "templates/data-*.j2"
方法二:使用loop配合query查找(更灵活的现代写法)
如果习惯用loop语法,可以结合fileglob查找插件实现:
- name: 批量部署data开头的模板文件 ansible.builtin.template: src: "{{ item }}" dest: "/目标路径/{{ item | basename | regex_replace('\\.j2$', '') }}" loop: "{{ query('fileglob', 'templates/data-*.j2') }}"
核心逻辑说明:
fileglob:匹配指定路径下符合规则的文件,templates/data-*.j2会精准筛选出templates目录下以data-开头、.j2结尾的所有文件。basename过滤器:提取文件的纯文件名(去掉路径前缀),比如把templates/data-service01.service.j2简化为data-service01.service.j2。regex_replace('\\.j2$', ''):用正则替换掉文件名末尾的.j2后缀,得到最终要部署的目标文件名,比如data-service01.service。- 记得把示例中的
/目标路径/替换为你实际要部署到远程主机的目录。
内容的提问来源于stack exchange,提问作者MuhammedOmar
相关产品推荐
相关产品推荐

