file: fix setting attributes for symlinked file (#57217)

This commit is contained in:
Martin Krizek 2019-06-05 15:25:43 +02:00 committed by GitHub
parent 206f18dcca
commit 705d0201cf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 2 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- file - fix setting attributes for symlinked file (https://github.com/ansible/ansible/issues/56928)

View file

@ -635,7 +635,6 @@ def ensure_symlink(path, src, follow, force, timestamps):
b_path = to_bytes(path, errors='surrogate_or_strict')
b_src = to_bytes(src, errors='surrogate_or_strict')
prev_state = get_state(b_path)
file_args = module.load_file_common_arguments(module.params)
mtime = get_timestamp_for_time(timestamps['modification_time'], timestamps['modification_time_format'])
atime = get_timestamp_for_time(timestamps['access_time'], timestamps['access_time_format'])
# source is both the source of a symlink or an informational passing of the src for a template module
@ -732,6 +731,12 @@ def ensure_symlink(path, src, follow, force, timestamps):
if module.check_mode and not os.path.exists(b_path):
return {'dest': path, 'src': src, 'changed': changed, 'diff': diff}
# Now that we might have created the symlink, get the arguments.
# We need to do it now so we can properly follow the symlink if needed
# because load_file_common_arguments sets 'path' according
# the value of follow and the symlink existance.
file_args = module.load_file_common_arguments(module.params)
# Whenever we create a link to a nonexistent target we know that the nonexistent target
# cannot have any permissions set on it. Skip setting those and emit a warning (the user
# can set follow=False to remove the warning)

View file

@ -5,7 +5,7 @@
#
# Basic absolute symlink to a file
#
#
- name: create soft link to file
file: src={{output_file}} dest={{output_dir}}/soft.txt state=link
register: file1_result
@ -308,3 +308,40 @@
that:
- 'file10_result is changed'
- 'file10_target_stat["stat"]["mode"] == "0644"'
# https://github.com/ansible/ansible/issues/56928
- block:
- name: Create a testing file
file:
path: "{{ output_dir }}/test_follow1"
state: touch
- name: Create a symlink and change mode of the original file, since follow == yes by default
file:
src: "{{ output_dir }}/test_follow1"
dest: "{{ output_dir }}/test_follow1_link"
state: link
mode: 0700
- name: stat the original file
stat:
path: "{{ output_dir }}/test_follow1"
register: stat_out
- name: Check if the mode of the original file was set
assert:
that:
- 'stat_out.stat.mode == "0700"'
always:
- name: Clean up
file:
path: "{{ item }}"
state: absent
loop:
- "{{ output_dir }}/test_follow1"
- "{{ output_dir }}/test_follow1_link"
# END #56928