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:
parent
4c1f52c6c0
commit
652bfc7e19
5 changed files with 166 additions and 231 deletions
|
@ -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
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
|
@ -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'''
|
||||||
|
|
122
lib/ansible/plugins/doc_fragments/template_common.py
Normal file
122
lib/ansible/plugins/doc_fragments/template_common.py
Normal 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.
|
||||||
|
'''
|
|
@ -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'"
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
—café— - {{ templated_var }}
|
Loading…
Reference in a new issue