From 931326fb70f675266c4c92df62682d3231c9c608 Mon Sep 17 00:00:00 2001 From: pneerincx Date: Wed, 9 Dec 2020 18:19:32 +0100 Subject: [PATCH] Bugfix for #17492. --- plugins/action/synchronize.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/plugins/action/synchronize.py b/plugins/action/synchronize.py index 9fa43e8..eb58cf6 100644 --- a/plugins/action/synchronize.py +++ b/plugins/action/synchronize.py @@ -33,7 +33,13 @@ class ActionModule(ActionBase): def _get_absolute_path(self, path): original_path = path - if path.startswith('rsync://'): + # + # Check if we have a local relative path and do not process + # * remote paths (some.server.domain:/some/remote/path/...) + # * URLs (rsync://...) + # * local absolute paths (/some/local/path/...) + # + if ':' in path or path.startswith('/'): return path if self._task._role is not None: @@ -73,8 +79,7 @@ class ActionModule(ActionBase): if host not in C.LOCALHOST: return self._format_rsync_rsh_target(host, path, user) - if ':' not in path and not path.startswith('/'): - path = self._get_absolute_path(path=path) + path = self._get_absolute_path(path=path) return path def _process_remote(self, task_args, host, path, user, port_matches_localhost_port): @@ -103,8 +108,7 @@ class ActionModule(ActionBase): task_args['_substitute_controller'] = True return self._format_rsync_rsh_target(host, path, user) - if ':' not in path and not path.startswith('/'): - path = self._get_absolute_path(path=path) + path = self._get_absolute_path(path=path) return path def _override_module_replaced_vars(self, task_vars): @@ -348,10 +352,8 @@ class ActionModule(ActionBase): else: # Still need to munge paths (to account for roles) even if we aren't # copying files between hosts - if not src.startswith('/'): - src = self._get_absolute_path(path=src) - if not dest.startswith('/'): - dest = self._get_absolute_path(path=dest) + src = self._get_absolute_path(path=src) + dest = self._get_absolute_path(path=dest) _tmp_args['src'] = src _tmp_args['dest'] = dest