file: fix setting attributes for symlinked file (#57217)
This commit is contained in:
parent
206f18dcca
commit
705d0201cf
3 changed files with 46 additions and 2 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- file - fix setting attributes for symlinked file (https://github.com/ansible/ansible/issues/56928)
|
|
@ -635,7 +635,6 @@ def ensure_symlink(path, src, follow, force, timestamps):
|
||||||
b_path = to_bytes(path, errors='surrogate_or_strict')
|
b_path = to_bytes(path, errors='surrogate_or_strict')
|
||||||
b_src = to_bytes(src, errors='surrogate_or_strict')
|
b_src = to_bytes(src, errors='surrogate_or_strict')
|
||||||
prev_state = get_state(b_path)
|
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'])
|
mtime = get_timestamp_for_time(timestamps['modification_time'], timestamps['modification_time_format'])
|
||||||
atime = get_timestamp_for_time(timestamps['access_time'], timestamps['access_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
|
# 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):
|
if module.check_mode and not os.path.exists(b_path):
|
||||||
return {'dest': path, 'src': src, 'changed': changed, 'diff': diff}
|
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
|
# 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
|
# cannot have any permissions set on it. Skip setting those and emit a warning (the user
|
||||||
# can set follow=False to remove the warning)
|
# can set follow=False to remove the warning)
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
#
|
#
|
||||||
# Basic absolute symlink to a file
|
# Basic absolute symlink to a file
|
||||||
#
|
#
|
||||||
- name: create soft link to file
|
- name: create soft link to file
|
||||||
file: src={{output_file}} dest={{output_dir}}/soft.txt state=link
|
file: src={{output_file}} dest={{output_dir}}/soft.txt state=link
|
||||||
register: file1_result
|
register: file1_result
|
||||||
|
@ -308,3 +308,40 @@
|
||||||
that:
|
that:
|
||||||
- 'file10_result is changed'
|
- 'file10_result is changed'
|
||||||
- 'file10_target_stat["stat"]["mode"] == "0644"'
|
- '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
|
||||||
|
|
Loading…
Reference in a new issue