summaryrefslogtreecommitdiffstats
path: root/ipmi.sh
diff options
context:
space:
mode:
authorSuren A. Chilingaryan <csa@suren.me>2018-07-05 06:46:09 +0200
committerSuren A. Chilingaryan <csa@suren.me>2018-07-05 06:46:09 +0200
commitd65dd50278fec1b253fcd3fe4cfcdab533f20cc8 (patch)
treec7d91ab246242b85b41267d110150be0ec40fd31 /ipmi.sh
downloadipmiboot-d65dd50278fec1b253fcd3fe4cfcdab533f20cc8.tar.gz
ipmiboot-d65dd50278fec1b253fcd3fe4cfcdab533f20cc8.tar.bz2
ipmiboot-d65dd50278fec1b253fcd3fe4cfcdab533f20cc8.tar.xz
ipmiboot-d65dd50278fec1b253fcd3fe4cfcdab533f20cc8.zip
Spliting from Ands
Diffstat (limited to 'ipmi.sh')
-rwxr-xr-xipmi.sh183
1 files changed, 183 insertions, 0 deletions
diff --git a/ipmi.sh b/ipmi.sh
new file mode 100755
index 0000000..5e0901e
--- /dev/null
+++ b/ipmi.sh
@@ -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