win_template - use shared doc fragment for shared options (#59701)

* win_template - use shared doc fragment for shared options

* Change smart quote to em dash and fix whitespace issue
This commit is contained in:
Jordan Borean 2019-07-31 08:05:24 +10:00 committed by GitHub
parent 4c1f52c6c0
commit 652bfc7e19
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 166 additions and 231 deletions

View file

@ -17,92 +17,7 @@ DOCUMENTATION = r'''
--- ---
module: template module: template
version_added: historical version_added: historical
short_description: Template a file out to a remote server
description:
- Templates are processed by the L(Jinja2 templating language,http://jinja.pocoo.org/docs/).
- Documentation on the template formatting can be found in the
L(Template Designer Documentation,http://jinja.pocoo.org/docs/templates/).
- Additional variables listed below can be used in templates.
- C(ansible_managed) (configurable via the C(defaults) section of C(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.
- C(template_host) contains the node name of the template's machine.
- C(template_uid) is the numeric user id of the owner.
- C(template_path) is the path of the template.
- C(template_fullpath) is the absolute path of the template.
- C(template_destpath) is the path of the template on the remote system (added in 2.8).
- C(template_run_date) is the date that the template was rendered.
options: options:
src:
description:
- Path of a Jinja2 formatted template on the Ansible controller.
- This can be a relative or an absolute path.
type: path
required: yes
dest:
description:
- Location to render the template to on the remote machine.
type: path
required: yes
backup:
description:
- Determine whether a backup should be created.
- When set to C(yes), create a backup file including the timestamp information
so you can get the original file back if you somehow clobbered it incorrectly.
type: bool
default: no
newline_sequence:
description:
- Specify the newline sequence to use for templating files.
type: str
choices: [ '\n', '\r', '\r\n' ]
default: '\n'
version_added: '2.4'
block_start_string:
description:
- The string marking the beginning of a block.
type: str
default: '{%'
version_added: '2.4'
block_end_string:
description:
- The string marking the end of a block.
type: str
default: '%}'
version_added: '2.4'
variable_start_string:
description:
- The string marking the beginning of a print statement.
type: str
default: '{{'
version_added: '2.4'
variable_end_string:
description:
- The string marking the end of a print statement.
type: str
default: '}}'
version_added: '2.4'
trim_blocks:
description:
- Determine when newlines should be removed from blocks.
- When set to C(yes) the first newline after a block is removed (block, not variable tag!).
type: bool
default: yes
version_added: '2.4'
lstrip_blocks:
description:
- Determine when leading spaces and tabs should be stripped.
- When set to C(yes) leading spaces and tabs are stripped from the start of a line to a block.
- This functionality requires Jinja 2.7 or newer.
type: bool
default: no
version_added: '2.6'
force:
description:
- Determine when the file is being transferred if the destination already exists.
- When set to C(yes), replace the remote file when contents are different than the source.
- When set to C(no), the file will only be transferred if the destination does not exist.
type: bool
default: yes
follow: follow:
description: description:
- Determine whether symbolic links should be followed. - Determine whether symbolic links should be followed.
@ -112,24 +27,7 @@ options:
type: bool type: bool
default: no default: no
version_added: '2.4' version_added: '2.4'
output_encoding:
description:
- Overrides the encoding used to write the template file defined by C(dest).
- It defaults to C(utf-8), but any encoding supported by python can be used.
- The source template file must always be encoded using C(utf-8), for homogeneity.
type: str
default: utf-8
version_added: '2.7'
notes: notes:
- 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 C(trim_blocks=True).
- >
Also, you can override jinja2 settings by adding a special header to template file.
i.e. C(#jinja2:variable_start_string:'[%', variable_end_string:'%]', trim_blocks: False)
which changes the variable interpolation markers to C([% var %]) instead of C({{ var }}).
This is the best way to prevent evaluation of things that look like, but should not be Jinja2.
- Using raw/endraw in Jinja2 will not work as you expect because templates in Ansible are recursively
evaluated.
- You can use the M(copy) module with the C(content:) option if you prefer the template inline, - You can use the M(copy) module with the C(content:) option if you prefer the template inline,
as part of the playbook. as part of the playbook.
- For Windows you can use M(win_template) which uses '\\r\\n' as C(newline_sequence) by default. - For Windows you can use M(win_template) which uses '\\r\\n' as C(newline_sequence) by default.
@ -142,6 +40,7 @@ author:
- Michael DeHaan - Michael DeHaan
extends_documentation_fragment: extends_documentation_fragment:
- files - files
- template_common
- validate - validate
''' '''

View file

@ -13,108 +13,27 @@ DOCUMENTATION = r'''
--- ---
module: win_template module: win_template
version_added: "1.9.2" version_added: "1.9.2"
short_description: Templates a file out to a remote server
description:
- Templates are processed by the Jinja2 templating language
(U(http://jinja.pocoo.org/docs/)) - documentation on the template
formatting can be found in the Template Designer Documentation
(U(http://jinja.pocoo.org/docs/templates/)).
- "Additional variables can be used in templates: C(ansible_managed)
(configurable via the C(defaults) section of C(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."
- "C(template_host) contains the node name of the template's machine."
- "C(template_uid) the owner."
- "C(template_path) the absolute path of the template."
- "C(template_fullpath) is the absolute path of the template."
- "C(template_destpath) is the path of the template on the remote system (added in 2.8)."
- "C(template_run_date) is the date that the template was rendered."
- "Note that including a string that uses a date in the template will result in the template being marked 'changed' each time."
- For other platforms you can use M(template) which uses '\n' as C(newline_sequence).
options: options:
src:
description:
- Path of a Jinja2 formatted template on the local server. This can be a relative or absolute path.
type: path
required: yes
dest:
description:
- Location to render the template to on the remote machine.
type: path
required: yes
backup: backup:
description:
- Determine whether a backup should be created.
- When set to C(yes), create a backup file including the timestamp information
so you can get the original file back if you somehow clobbered it incorrectly.
type: bool
default: no
version_added: '2.8' version_added: '2.8'
newline_sequence: newline_sequence:
description:
- Specify the newline sequence to use for templating files.
type: str
choices: [ '\n', '\r', '\r\n' ]
default: '\r\n' default: '\r\n'
version_added: '2.4'
block_start_string:
description:
- The string marking the beginning of a block.
type: str
default: '{%'
version_added: '2.4'
block_end_string:
description:
- The string marking the end of a block.
type: str
default: '%}'
version_added: '2.4'
variable_start_string:
description:
- The string marking the beginning of a print statement.
type: str
default: '{{'
version_added: '2.4'
variable_end_string:
description:
- The string marking the end of a print statement.
type: str
default: '}}'
version_added: '2.4'
trim_blocks:
description:
- If this is set to C(yes) the first newline after a block is removed (block, not variable tag!).
type: bool
default: no
version_added: '2.4'
force: force:
description:
- If C(yes), will replace the remote file when contents are different
from the source.
- If C(no), the file will only be transferred if the destination does
not exist.
type: bool
default: yes
version_added: '2.4' version_added: '2.4'
notes: notes:
- Templates are loaded with C(trim_blocks=yes). - Beware fetching files from windows machines when creating templates because certain tools, such as Powershell ISE,
- Beware fetching files from windows machines when creating templates and regedit's export facility add a Byte Order Mark as the first character of the file, which can cause tracebacks.
because certain tools, such as Powershell ISE, and regedit's export facility - You can use the M(win_copy) module with the C(content:) option if you prefer the template inline, as part of the
add a Byte Order Mark as the first character of the file, which can cause tracebacks. playbook.
- To find Byte Order Marks in files, use C(Format-Hex <file> -Count 16) on Windows, and use C(od -a -t x1 -N 16 <file>) on Linux. - For Linux you can use M(template) which uses '\\n' as C(newline_sequence) by default.
- "Also, you can override jinja2 settings by adding a special header to template file.
i.e. C(#jinja2:variable_start_string:'[%', variable_end_string:'%]', trim_blocks: no)
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."
- You can use the M(win_copy) module with the C(content:) option if you prefer the template inline,
as part of the playbook.
seealso: seealso:
- module: template
- module: win_copy - module: win_copy
- module: copy
- module: template
author: author:
- Jon Hawkesworth (@jhawkesworth) - Jon Hawkesworth (@jhawkesworth)
extends_documentation_fragment:
- template_common
''' '''
EXAMPLES = r''' EXAMPLES = r'''

View file

@ -0,0 +1,122 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2019 Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
class ModuleDocFragment(object):
# Standard template documentation fragment, use by template and win_template.
DOCUMENTATION = r'''
short_description: Template a file out to a remote server
description:
- Templates are processed by the L(Jinja2 templating language,http://jinja.pocoo.org/docs/).
- Documentation on the template formatting can be found in the
L(Template Designer Documentation,http://jinja.pocoo.org/docs/templates/).
- Additional variables listed below can be used in templates.
- C(ansible_managed) (configurable via the C(defaults) section of C(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.
- C(template_host) contains the node name of the template's machine.
- C(template_uid) is the numeric user id of the owner.
- C(template_path) is the path of the template.
- C(template_fullpath) is the absolute path of the template.
- C(template_destpath) is the path of the template on the remote system (added in 2.8).
- C(template_run_date) is the date that the template was rendered.
options:
src:
description:
- 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 C(utf-8) but I(output_encoding) can be used to control the encoding of the output
template.
type: path
required: yes
dest:
description:
- Location to render the template to on the remote machine.
type: path
required: yes
backup:
description:
- Determine whether a backup should be created.
- When set to C(yes), create a backup file including the timestamp information
so you can get the original file back if you somehow clobbered it incorrectly.
type: bool
default: no
newline_sequence:
description:
- Specify the newline sequence to use for templating files.
type: str
choices: [ '\n', '\r', '\r\n' ]
default: '\n'
version_added: '2.4'
block_start_string:
description:
- The string marking the beginning of a block.
type: str
default: '{%'
version_added: '2.4'
block_end_string:
description:
- The string marking the end of a block.
type: str
default: '%}'
version_added: '2.4'
variable_start_string:
description:
- The string marking the beginning of a print statement.
type: str
default: '{{'
version_added: '2.4'
variable_end_string:
description:
- The string marking the end of a print statement.
type: str
default: '}}'
version_added: '2.4'
trim_blocks:
description:
- Determine when newlines should be removed from blocks.
- When set to C(yes) the first newline after a block is removed (block, not variable tag!).
type: bool
default: yes
version_added: '2.4'
lstrip_blocks:
description:
- Determine when leading spaces and tabs should be stripped.
- When set to C(yes) leading spaces and tabs are stripped from the start of a line to a block.
- This functionality requires Jinja 2.7 or newer.
type: bool
default: no
version_added: '2.6'
force:
description:
- Determine when the file is being transferred if the destination already exists.
- When set to C(yes), replace the remote file when contents are different than the source.
- When set to C(no), the file will only be transferred if the destination does not exist.
type: bool
default: yes
output_encoding:
description:
- Overrides the encoding used to write the template file defined by C(dest).
- It defaults to C(utf-8), but any encoding supported by python can be used.
- The source template file must always be encoded using C(utf-8), for homogeneity.
type: str
default: utf-8
version_added: '2.7'
notes:
- 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 C(trim_blocks=True).
- >
Also, you can override jinja2 settings by adding a special header to template file.
i.e. C(#jinja2:variable_start_string:'[%', variable_end_string:'%]', trim_blocks: False)
which changes the variable interpolation markers to C([% var %]) instead of C({{ var }}).
This is the best way to prevent evaluation of things that look like, but should not be Jinja2.
- Using raw/endraw in Jinja2 will not work as you expect because templates in Ansible are recursively
evaluated.
- To find Byte Order Marks in files, use C(Format-Hex <file> -Count 16) on Windows, and use C(od -a -t x1 -N 16 <file>)
on Linux.
'''

View file

@ -251,47 +251,41 @@
that: that:
- not template_to_dir_again is changed - not template_to_dir_again is changed
# VERIFY MODE - name: template a file with utf-8 encoding
# can't set file mode on windows so commenting this test out win_template:
#- name: set file mode src: foo.utf-8.j2
# win_file: path={{win_output_dir}}/foo.templated mode=0644 dest: '{{ win_output_dir }}\foo.encoding.txt'
# register: file_result register: template_utf8
#- name: ensure file mode did not change - name: slurp utf-8 templated file
# assert: slurp:
# that: path: '{{ win_output_dir }}\foo.encoding.txt'
# - "file_result.changed != True" register: template_utf8_actual
# commenting out all the following tests as expanduser and file modes not windows concepts. - name: get expected templated contents
set_fact:
expected_content: '{{ lookup("template", "foo.utf-8.j2") | trim }}'
# VERIFY dest as a directory does not break file attributes - name: assert template a file with utf-8 encoding
# Note: expanduser is needed to go down the particular codepath that was broken before assert:
#- name: setup directory for test that:
# win_file: state=directory dest={{win_output_dir | expanduser}}/template-dir mode=0755 owner=nobody group=root - template_utf8 is changed
- template_utf8_actual.content | b64decode(encoding='utf-8') == expected_content + "\r\n"
#- name: set file mode when the destination is a directory - name: template a file with windows-1252 encoding
# win_template: src=foo.j2 dest={{win_output_dir | expanduser}}/template-dir/ mode=0600 owner=root group=root win_template:
src: foo.utf-8.j2
dest: '{{ win_output_dir }}\foo.encoding.txt'
output_encoding: windows-1252
register: template_windows_1252
#- name: set file mode when the destination is a directory - name: slurp windows-1252 encoding
# win_template: src=foo.j2 dest={{win_output_dir | expanduser}}/template-dir/ mode=0600 owner=root group=root slurp:
# register: file_result path: '{{ win_output_dir }}\foo.encoding.txt'
# register: template_windows_1252_actual
#- name: check that the file has the correct attributes
# win_stat: path={{win_output_dir | expanduser}}/template-dir/foo.j2 - name: assert template a file with windows-1252 encoding
# register: file_attrs assert:
# that:
#- assert: - template_windows_1252 is changed
# that: - template_windows_1252_actual.content | b64decode(encoding='windows-1252') == expected_content + "\r\n"
# - "file_attrs.stat.uid == 0"
# - "file_attrs.stat.pw_name == 'root'"
# - "file_attrs.stat.mode == '0600'"
#
#- name: check that the containing directory did not change attributes
# win_stat: path={{win_output_dir | expanduser}}/template-dir/
# register: dir_attrs
#
#- assert:
# that:
# - "dir_attrs.stat.uid != 0"
# - "dir_attrs.stat.pw_name == 'nobody'"
# - "dir_attrs.stat.mode == '0755'"

View file

@ -0,0 +1 @@
—café— - {{ templated_var }}