cdist/bin/cdist-mass-deploy

67 lines
1.6 KiB
Bash
Executable File

#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Deploy configuration to many hosts
#
. cdist-config
[ $# -ge 1 ] || __cdist_usage "[-p] <target host> [target host ]"
set -eu
filter()
{
awk -v host=$1 '{ print "[" host "] " $0 }'
}
parallel=""
if [ "$1" = "-p" ]; then
parallel=yes
shift
fi
i=0
while [ $# -ge 1 ]; do
if [ "$parallel" ]; then
cdist-deploy-to "$1" | filter &
# Record pid and host for use later
eval pid_$i=$!
eval host_$i=\$1
i=$((i+1))
else
cdist-deploy-to "$1" | filter
fi
shift
done
# else wait after all are started
if [ "$parallel" ]; then
__cdist_echo info "Waiting for cdist-deploy-to jobs to finish"
while [ "$i" -gt 0 ]; do
eval pid=\$pid_$i
eval host=\$host_$i
wait "$pid"
if [ $? -ne 0 ]; then
__cdist_echo error "Configuration of host $host failed."
fi
i=$((i-1))
shift
done
fi