From 7faa041636decd1d0f6eb16bca88d43ed2dc175c Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Tue, 20 Dec 2016 16:03:21 -0500 Subject: [PATCH] added file flag preservation to atomic_move preserves existing flag info if possible --- lib/ansible/module_utils/basic.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/ansible/module_utils/basic.py b/lib/ansible/module_utils/basic.py index 50aad659d0..ee1686509e 100644 --- a/lib/ansible/module_utils/basic.py +++ b/lib/ansible/module_utils/basic.py @@ -2007,8 +2007,22 @@ class AnsibleModule(object): if os.path.exists(b_dest): try: dest_stat = os.stat(b_dest) + + # copy mode and ownership os.chmod(b_src, dest_stat.st_mode & PERM_BITS) os.chown(b_src, dest_stat.st_uid, dest_stat.st_gid) + + # try to copy flags if possible + if hasattr(os, 'chflags') and hasattr(dest_stat, 'st_flags'): + try: + os.chflags(b_src, dest_stat.st_flags) + except OSError: + e = get_exception() + for err in 'EOPNOTSUPP', 'ENOTSUP': + if hasattr(errno, err) and e.errno == getattr(errno, err): + break + else: + raise except OSError: e = get_exception() if e.errno != errno.EPERM: