diff options
Diffstat (limited to 'ipmi.sh')
-rwxr-xr-x | ipmi.sh | 183 |
1 files changed, 183 insertions, 0 deletions
@@ -0,0 +1,183 @@ +function configure { + hosts=$1 + shift + + if [ -n "$1" -a -f "ansible/$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 -i inventories/ipe.erb -l $hosts $play "$@" + ) +} + +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 + + 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 + + set_bootdev $host + ipmi $host power on + sleep $sleep +} + +function reboot { + host=$1 + + ipmi $host power off + sleep 10 + + set_bootdev $host + ipmi $host power on + sleep $sleep +} + +function bios { + host=$1 + + ipmi $host power off + sleep 10 + ipmi $host chassis bootdev 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 [#-#] <config|install|reboot|boot|wait>" + echo "$0 [#] <cmd>" + 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" +else + shift=0 + action="cmd" +fi + +if [ $shift -eq 1 ]; then + shift +fi + + +if [ $action = "configure" ]; 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 |