user="ADMIN" pass='$ipepdv$' sleep=0.5 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 '$ipepdv$' "$@" } function configure { host=$1 ipmi $host chassis bootdev disk persistent cons_redirect=enable verbose=default sleep 0.5 } function install { host=$1 # Requires license # smipmi $host wsiso mount 192.168.26.134 /images/centos74-ands.iso ipmi $host power off sleep 10 ipmi $host chassis bootdev cdrom sleep $sleep ipmi $host power on } function boot { host=$1 configure $host ipmi $host power on sleep $sleep } function reboot { host=$1 ipmi $host power off sleep 10 ipmi $host power on sleep $sleep } 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 else servers=$(seq 1 3) fi iip=$(for i in $servers ; do echo "192.168.26.4$i" ; done) shift=1 if [ -z "$1" ]; then echo "$0 [#-#] " echo "$0 [#] " exit elif [[ "$1" =~ config ]]; then action="configure" elif [[ "$1" =~ install ]]; then action="install" elif [[ "$1" =~ reboot ]]; then action="reboot" elif [[ "$1" =~ boot ]]; then action="boot" elif [[ "$1" =~ status ]]; then action="status" elif [[ "$1" =~ wait ]]; then action="wait_off" else shift=0 action="cmd" fi if [ $shift -eq 1 ]; then shift fi for ip in $iip; do eval "$action" "$ip" "$@" done if [ $action = "install" ]; then sleep 30 for ip in $iip; do wait_off "$ip" "$@" configure "$ip" "$@" # boot "$iip" "$@" done fi