community.openwrt.template module – Template a file out to remote OpenWrt target

Note

This module is part of the community.openwrt collection (version 1.3.0).

It is not included in ansible-core. To check whether it is installed, run ansible-galaxy collection list.

To install it, use: ansible-galaxy collection install community.openwrt.

To use it in a playbook, specify: community.openwrt.template.

Synopsis

  • Templates are processed by the Jinja2 templating language.

  • Documentation on the template formatting can be found in the Template Designer Documentation.

  • Additional variables listed below 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 is the numeric user id of the owner.

  • template_path is the path of the template.

  • template_fullpath is the absolute path of the template.

  • template_destpath is the path of the template on the remote system (added in 2.8).

  • template_run_date is the date that the template was rendered.

Note

This module has a corresponding action plugin.

Parameters

Parameter

Comments

backup

boolean

Create a backup file including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly.

Choices:

  • false ← (default)

  • true

block_end_string

string

The string marking the end of a block.

Default: "%}"

block_start_string

string

The string marking the beginning of a block.

Default: "{%"

comment_end_string

string

added in ansible-core 2.12

The string marking the end of a comment statement.

comment_start_string

string

added in ansible-core 2.12

The string marking the beginning of a comment statement.

dest

path / required

Location to render the template to on the remote machine.

follow

boolean

Determine whether symbolic links should be followed.

When set to true symbolic links are followed, if they exist.

When set to false symbolic links are not followed.

Choices:

  • false ← (default)

  • true

force

boolean

Determine when the file is being transferred if the destination already exists.

When set to yes, replace the remote file when contents are different than the source.

When set to no, the file will only be transferred if the destination does not exist.

Choices:

  • false

  • true ← (default)

group

string

Group name that should own the file or directory.

Passed directly to the chgrp command.

If not specified, group ownership is not changed.

Not applied to symlinks when follow=false.

lstrip_blocks

boolean

Determine when leading spaces and tabs should be stripped.

When set to yes leading spaces and tabs are stripped from the start of a line to a block.

Choices:

  • false ← (default)

  • true

mode

string

Permissions for the file or directory.

Can be specified as an octal number (for example, '0644', '1777') or symbolic mode (like 'u+rwx').

When using octal notation, quote the value to ensure it is treated as a string.

If not specified, permissions may be determined by the system default umask or remain unchanged.

Not applied to symlinks when follow=false.

newline_sequence

string

Specify the newline sequence to use for templating files.

Choices:

  • "\\n" ← (default)

  • "\\r"

  • "\\r\\n"

output_encoding

string

added in Ansible 2.7

Overrides the encoding used to write the template file defined by dest.

It defaults to utf-8, but any encoding supported by python can be used.

The source template file must always be encoded using utf-8, for homogeneity.

Default: "utf-8"

owner

string

User name that should own the file or directory.

Passed directly to the chown command.

If not specified, ownership is not changed.

Not applied to symlinks when follow=false.

src

path / required

Path of a Jinja2 formatted template on the Ansible controller.

This can be a relative or an absolute path.

The file must be encoded with utf-8 but output_encoding can be used to control the encoding of the output template.

trim_blocks

boolean

Determine when newlines should be removed from blocks.

When set to yes the first newline after a block is removed (block, not variable tag!).

Choices:

  • false

  • true ← (default)

validate

string

The validation command to run before copying the updated file into the final destination.

A temporary file path is used to validate, passed in through %s which must be present as in the examples below.

Also, the command is passed securely so shell features such as expansion and pipes will not work.

For an example on how to handle more complex validation than what this option provides, see handling complex validation.

variable_end_string

string

The string marking the end of a print statement.

Default: "}}"

variable_start_string

string

The string marking the beginning of a print statement.

Default: "{{"

Attributes

Attribute

Support

Description

check_mode

Support: full

Can run in check_mode and return changed status prediction without modifying target.

diff_mode

Support: full

Returns details on what has changed (or possibly needs changing in check_mode), when in diff mode.

platform

Platform: OpenWrt

Target platform for this module.

safe_file_operations

Support: none

This module uses basic shell commands for file operations and does not implement Ansible’s atomic file operation functions.

Uses Ansible’s strict file operation functions to ensure proper permissions and avoid data corruption.

Notes

Note

  • Including a string that uses a date in the template will result in the template being marked ‘changed’ each time.

  • Since Ansible 0.9, templates are loaded with trim_blocks=True.

  • Also, you can override jinja2 settings by adding a special header to template file. that is #jinja2:variable_start_string:'[%', variable_end_string:'%]', trim_blocks: False 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.

  • To find Byte Order Marks in files, use Format-Hex <file> -Count 16 on Windows, and use od -a -t x1 -N 16 <file> on Linux.

See Also

See also

community.openwrt.copy

Copy files to remote OpenWrt devices.

Examples

- name: Template a file to /etc/file.conf
  ansible.builtin.template:
    src: /mytemplates/foo.j2
    dest: /etc/file.conf

- name: Copy a new sudoers file into place, after passing validation with visudo
  ansible.builtin.template:
    src: /mine/sudoers
    dest: /etc/sudoers
    validate: /usr/sbin/visudo -cf %s

Return Values

Common return values are documented here, the following are the fields unique to this module:

Key

Description

dest

string

Destination file/path, equal to the value passed to dest.

Returned: success

Sample: "/path/to/file.txt"

md5sum

string

MD5 checksum of the rendered file.

Returned: changed

Sample: "d41d8cd98f00b204e9800998ecf8427e"

src

string

Source file used for the copy on the target machine.

Returned: changed

Sample: "/home/httpd/.ansible/tmp/ansible-tmp-1423796390.97-147729857856000/source"

Authors

  • Ilya Bogdanov (@zeerayne)