There are scenarios where instead of being explicit about each file name when generating templates from a role, you may want to take all the suffixed files in the ‘templates’ directory and dump their generated content into a destination directory.
As a quick example, if you are in a role and want every script in the templates directory ending with ‘.sh’ to generate a file then use ‘with_fileglob’ like below.
- name: create file out of every file in template directory
template:
src: "{{item}}"
dest: /tmp/.
with_fileglob: "{{role_path}}/templates/*.sh"
If your templates have an additional suffix tacked on (such as ‘.j2’), then you can use the jinja2 regex_replace to strip it off like below.
- name: create file out of every jinja2 template
template:
src: "{{item}}"
dest: /tmp/{{ item | basename | regex_replace('\.j2$', '') }}
with_fileglob: "{{role_path}}/templates/*.j2"
Here is a link to a playbook using the role, which can be invoked locally for testing:
ansible-playbook playbook-fileglob.yml --connection=local
Here is a link to the full fileglobtest role.
REFERENCES
stackoverflow Margaret, with_fileglob for generating template content from directory
ansible docs, playbook filters