function configure { hosts=$1 shift if [ -n "$1" -a -f "$itm/$1.yml" ]; then play="$1.yml" shift else play="install.yml" fi ( cd $itm || { echo "ITM (Ansible scripts) are not found"; exit 1; } # ansible-playbook -i inventories/ipe.erb -l localhost,$hosts ssh.yml ansible-playbook --vault-password-file=.vault-pass -i inventories/ipe.erb -l $hosts $play "$@" ) } function update { hosts=$1 shift ( cd $itm || { echo "ITM (Ansible scripts) are not found"; exit 1; } ANSIBLE_GATHER_SUBSET="!hardware" ansible-playbook --vault-password-file=.vault-pass -i inventories/ipe.erb -l $hosts "update.yml" "$@" ) } function run { hosts=$1 shift ( cd $itm || { echo "ITM (Ansible scripts) are not found"; exit 1; } eval ansible all -b -u root --vault-password-file=.vault-pass -i inventories/ipe.erb -l $hosts --args="'$@'" ) } function smipmi_cmd { echo "- Running: SMCIPMITool " echo "$@" /opt/smcipmi/SMCIPMITool "$@" } function smipmi { host=$1 shift smipmi_cmd $host ADMIN '$ipepdv$' "$@" } function ipmi_cmd { echo -n "- Running: ipmitool " echo "$@" /usr/sbin/ipmitool "$@" } function ipmi { host=$1 shift ipmi_cmd -H $host -U ADMIN -P $pass "$@" } function set_bootdev { host=$1 device=${2:-disk} persistent=${3:-} ipmi $host chassis bootdev $device $persistent cons_redirect=enable verbose=default sleep $sleep # ipmi $host chassis bootparam set bootflag force_$device # sleep $sleep } function install { host=$1 # Requires license # smipmi $host wsiso mount 192.168.26.172 /images/centos74-ands.iso # off is soft-off on compute2, so we need reset first. #ipmi $host power reset ipmi $host power off sleep 10 set_bootdev $host cdrom sleep $sleep ipmi $host power on } function boot { host=$1 set_bootdev $host disk persistent ipmi $host power on sleep $sleep } function reboot { host=$1 ipmi $host power off sleep 10 set_bootdev $host disk persistent sleep $sleep ipmi $host power on sleep $sleep } function bios { host=$1 ipmi $host power off sleep 10 set_bootdev $host bios sleep $sleep ipmi $host power on } function status { host=$1 ipmi $host power status | grep "off" &> /dev/null if [ $? -ne 0 ]; then echo 1; else echo 0; fi } function wait_off { host=$1 on=1 while [ 1 ]; do on=$(status $host) [ "$on" -eq 0 ] && break echo " - $host still running..." sleep 5 done } function cmd { ipmi "$@" } if [[ "$1" =~ ^[0-9\-]+$ ]]; then IFS='-' read -ra range <<< "$1" if [ -n "${range[1]}" ]; then servers=$(seq ${range[0]} ${range[1]}) else servers=$(seq ${range[0]} ${range[0]}) fi shift fi source config.sh pass=$(pass $passpath | head -n 1) shift=1 if [ -z "$1" ]; then echo "$0 [#-#] " echo "$0 [#] " exit elif [[ "$1" =~ set_bootdev ]]; then action="set_bootdev" elif [[ "$1" =~ install ]]; then action="install" elif [[ "$1" =~ reboot ]]; then action="reboot" elif [[ "$1" =~ boot ]]; then action="boot" elif [[ "$1" =~ bios ]]; then action="bios" elif [[ "$1" =~ status ]]; then action="status" elif [[ "$1" =~ wait ]]; then action="wait_off" elif [[ "$1" =~ config ]]; then action="configure" elif [[ "$1" =~ update ]]; then action="update" elif [[ "$1" =~ run ]]; then action="run" else shift=0 action="cmd" fi if [ $shift -eq 1 ]; then shift fi if [ $action = "configure" -o $action = "update" -o $action = "run" ]; then list=$(echo $hip | sed -re 's/\s+/ /g' | tr ' ' ',') eval "$action" "$list" "$@" exit fi for ip in $iip; do eval "$action" "$ip" "$@" done if [ $action = "install" ]; then sleep 30 for ip in $iip; do wait_off "$ip" "$@" set_bootdev "$ip" "$@" # boot "$iip" "$@" done fi