Skip to content

Instantly share code, notes, and snippets.

@fikovnik
Last active August 29, 2015 14:08
Show Gist options
  • Save fikovnik/fd54f6a5e9bff0cd449f to your computer and use it in GitHub Desktop.
Save fikovnik/fd54f6a5e9bff0cd449f to your computer and use it in GitHub Desktop.
Hacked MAAS ether_wake.template to allow to power on / off over WOL in the case the cluster controller has multiple interfaces
# -*- mode: shell-script -*-
#
# Control node power through WOL, via `wakeonlan` or `etherwake`.
#
mac_address={{mac_address}}
power_change={{power_change}}
ip_address={{node_ip_address}}
#if [ -n "${ip_address}" ]
#then
# iface="$( ip route show to match "{{ip_address}}" | sed -n '/^default/! s/^.* dev \([^ ]*\).*$/\1/p' )"
# local_broadcast="$( ip addr show dev "${iface}" | sed -n '/^[[:space:]]*inet/ s/^.* brd \([^ ]*\) .*$/\1/p' )"
#fi
echo "${power_change} ${ip_address} ${mac_address}" >> /tmp/power
if [ "${power_change}" != 'on' ]
then
#echo "There is no way to power down a node through etherwake." >&2
#exit 1
if [ -n "${ip_address}" ]
then
#ssh -vv -i /etc/maas/stack-access-key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@${ip_address} -C "echo 'sleep 2 && sudo /sbin/poweroff -f' | at now" >> /tmp/power 2>&1
ssh -i /etc/maas/stack-access-key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@${ip_address} -C "echo 'sleep 2 && sudo /sbin/poweroff -f' | at now"
else
echo "Unable to power down a node using etherwake without ip address." >&2
exit 1
fi
elif [ -x /usr/bin/wakeonlan ]
then
/usr/bin/wakeonlan -i "192.168.0.255" $mac_address
#if [ -n "${local_broadcast}" ]
#then
# /usr/bin/wakeonlan -i "${local_broadcast}" $mac_address
#else
# /usr/bin/wakeonlan $mac_address
#fi
elif [ -x /usr/sbin/etherwake ]
then
if [ -n "${iface}" ]
then
/usr/sbin/etherwake -i "${iface}" $mac_address
else
/usr/sbin/etherwake $mac_address
fi
else
echo "No wakeonlan or etherwake program found." >&2
fi
exit 0
@foolsh
Copy link

foolsh commented Jan 29, 2015

What version of MAAS is this for? I'm running the recent PPA version of MAAS, and I get an oops ip_address not defined. But just looking around, couldn't we use arp to assign an IP address if we fail to get node_ip_address, as a fail safe? I'm new to MAAS, and this would be just great to get working and fault tolerant, as half my nodes are desktops ;) Nice script hacking!

@kaimast
Copy link

kaimast commented May 27, 2015

I think it is just ip_address={{ip_address}}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment