#!/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 -u # Kill children on interrupt - only in interactive scripts trap __cdist_kill_on_interrupt INT TERM filter() { awk -v host=$1 '{ print "[" host "] " $0 }' } parallel="" if [ "$1" = "-p" ]; then parallel=yes shift fi i=0 while [ $# -gt 0 ]; do if [ "$parallel" ]; then cdist-deploy-to "$1" | filter "$1" & # Record pid and host for use later i=$((i+1)) eval pid_$i=$! eval host_$i=\$1 else cdist-deploy-to "$1" | filter "$1" fi shift done e=0 if [ "$parallel" ]; then __cdist_echo info "Waiting for cdist-deploy-to jobs to finish" while [ "$i" -gt 0 ]; do eval pid=\$pid_$i wait "$pid" if [ $? -ne 0 ]; then e=$((e+1)) eval e_host_$e=\$host_$i fi i=$((i-1)) done fi # Display all failed hosts after all runs are done, so the sysadmin gets them while [ "$e" -gt 0 ]; do eval host=\$host_$e __cdist_echo error "Configuration of host $host failed." e=$((e-1)) done