4809c2332ff5d6d881aac19fbbd5dc95a5c15c45
[ctdb.git] / config / ctdb-crash-cleanup.sh
1 #!/bin/sh
2 #
3 # This script can be called from a cronjob to automatically drop/release
4 # all public ip addresses if CTDBD has crashed or stopped running.
5 #
6
7 [ -z "$CTDB_BASE" ] && {
8     CTDB_BASE=/etc/ctdb
9 }
10
11 [ -z "$CTDB_PUBLIC_ADDRESSES" ] && {
12         CTDB_PUBLIC_ADDRESSES=$CTDB_BASE/public_addresses
13 }
14
15 [ ! -f "$CTDB_PUBLIC_ADDRESSES" ] && {
16         echo "No public addresses file found. Cant cleanup."
17         exit 1
18 }
19
20 PATH=/sbin:/usr/sbin:/bin:/usr/bin:$PATH
21
22 # if ctdb is running, just return
23 service ctdb status >/dev/null 2>&1 && {
24     exit 0
25 }
26
27 (cat /etc/sysconfig/ctdb | egrep "^CTDB_NATGW_PUBLIC_IP" | sed -e "s/.*=//" -e "s/\/.*//";cat "$CTDB_PUBLIC_ADDRESSES" | cut -d/ -f1) | while read _IP; do
28         _IP_HELD=`/sbin/ip addr show | grep "inet $_IP/"`
29         [ -z "$_IP_HELD" ] || {
30                 _IFACE=`echo $_IP_HELD | sed -e "s/.*\s//"`
31                 _NM=`echo $_IP_HELD | sed -e "s/.*$_IP\///" -e "s/\s.*//"`
32                 logger "Removing public address $_IP/$_NM from device $_IFACE"
33                 /sbin/ip addr del $_IP/$_NM dev $_IFACE
34         }
35 done
36
37