diff --git a/changelogs/fragments/file_touch_check_mode.yaml b/changelogs/fragments/file_touch_check_mode.yaml new file mode 100644 index 00000000000..41166d0a877 --- /dev/null +++ b/changelogs/fragments/file_touch_check_mode.yaml @@ -0,0 +1,5 @@ +--- +bugfixes: +- file module - The touch subcommand had its diff output broken during the + 2.6.x development cycle. The patch to fix that broke check mode. + This is now fixed (https://github.com/ansible/ansible/issues/42111) diff --git a/lib/ansible/modules/files/file.py b/lib/ansible/modules/files/file.py index 6fc56224825..bf1ed8a7842 100644 --- a/lib/ansible/modules/files/file.py +++ b/lib/ansible/modules/files/file.py @@ -322,6 +322,9 @@ def execute_touch(path, follow): b_path = to_bytes(path, errors='surrogate_or_strict') prev_state = get_state(b_path) + # Unfortunately, touch always changes the file because it updates file's timestamp + result = {'dest': path, 'changed': True} + if not module.check_mode: if prev_state == 'absent': # Create an empty file if the filename did not already exist @@ -369,8 +372,8 @@ def execute_touch(path, follow): os.remove(b_path) raise - # Unfortunately, touch always changes the file because it updates file's timestamp - return {'dest': path, 'changed': True, 'diff': diff} + result['diff'] = diff + return result def ensure_file_attributes(path, follow):