template: add additional variable for dest path (#52015)
Signed-off-by: Dustin Spicuzza <dustin@virtualroadside.com> Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
parent
13fa284946
commit
24d1886499
6 changed files with 41 additions and 17 deletions
|
@ -22,13 +22,14 @@ description:
|
||||||
- Templates are processed by the L(Jinja2 templating language,http://jinja.pocoo.org/docs/).
|
- Templates are processed by the L(Jinja2 templating language,http://jinja.pocoo.org/docs/).
|
||||||
- Documentation on the template formatting can be found in the
|
- Documentation on the template formatting can be found in the
|
||||||
L(Template Designer Documentation,http://jinja.pocoo.org/docs/templates/).
|
L(Template Designer Documentation,http://jinja.pocoo.org/docs/templates/).
|
||||||
- The six additional variables, listed below, can be used in template.
|
- 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
|
- 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.
|
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_host) contains the node name of the template's machine.
|
||||||
- C(template_uid) is the numeric user id of the owner.
|
- C(template_uid) is the numeric user id of the owner.
|
||||||
- C(template_path) is the path of the template.
|
- C(template_path) is the path of the template.
|
||||||
- C(template_fullpath) is 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.
|
- C(template_run_date) is the date that the template was rendered.
|
||||||
options:
|
options:
|
||||||
src:
|
src:
|
||||||
|
|
|
@ -19,15 +19,17 @@ description:
|
||||||
(U(http://jinja.pocoo.org/docs/)) - documentation on the template
|
(U(http://jinja.pocoo.org/docs/)) - documentation on the template
|
||||||
formatting can be found in the Template Designer Documentation
|
formatting can be found in the Template Designer Documentation
|
||||||
(U(http://jinja.pocoo.org/docs/templates/)).
|
(U(http://jinja.pocoo.org/docs/templates/)).
|
||||||
- "Six additional variables can be used in templates: C(ansible_managed)
|
- "Additional variables can be used in templates: C(ansible_managed)
|
||||||
(configurable via the C(defaults) section of C(ansible.cfg)) contains a string
|
(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
|
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
|
template file and the owner uid."
|
||||||
the template's machine, C(template_uid) the owner, C(template_path) the
|
- "C(template_host) contains the node name of the template's machine."
|
||||||
absolute path of the template, C(template_fullpath) is the absolute path of the
|
- "C(template_uid) the owner."
|
||||||
template, and C(template_run_date) is the date that the template was rendered. Note that including
|
- "C(template_path) the absolute path of the template."
|
||||||
a string that uses a date in the template will result in the template being marked 'changed'
|
- "C(template_fullpath) is the absolute path of the template."
|
||||||
each time."
|
- "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).
|
- For other platforms you can use M(template) which uses '\n' as C(newline_sequence).
|
||||||
options:
|
options:
|
||||||
src:
|
src:
|
||||||
|
|
|
@ -141,7 +141,7 @@ class ActionModule(ActionBase):
|
||||||
|
|
||||||
# add ansible 'template' vars
|
# add ansible 'template' vars
|
||||||
temp_vars = task_vars.copy()
|
temp_vars = task_vars.copy()
|
||||||
temp_vars.update(generate_ansible_template_vars(source))
|
temp_vars.update(generate_ansible_template_vars(source, dest))
|
||||||
|
|
||||||
old_vars = self._templar._available_variables
|
old_vars = self._templar._available_variables
|
||||||
self._templar.set_available_variables(temp_vars)
|
self._templar.set_available_variables(temp_vars)
|
||||||
|
|
|
@ -84,20 +84,22 @@ else:
|
||||||
from jinja2.utils import concat as j2_concat
|
from jinja2.utils import concat as j2_concat
|
||||||
|
|
||||||
|
|
||||||
def generate_ansible_template_vars(path):
|
def generate_ansible_template_vars(path, dest_path=None):
|
||||||
b_path = to_bytes(path)
|
b_path = to_bytes(path)
|
||||||
try:
|
try:
|
||||||
template_uid = pwd.getpwuid(os.stat(b_path).st_uid).pw_name
|
template_uid = pwd.getpwuid(os.stat(b_path).st_uid).pw_name
|
||||||
except (KeyError, TypeError):
|
except (KeyError, TypeError):
|
||||||
template_uid = os.stat(b_path).st_uid
|
template_uid = os.stat(b_path).st_uid
|
||||||
|
|
||||||
temp_vars = {}
|
temp_vars = {
|
||||||
temp_vars['template_host'] = to_text(os.uname()[1])
|
'template_host': to_text(os.uname()[1]),
|
||||||
temp_vars['template_path'] = path
|
'template_path': path,
|
||||||
temp_vars['template_mtime'] = datetime.datetime.fromtimestamp(os.path.getmtime(b_path))
|
'template_mtime': datetime.datetime.fromtimestamp(os.path.getmtime(b_path)),
|
||||||
temp_vars['template_uid'] = to_text(template_uid)
|
'template_uid': to_text(template_uid),
|
||||||
temp_vars['template_fullpath'] = os.path.abspath(path)
|
'template_fullpath': os.path.abspath(path),
|
||||||
temp_vars['template_run_date'] = datetime.datetime.now()
|
'template_run_date': datetime.datetime.now(),
|
||||||
|
'template_destpath': to_native(dest_path) if dest_path else None,
|
||||||
|
}
|
||||||
|
|
||||||
managed_default = C.DEFAULT_MANAGED_STR
|
managed_default = C.DEFAULT_MANAGED_STR
|
||||||
managed_str = managed_default.format(
|
managed_str = managed_default.format(
|
||||||
|
|
|
@ -667,5 +667,23 @@
|
||||||
- list_var.1.foo is not defined
|
- list_var.1.foo is not defined
|
||||||
- list_var.1.foo | default('DEFAULT') == 'DEFAULT'
|
- list_var.1.foo | default('DEFAULT') == 'DEFAULT'
|
||||||
|
|
||||||
|
- template:
|
||||||
|
src: template_destpath_test.j2
|
||||||
|
dest: "{{ output_dir }}/template_destpath.templated"
|
||||||
|
|
||||||
|
- copy:
|
||||||
|
content: "{{ output_dir}}/template_destpath.templated\n"
|
||||||
|
dest: "{{ output_dir }}/template_destpath.expected"
|
||||||
|
|
||||||
|
- name: compare templated file to known good template_destpath
|
||||||
|
shell: diff -uw {{output_dir}}/template_destpath.templated {{output_dir}}/template_destpath.expected
|
||||||
|
register: diff_result
|
||||||
|
|
||||||
|
- name: verify templated template_destpath matches known good
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- 'diff_result.stdout == ""'
|
||||||
|
- "diff_result.rc == 0"
|
||||||
|
|
||||||
# aliases file requires root for template tests so this should be safe
|
# aliases file requires root for template tests so this should be safe
|
||||||
- include: backup_test.yml
|
- include: backup_test.yml
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
{{ template_destpath }}
|
Loading…
Reference in a new issue