mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-05-06 21:32:49 +00:00
Fixes for mode=preserve (#39343)
* Fixes for mode=preserve * Document mode=preserve for template and copy * Make mode=preserve work with remote_src for copy * Make mode=preserve work for template * Integration tests for copy & template mode=preserve Fixes #39279 * Changed mode option in win_copy to hidden option as it doesn't reflect copy mode
This commit is contained in:
@@ -19,6 +19,7 @@ __metaclass__ = type
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import stat
|
||||
import tempfile
|
||||
|
||||
from ansible import constants as C
|
||||
@@ -105,6 +106,10 @@ class ActionModule(ActionBase):
|
||||
except AnsibleError as e:
|
||||
raise AnsibleActionFail(to_text(e))
|
||||
|
||||
mode = self._task.args.get('mode', None)
|
||||
if mode == 'preserve':
|
||||
mode = '0%03o' % stat.S_IMODE(os.stat(source).st_mode)
|
||||
|
||||
# Get vault decrypted tmp file
|
||||
try:
|
||||
tmp_source = self._loader.get_real_file(source)
|
||||
@@ -157,6 +162,9 @@ class ActionModule(ActionBase):
|
||||
self._loader.cleanup_tmp_file(tmp_source)
|
||||
|
||||
new_task = self._task.copy()
|
||||
# mode is either the mode from task.args or the mode of the source file if the task.args
|
||||
# mode == 'preserve'
|
||||
new_task.args['mode'] = mode
|
||||
new_task.args.pop('newline_sequence', None)
|
||||
new_task.args.pop('block_start_string', None)
|
||||
new_task.args.pop('block_end_string', None)
|
||||
|
||||
@@ -275,7 +275,7 @@ class ActionModule(ActionBase):
|
||||
dest=dest,
|
||||
src=tmp_src,
|
||||
original_basename=source_rel,
|
||||
mode="single"
|
||||
_copy_mode="single"
|
||||
)
|
||||
)
|
||||
copy_args.pop('content', None)
|
||||
@@ -317,7 +317,7 @@ class ActionModule(ActionBase):
|
||||
dict(
|
||||
src=tmp_src,
|
||||
dest=dest,
|
||||
mode="explode"
|
||||
_copy_mode="explode"
|
||||
)
|
||||
)
|
||||
copy_args.pop('content', None)
|
||||
@@ -380,7 +380,7 @@ class ActionModule(ActionBase):
|
||||
new_module_args = self._task.args.copy()
|
||||
new_module_args.update(
|
||||
dict(
|
||||
mode="remote",
|
||||
_copy_mode="remote",
|
||||
dest=dest,
|
||||
src=source,
|
||||
force=force
|
||||
@@ -467,7 +467,7 @@ class ActionModule(ActionBase):
|
||||
query_args = self._task.args.copy()
|
||||
query_args.update(
|
||||
dict(
|
||||
mode="query",
|
||||
_copy_mode="query",
|
||||
dest=check_dest,
|
||||
force=force,
|
||||
files=source_files['files'],
|
||||
|
||||
Reference in New Issue
Block a user