diff --git a/lib/ansible/runner/action_plugins/synchronize.py b/lib/ansible/runner/action_plugins/synchronize.py index c66fcdff3c..8bd0bcd0f5 100644 --- a/lib/ansible/runner/action_plugins/synchronize.py +++ b/lib/ansible/runner/action_plugins/synchronize.py @@ -30,7 +30,10 @@ class ActionModule(object): def _process_origin(self, host, path, user): if not host in ['127.0.0.1', 'localhost']: - return '%s@%s:%s' % (user, host, path) + if user: + return '%s@%s:%s' % (user, host, path) + else: + return '%s:%s' % (host, path) else: return path @@ -38,7 +41,10 @@ class ActionModule(object): transport = self.runner.transport return_data = None if not host in ['127.0.0.1', 'localhost'] or transport != "local": - return_data = '%s@%s:%s' % (user, host, path) + if user: + return_data = '%s@%s:%s' % (user, host, path) + else: + return_data = '%s:%s' % (host, path) else: return_data = path @@ -122,13 +128,14 @@ class ActionModule(object): if process_args or use_delegate: user = None - if use_delegate: - user = inject['hostvars'][conn.delegate].get('ansible_ssh_user') - - if not use_delegate or not user: - user = inject.get('ansible_ssh_user', - self.runner.remote_user) + if utils.boolean(options.get('set_remote_user', 'yes')): + if use_delegate: + user = inject['hostvars'][conn.delegate].get('ansible_ssh_user') + if not use_delegate or not user: + user = inject.get('ansible_ssh_user', + self.runner.remote_user) + if use_delegate: # FIXME private_key = inject.get('ansible_ssh_private_key_file', self.runner.private_key_file) diff --git a/library/files/synchronize b/library/files/synchronize index eb556c30f5..1401a326fa 100644 --- a/library/files/synchronize +++ b/library/files/synchronize @@ -119,6 +119,12 @@ options: - Specify a --timeout for the rsync command in seconds. default: 10 required: false + set_remote_user: + description: + - put user@ for the remote paths. If you have a custom ssh config to define the remote user for a host + that does not match the inventory user, you should set this parameter to "no". + default: yes + required: false notes: - Inspect the verbose output to validate the destination user/host/path are what was expected. @@ -189,6 +195,7 @@ def main(): times = dict(type='bool'), owner = dict(type='bool'), group = dict(type='bool'), + set_remote_user = dict(default='yes', type='bool'), rsync_timeout = dict(type='int', default=10) ), supports_check_mode = True