Fix template module incorrectly handling mode when dest is a directory

Fixes #9350
This commit is contained in:
Toshio Kuratomi 2014-10-20 22:15:46 -04:00
parent 1e12d3028c
commit feb9ed1de8
3 changed files with 41 additions and 5 deletions

@ -1 +1 @@
Subproject commit 5af8d55b0365a5c3278c43b5424bf5f2ddf897b8
Subproject commit fa6d74a97054d5d5123696d1af94b31ac1a65237

View file

@ -133,9 +133,12 @@ class ActionModule(object):
# when running the file module based on the template data, we do
# not want the source filename (the name of the template) to be used,
# since this would mess up links, so we clear the src param and tell
# the module to follow links
# the module to follow links. When doing that, we have to set
# original_basename to the template just in case the dest is
# a directory.
new_module_args = dict(
src=None,
original_basename=os.path.basename(source),
follow=True,
)
# be sure to inject the check mode param into the module args and

View file

@ -60,7 +60,40 @@
register: file_result
- name: ensure file mode did not change
assert:
that:
assert:
that:
- "file_result.changed != True"
# VERIFY dest as a directory does not break file attributes
# Note: expanduser is needed to go down the particular codepath that was broken before
- name: setup directory for test
file: state=directory dest={{output_dir | expanduser}}/template-dir mode=0755 owner=nobody group=nobody
- name: set file mode when the destination is a directory
template: src=foo.j2 dest={{output_dir | expanduser}}/template-dir/ mode=0600 owner=root group=root
- name: set file mode when the destination is a directory
template: src=foo.j2 dest={{output_dir | expanduser}}/template-dir/ mode=0600 owner=root group=root
register: file_result
- name: check that the file has the correct attributes
stat: path={{output_dir | expanduser}}/template-dir/foo.j2
register: file_attrs
- assert:
that:
- "file_attrs.stat.gid == 0"
- "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
stat: path={{output_dir | expanduser}}/template-dir/
register: dir_attrs
- assert:
that:
- "dir_attrs.stat.gid != 0"
- "dir_attrs.stat.uid != 0"
- "dir_attrs.stat.pw_name == 'nobody'"
- "dir_attrs.stat.mode == '0755'"