no special case for rsync in core. handle implementation specific details in remote-copy script instead

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
Steven Armstrong 2012-05-29 11:02:23 +02:00
parent 21b85e410e
commit 5edf39f111
2 changed files with 19 additions and 7 deletions

View File

@ -77,12 +77,7 @@ class Remote(object):
self.log.debug("Remote transfer: %s -> %s", source, destination) self.log.debug("Remote transfer: %s -> %s", source, destination)
self.rmdir(destination) self.rmdir(destination)
command = self._copy.split() command = self._copy.split()
# support rsync by appending a "/" to the source if it's a directory command.extend(["-r", source, self.target_host + ":" + destination])
if os.path.isdir(source):
command.extend(["-r", source + "/", self.target_host + ":" + destination])
else:
command.extend(["-r", source, self.target_host + ":" + destination])
self._run_command(command) self._run_command(command)
def run_script(self, script, env=None, return_output=False): def run_script(self, script, env=None, return_output=False):

View File

@ -24,7 +24,24 @@
# at /etc/passwd~cdist. # at /etc/passwd~cdist.
# #
# Usage: # Usage:
# __remote_copy="/path/to/this/script" cdist config target_host # cdist config --remote-copy /path/to/this/script target_host
# #
# second last argument is the source
source_index=$(($#-1))
index=0
for arg in $@; do
if [ $index -eq 0 ]; then
# reset $@
set --
fi
index=$((index+=1))
if [ $index -eq $source_index -a -d "$arg" ]; then
echo "directory: $arg" | logger
# if the source is a directory, it has to end with "/" for rsync to do the right thing
arg="${arg%/}/"
fi
set -- "$@" "$arg"
done
rsync --backup --suffix=~cdist -e 'ssh -o User=root' $@ rsync --backup --suffix=~cdist -e 'ssh -o User=root' $@