From d8526a6c80ed63f1ee6c0bbba1ffaf303e4e1dff Mon Sep 17 00:00:00 2001 From: James Cammarata Date: Wed, 14 May 2014 09:59:12 -0500 Subject: [PATCH] Only chown on atomic move if the uid/gid don't match the src/tmp file This is a corner case for remote file systems that don't support chown() and where the source and destination for the atomic_move are on that remote file system. Fixes #7372 --- lib/ansible/module_utils/basic.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ansible/module_utils/basic.py b/lib/ansible/module_utils/basic.py index c0b00d38652..681a973801e 100644 --- a/lib/ansible/module_utils/basic.py +++ b/lib/ansible/module_utils/basic.py @@ -1010,7 +1010,8 @@ class AnsibleModule(object): if self.selinux_enabled(): self.set_context_if_different( tmp_dest.name, context, False) - if dest_stat: + tmp_stat = os.stat(tmp_dest.name) + if dest_stat and (tmp_stat.st_uid != dest_stat.st_uid or tmp_stat.st_gid != dest_stat.st_gid): os.chown(tmp_dest.name, dest_stat.st_uid, dest_stat.st_gid) os.rename(tmp_dest.name, dest) except (shutil.Error, OSError, IOError), e: