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/).
|
||||
- Documentation on the template formatting can be found in the
|
||||
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
|
||||
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:
|
||||
|
|
|
@ -19,15 +19,17 @@ description:
|
|||
(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/)).
|
||||
- "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
|
||||
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, and 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."
|
||||
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:
|
||||
src:
|
||||
|
|
|
@ -141,7 +141,7 @@ class ActionModule(ActionBase):
|
|||
|
||||
# add ansible 'template' vars
|
||||
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
|
||||
self._templar.set_available_variables(temp_vars)
|
||||
|
|
|
@ -84,20 +84,22 @@ else:
|
|||
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)
|
||||
try:
|
||||
template_uid = pwd.getpwuid(os.stat(b_path).st_uid).pw_name
|
||||
except (KeyError, TypeError):
|
||||
template_uid = os.stat(b_path).st_uid
|
||||
|
||||
temp_vars = {}
|
||||
temp_vars['template_host'] = to_text(os.uname()[1])
|
||||
temp_vars['template_path'] = path
|
||||
temp_vars['template_mtime'] = datetime.datetime.fromtimestamp(os.path.getmtime(b_path))
|
||||
temp_vars['template_uid'] = to_text(template_uid)
|
||||
temp_vars['template_fullpath'] = os.path.abspath(path)
|
||||
temp_vars['template_run_date'] = datetime.datetime.now()
|
||||
temp_vars = {
|
||||
'template_host': to_text(os.uname()[1]),
|
||||
'template_path': path,
|
||||
'template_mtime': datetime.datetime.fromtimestamp(os.path.getmtime(b_path)),
|
||||
'template_uid': to_text(template_uid),
|
||||
'template_fullpath': os.path.abspath(path),
|
||||
'template_run_date': datetime.datetime.now(),
|
||||
'template_destpath': to_native(dest_path) if dest_path else None,
|
||||
}
|
||||
|
||||
managed_default = C.DEFAULT_MANAGED_STR
|
||||
managed_str = managed_default.format(
|
||||
|
|
|
@ -667,5 +667,23 @@
|
|||
- list_var.1.foo is not defined
|
||||
- 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
|
||||
- include: backup_test.yml
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
{{ template_destpath }}
|
Loading…
Reference in a new issue