#!/bin/bash # # Execute commands on multiple nodes. # # Issue commands with pssh function mass_pssh { hydra_check_command parallel-ssh parallel-ssh -t 120 -P -p 4 -h $TMPWORK sudo $COMMAND } # Issue commands with a for loop function mass_loop { for node in `cat $TMPWORK`; do echo "Connecting to $node..." $HYDRA_CONNECT $node sudo $COMMAND done } # Issue commands with dish function mass_dish { hydra_check_command dish dish -f -p /dev/null -e "sudo $COMMAND" -g $TMPWORK } # Issue commands with mussh function mass_mussh { hydra_check_command mussh mussh -H $TMPWORK -c "sudo $COMMAND" } # Set nodes function set_nodes { hydra_set_tmpfile nodes hydra $HYDRA nodes $1 > $TMPWORK } # Load source $APP_BASE/lib/hydra/functions || exit 1 hydra_config_load # Command line arguments BASENAME="`basename $0`" COMMAND="$*" # Initial node list BASEDIR="/tmp" set_nodes # Validation if [ "$BASENAME" == "mass-update" ]; then COMMAND="aptitude update" elif [ "$BASENAME" == "mass-upgrade" ]; then COMMAND="aptitude safe-upgrade -y" elif [ "$BASENAME" == "mass-web" ]; then set_nodes web fi # Execute commands in hosts echo "Issuing $COMMAND on multiple nodes..." mass_pssh $COMMAND hydra_unset_tmpfile $TMPWORK