mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Add copy module support for filesystems without chmod (#40099)
* only relevant to remote_src=True * separate file content copying from file stats copying * raise exception on mode='preserve', ignore otherwise Fixes: #19731 Signed-off-by: Nikita Chepanov <nchepanov@bloomberg.net>
This commit is contained in:
parent
7d221c4663
commit
9514a618b7
1 changed files with 11 additions and 2 deletions
|
@ -233,6 +233,7 @@ import os
|
|||
import os.path
|
||||
import shutil
|
||||
import stat
|
||||
import errno
|
||||
import tempfile
|
||||
import traceback
|
||||
|
||||
|
@ -408,9 +409,17 @@ def main():
|
|||
b_mysrc = b_src
|
||||
if remote_src:
|
||||
_, b_mysrc = tempfile.mkstemp(dir=os.path.dirname(b_dest))
|
||||
shutil.copy2(b_src, b_mysrc)
|
||||
|
||||
shutil.copyfile(b_src, b_mysrc)
|
||||
try:
|
||||
shutil.copystat(b_src, b_mysrc)
|
||||
except OSError as err:
|
||||
if err.errno == errno.ENOSYS and mode == "preserve":
|
||||
module.warn("Unable to copy stats {0}".format(to_native(b_src)))
|
||||
else:
|
||||
raise
|
||||
module.atomic_move(b_mysrc, dest, unsafe_writes=module.params['unsafe_writes'])
|
||||
except IOError:
|
||||
except (IOError, OSError):
|
||||
module.fail_json(msg="failed to copy: %s to %s" % (src, dest), traceback=traceback.format_exc())
|
||||
changed = True
|
||||
else:
|
||||
|
|
Loading…
Reference in a new issue