diff --git a/lib/ansible/modules/files/file.py b/lib/ansible/modules/files/file.py index 4ec22b5b7a4..341728e631b 100644 --- a/lib/ansible/modules/files/file.py +++ b/lib/ansible/modules/files/file.py @@ -392,6 +392,8 @@ def main(): elif prev_state == 'link': b_old_src = os.readlink(b_path) if b_old_src != b_src: + diff['before']['src'] = to_native(b_old_src, errors='strict') + diff['after']['src'] = src changed = True elif prev_state == 'hard': if not (state == 'hard' and os.stat(b_path).st_ino == os.stat(b_src).st_ino): diff --git a/test/integration/targets/file/tasks/main.yml b/test/integration/targets/file/tasks/main.yml index 91d6f8ed0dd..14f99fdd110 100644 --- a/test/integration/targets/file/tasks/main.yml +++ b/test/integration/targets/file/tasks/main.yml @@ -97,6 +97,26 @@ that: - "file5_result.changed == true" +- name: change soft link to relative + file: src={{output_file|basename}} dest={{output_dir}}/soft.txt state=link + register: file5a_result + +- name: verify that the file was marked as changed + assert: + that: + - "file5a_result.changed == true" + - "file5a_result.diff.before.src == output_file|expanduser" + - "file5a_result.diff.after.src == output_file|basename" + +- name: soft link idempotency check + file: src={{output_file|basename}} dest={{output_dir}}/soft.txt state=link + register: file5b_result + +- name: verify that the file was not marked as changed + assert: + that: + - "file5b_result.changed == false" + - name: create hard link to file file: src={{output_file}} dest={{output_dir}}/hard.txt state=hard register: file6_result