mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-06-29 19:50:25 -07:00
synchronize: add support for buildah (#33823)
Fixes #33533 Signed-off-by: Tomas Tomecek <ttomecek@redhat.com>
This commit is contained in:
parent
c9e9422133
commit
0587aedc01
7 changed files with 114 additions and 13 deletions
|
@ -59,8 +59,8 @@ class ActionModule(ActionBase):
|
|||
if path.startswith('rsync://'):
|
||||
return path
|
||||
|
||||
# If using docker, do not add user information
|
||||
if self._remote_transport not in ['docker'] and user:
|
||||
# If using docker or buildah, do not add user information
|
||||
if self._remote_transport not in ['docker', 'buildah'] and user:
|
||||
user_prefix = '%s@' % (user, )
|
||||
|
||||
if self._host_is_ipv6_address(host):
|
||||
|
@ -188,12 +188,16 @@ class ActionModule(ActionBase):
|
|||
except (AttributeError, KeyError):
|
||||
delegate_to = None
|
||||
|
||||
# ssh paramiko docker and local are fully supported transports. Anything
|
||||
# ssh paramiko docker buildah and local are fully supported transports. Anything
|
||||
# else only works with delegate_to
|
||||
if delegate_to is None and self._connection.transport not in ('ssh', 'paramiko', 'local', 'docker'):
|
||||
if delegate_to is None and self._connection.transport not in \
|
||||
('ssh', 'paramiko', 'local', 'docker', 'buildah'):
|
||||
result['failed'] = True
|
||||
result['msg'] = ("synchronize uses rsync to function. rsync needs to connect to the remote host via ssh, docker client or a direct filesystem "
|
||||
"copy. This remote host is being accessed via %s instead so it cannot work." % self._connection.transport)
|
||||
result['msg'] = (
|
||||
"synchronize uses rsync to function. rsync needs to connect to the remote "
|
||||
"host via ssh, docker client or a direct filesystem "
|
||||
"copy. This remote host is being accessed via %s instead "
|
||||
"so it cannot work." % self._connection.transport)
|
||||
return result
|
||||
|
||||
use_ssh_args = _tmp_args.pop('use_ssh_args', None)
|
||||
|
@ -382,7 +386,7 @@ class ActionModule(ActionBase):
|
|||
|
||||
# If launching synchronize against docker container
|
||||
# use rsync_opts to support container to override rsh options
|
||||
if self._remote_transport in ['docker']:
|
||||
if self._remote_transport in ['docker', 'buildah']:
|
||||
# Replicate what we do in the module argumentspec handling for lists
|
||||
if not isinstance(_tmp_args.get('rsync_opts'), MutableSequence):
|
||||
tmp_rsync_opts = _tmp_args.get('rsync_opts', [])
|
||||
|
@ -394,12 +398,16 @@ class ActionModule(ActionBase):
|
|||
|
||||
if '--blocking-io' not in _tmp_args['rsync_opts']:
|
||||
_tmp_args['rsync_opts'].append('--blocking-io')
|
||||
if become and self._play_context.become_user:
|
||||
_tmp_args['rsync_opts'].append("--rsh=%s exec -u %s -i" % (self._docker_cmd, self._play_context.become_user))
|
||||
elif user is not None:
|
||||
_tmp_args['rsync_opts'].append("--rsh=%s exec -u %s -i" % (self._docker_cmd, user))
|
||||
else:
|
||||
_tmp_args['rsync_opts'].append("--rsh=%s exec -i" % self._docker_cmd)
|
||||
|
||||
if self._remote_transport in ['docker']:
|
||||
if become and self._play_context.become_user:
|
||||
_tmp_args['rsync_opts'].append("--rsh=%s exec -u %s -i" % (self._docker_cmd, self._play_context.become_user))
|
||||
elif user is not None:
|
||||
_tmp_args['rsync_opts'].append("--rsh=%s exec -u %s -i" % (self._docker_cmd, user))
|
||||
else:
|
||||
_tmp_args['rsync_opts'].append("--rsh=%s exec -i" % self._docker_cmd)
|
||||
elif self._remote_transport in ['buildah']:
|
||||
_tmp_args['rsync_opts'].append("--rsh=buildah run --")
|
||||
|
||||
# run the module and store the result
|
||||
result.update(self._execute_module('synchronize', module_args=_tmp_args, task_vars=task_vars))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue