mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-24 11:21:25 -07:00
fix(tasks: synchronize): wrap in sshpass if ssh password was provided (#30743)
* fix(tasks: synchronize): wrap in sshpass if ssh password was provided Closes #16616 * fix(tasks: synchronize): pass rsync password to sshpass via fd * fix(tasks: synchronize): use fail_json instead of AnsibleError * fixup! fix(tasks: synchronize): use fail_json instead of AnsibleError fix python2 handling * feat(module_utils: basic: run_command): add optional arguments `pass_fds` and `before_communicate_callback` * fix(tasks: synchronize): use module.run_command instead of subprocess.Popen * fixup! fix(tasks: synchronize): use module.run_command instead of subprocess.Popen remove unused import * fixup! fixup! fix(tasks: synchronize): use module.run_command instead of subprocess.Popen pass_fds only if they passed to run_command()
This commit is contained in:
parent
7f3c21f628
commit
14037443de
3 changed files with 45 additions and 3 deletions
|
@ -2695,7 +2695,7 @@ class AnsibleModule(object):
|
|||
|
||||
def run_command(self, args, check_rc=False, close_fds=True, executable=None, data=None, binary_data=False, path_prefix=None, cwd=None,
|
||||
use_unsafe_shell=False, prompt_regex=None, environ_update=None, umask=None, encoding='utf-8', errors='surrogate_or_strict',
|
||||
expand_user_and_vars=True):
|
||||
expand_user_and_vars=True, pass_fds=None, before_communicate_callback=None):
|
||||
'''
|
||||
Execute a command, returns rc, stdout, and stderr.
|
||||
|
||||
|
@ -2738,6 +2738,13 @@ class AnsibleModule(object):
|
|||
are expanded before running the command. When ``True`` a string such as
|
||||
``$SHELL`` will be expanded regardless of escaping. When ``False`` and
|
||||
``use_unsafe_shell=False`` no path or variable expansion will be done.
|
||||
:kw pass_fds: When running on python3 this argument
|
||||
dictates which file descriptors should be passed
|
||||
to an underlying ``Popen`` constructor.
|
||||
:kw before_communicate_callback: This function will be called
|
||||
after ``Popen`` object will be created
|
||||
but before communicating to the process.
|
||||
(``Popen`` object will be passed to callback as a first argument)
|
||||
:returns: A 3-tuple of return code (integer), stdout (native string),
|
||||
and stderr (native string). On python2, stdout and stderr are both
|
||||
byte strings. On python3, stdout and stderr are text strings converted
|
||||
|
@ -2839,6 +2846,8 @@ class AnsibleModule(object):
|
|||
stderr=subprocess.PIPE,
|
||||
preexec_fn=self._restore_signal_handlers,
|
||||
)
|
||||
if PY3 and pass_fds:
|
||||
kwargs["pass_fds"] = pass_fds
|
||||
|
||||
# store the pwd
|
||||
prev_dir = os.getcwd()
|
||||
|
@ -2861,6 +2870,8 @@ class AnsibleModule(object):
|
|||
if self._debug:
|
||||
self.log('Executing: ' + self._clean_args(args))
|
||||
cmd = subprocess.Popen(args, **kwargs)
|
||||
if before_communicate_callback:
|
||||
before_communicate_callback(cmd)
|
||||
|
||||
# the communication logic here is essentially taken from that
|
||||
# of the _communicate() function in ssh.py
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue