|
|
|
@ -1,6 +1,6 @@ |
|
|
|
|
#!/bin/sh |
|
|
|
|
# |
|
|
|
|
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org) |
|
|
|
|
# 2011 Nico Schottelius (nico-cdist at schottelius.org) |
|
|
|
|
# |
|
|
|
|
# This file is part of cdist. |
|
|
|
|
# |
|
|
|
@ -18,64 +18,31 @@ |
|
|
|
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>. |
|
|
|
|
# |
|
|
|
|
# |
|
|
|
|
# FIXME: Replace * references: * breaks if there is no explorer |
|
|
|
|
# or FIXME: check that there is at least one explorer? |
|
|
|
|
# Push a directory to a target, both sides have the same name (i.e. explorers) |
|
|
|
|
# |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
. cdist-config |
|
|
|
|
if [ $# -lt 5 ]; then |
|
|
|
|
__cdist_usage "<target host> <local srcdir> <local dstdir> <remote srcdir> <remote dstdir> [explorer args]" |
|
|
|
|
if [ $# -lt 3 ]; then |
|
|
|
|
__cdist_usage "<target host> <local src dir> <remote dst dir>" |
|
|
|
|
fi |
|
|
|
|
set -ue |
|
|
|
|
|
|
|
|
|
__cdist_target_host="$1"; shift |
|
|
|
|
|
|
|
|
|
__cdist_local_src_dir="$1"; shift |
|
|
|
|
__cdist_local_dst_dir="$1"; shift |
|
|
|
|
__cdist_remote_src_dir="$1"; shift |
|
|
|
|
__cdist_remote_dst_dir="$1"; shift |
|
|
|
|
|
|
|
|
|
# Create remote source and destination directory |
|
|
|
|
ssh "${__cdist_remote_user}@${__cdist_target_host}" \ |
|
|
|
|
"mkdir -p \"${__cdist_remote_src_dir}\" \ |
|
|
|
|
\"${__cdist_remote_dst_dir}\"" |
|
|
|
|
|
|
|
|
|
# Ensure local destination directory exists |
|
|
|
|
mkdir -p "$__cdist_local_dst_dir" |
|
|
|
|
|
|
|
|
|
# FIXME: enable -q as soon as the code is cleaned up |
|
|
|
|
cd "${__cdist_local_src_dir}" |
|
|
|
|
|
|
|
|
|
# Ensure there is at least one explorer |
|
|
|
|
num="$(ls -1 | wc -l)" |
|
|
|
|
if [ "$num" -lt 1 ]; then |
|
|
|
|
__cdist_exit_err "${__cdist_local_src_dir}: Contains no explorers" |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
# Copy all explorers to remote source directory |
|
|
|
|
scp * "${__cdist_remote_user}@${__cdist_target_host}:${__cdist_remote_src_dir}" |
|
|
|
|
# This will be the destination directory, so no subdirectories |
|
|
|
|
# of the same name are created, if the directory is already existing |
|
|
|
|
__cdist_remote_top_dir="${__cdist_remote_dst_dir%/*}" |
|
|
|
|
|
|
|
|
|
# Execute all explorers |
|
|
|
|
for explorer in *; do |
|
|
|
|
if [ -f "$explorer" ]; then |
|
|
|
|
if [ ! -x "$explorer" ]; then |
|
|
|
|
echo "Explorer \"$explorer\" exists, but is not executable." |
|
|
|
|
continue |
|
|
|
|
fi |
|
|
|
|
# The directory name itself |
|
|
|
|
__cdist_remote_base_dir="${__cdist_remote_dst_dir##*/}" |
|
|
|
|
|
|
|
|
|
# Execute explorers and save results in remote destination directory |
|
|
|
|
ssh "${__cdist_remote_user}@${__cdist_target_host}" \ |
|
|
|
|
"cd \"${__cdist_remote_src_dir}\" && \"./$explorer\" > \ |
|
|
|
|
\"${__cdist_remote_dst_dir}/${explorer}\"" "$@" |
|
|
|
|
else |
|
|
|
|
if [ -e "$explorer" ]; then |
|
|
|
|
echo "Explorer \"$explorer\" exists, but is not a file." |
|
|
|
|
continue |
|
|
|
|
fi |
|
|
|
|
fi |
|
|
|
|
done |
|
|
|
|
# Create remote destination directory |
|
|
|
|
ssh "${__cdist_remote_user}@${__cdist_target_host}" \ |
|
|
|
|
"mkdir -p \"${__cdist_remote_dst_dir}\"" |
|
|
|
|
|
|
|
|
|
# Copy results back to us |
|
|
|
|
scp "${__cdist_remote_user}@${__cdist_target_host}:${__cdist_remote_dst_dir}/*" \ |
|
|
|
|
"$__cdist_local_dst_dir" |
|
|
|
|
# The actual transfer |
|
|
|
|
scp -r "$__cdist_local_src_dir" \ |
|
|
|
|
"${__cdist_remote_user}@${__cdist_target_host}:${__cdist_remote_top_dir}" |
|
|
|
|