Author: | Michael DeHaan |
---|
Templates are processed by the Jinja2 templating language (http://jinja.pocoo.org/docs/) - documentation on the template formatting can be found in the Template Designer Documentation (http://jinja.pocoo.org/docs/templates/). Six additional variables can be used in templates: ansible_managed (configurable via the defaults section of ansible.cfg) contains a string which can be used to describe the template name, host, modification time of the template file and the owner uid, template_host contains the node name of the template’s machine, template_uid the owner, template_path the absolute path of the template, template_fullpath is the absolute path of the template, and template_run_date is the date that the template was rendered. Note that including a string that uses a date in the template will resort in the template being marked ‘changed’ each time.
parameter | required | default | choices | comments |
---|---|---|---|---|
backup | no | no |
|
Create a backup file including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly. |
dest | yes | Location to render the template to on the remote machine. | ||
others | no | all arguments accepted by the file module also work here, as well as the copy module (except the the 'content' parameter). | ||
src | yes | Path of a Jinja2 formatted template on the local server. This can be a relative or absolute path. | ||
validate | no | validation to run before copying into place (added in Ansible 1.2) |
# Example from Ansible Playbooks
- template: src=/mytemplates/foo.j2 dest=/etc/file.conf owner=bin group=wheel mode=0644
# Copy a new "sudoers file into place, after passing validation with visudo
- action: template src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'
Note
Since Ansible version 0.9, templates are loaded with trim_blocks=True.
Note
Also, you can override jinja2 settings by adding a special header to template file. i.e. #jinja2:variable_start_string:'[%' , variable_end_string:'%]' which changes the variable interpolation markers to [% var %] instead of {{ var }}. This is the best way to prevent evaluation of things that look like, but should not be Jinja2. raw/endraw in Jinja2 will not work as you expect because templates in Ansible are recursively evaluated.