Benjamin Renard commited on 2011-10-27 11:39:59
Showing 2 changed files, with 108 additions and 0 deletions.
| ... | ... |
@@ -0,0 +1,21 @@ |
| 1 |
+RouteVia |
|
| 2 |
+======== |
|
| 3 |
+ |
|
| 4 |
+Description |
|
| 5 |
+----------- |
|
| 6 |
+ |
|
| 7 |
+Wrapper of OCF RA Route, based on original heartbeat RA. See OCF RA Route for more information. |
|
| 8 |
+ |
|
| 9 |
+Instalation |
|
| 10 |
+----------- |
|
| 11 |
+ |
|
| 12 |
+Put RouteVia script in /etc/ha.d/resource.d/ directory |
|
| 13 |
+ |
|
| 14 |
+Usage |
|
| 15 |
+----- |
|
| 16 |
+ |
|
| 17 |
+In haressources file, added : |
|
| 18 |
+ |
|
| 19 |
+node1 RouteVia::172.20.0.0/16/172.24.0.1 |
|
| 20 |
+ |
|
| 21 |
+for network 172.20.0.0/16 via 172.24.0.1. |
| ... | ... |
@@ -0,0 +1,87 @@ |
| 1 |
+#!/bin/bash |
|
| 2 |
+# |
|
| 3 |
+# |
|
| 4 |
+# Description: wrapper of OCF RA Route, based on original heartbeat RA. |
|
| 5 |
+# See OCF RA Route for more information. |
|
| 6 |
+# |
|
| 7 |
+# Author: Benjamin Renard <brenard@easter-eggs.com> |
|
| 8 |
+# License: GNU General Public License (GPL) |
|
| 9 |
+# Copyright: (C) 2011 Easter-eggs |
|
| 10 |
+# |
|
| 11 |
+# This script manages IP route via a gateway |
|
| 12 |
+# |
|
| 13 |
+# It can add an IP route, or remove one. |
|
| 14 |
+# |
|
| 15 |
+# usage: $0 ip-network-destination/netmaskbits/ip-gateway \ |
|
| 16 |
+# {start|stop|status|monitor}
|
|
| 17 |
+# |
|
| 18 |
+# The "start" arg adds an IP route. |
|
| 19 |
+# |
|
| 20 |
+# The "stop" arg removes one. |
|
| 21 |
+# |
|
| 22 |
+DEBUG=0 |
|
| 23 |
+ |
|
| 24 |
+function usage {
|
|
| 25 |
+ echo "Usage : $0 [-h|--help] route/cidr/via {start|stop|status}"
|
|
| 26 |
+} |
|
| 27 |
+ |
|
| 28 |
+[ "$1" == "-h" -o "$1" == "--help" ] && usage && exit 0 |
|
| 29 |
+ |
|
| 30 |
+config=$1 |
|
| 31 |
+ |
|
| 32 |
+function verif_ip {
|
|
| 33 |
+ ip="$1" |
|
| 34 |
+ [ ! -n "$ip" ] && return 1 |
|
| 35 |
+ [ "$( echo -n "$ip"|sed "s/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*//" )" != "" ] && return 1 |
|
| 36 |
+ o1=$( echo "$ip"|cut -d'.' -f1 ) |
|
| 37 |
+ [ "$o1" == "" ] && return 2 |
|
| 38 |
+ [ $o1 -gt 254 ] && return 2 |
|
| 39 |
+ o2=$( echo "$ip"|cut -d'.' -f2 ) |
|
| 40 |
+ [ "$o2" == "" ] && return 3 |
|
| 41 |
+ [ $o2 -gt 254 ] && return 3 |
|
| 42 |
+ o3=$( echo "$ip"|cut -d'.' -f3 ) |
|
| 43 |
+ [ "$o3" == "" ] && return 4 |
|
| 44 |
+ [ $o3 -gt 254 ] && return 4 |
|
| 45 |
+ o4=$( echo "$ip"|cut -d'.' -f4 ) |
|
| 46 |
+ [ "$o4" == "" ] && return 5 |
|
| 47 |
+ [ $o4 -gt 254 ] && return 5 |
|
| 48 |
+ return 0 |
|
| 49 |
+} |
|
| 50 |
+ |
|
| 51 |
+function verif_cidr {
|
|
| 52 |
+ cidr="$1" |
|
| 53 |
+ [ ! -n "$cidr" ] && return 1 |
|
| 54 |
+ [ "$( echo -n "$cidr"|sed 's/[0-9]*//' )" != '' ] && return 2 |
|
| 55 |
+ [ $cidr -gt 32 ] && return 3 |
|
| 56 |
+ return 0 |
|
| 57 |
+} |
|
| 58 |
+ |
|
| 59 |
+. /etc/ha.d/resource.d//hto-mapfuncs |
|
| 60 |
+ |
|
| 61 |
+# Route |
|
| 62 |
+route=$( echo "$config"|cut -d'/' -f1 ) |
|
| 63 |
+[ $DEBUG -eq 1 ] && echo "Route : $route" |
|
| 64 |
+verif_ip "$route" |
|
| 65 |
+res=$? |
|
| 66 |
+[ $res -ne 0 ] && echo "[ERROR] Route is not valid" && usage && exit $res |
|
| 67 |
+ |
|
| 68 |
+# CIDR |
|
| 69 |
+cidr=$( echo "$config"|cut -d'/' -f2 ) |
|
| 70 |
+[ $DEBUG -eq 1 ] && echo "CIDR : $cidr" |
|
| 71 |
+verif_cidr "$cidr" |
|
| 72 |
+res=$? |
|
| 73 |
+[ $res -ne 0 ] && echo "[ERROR] CIDR is not valid" && usage && exit $res |
|
| 74 |
+export OCF_RESKEY_destination="$route/$cidr" |
|
| 75 |
+ |
|
| 76 |
+# Via |
|
| 77 |
+via=$( echo "$config"|cut -d'/' -f3 ) |
|
| 78 |
+[ $DEBUG -eq 1 ] && echo "Via : $via" |
|
| 79 |
+verif_ip "$via" |
|
| 80 |
+res=$? |
|
| 81 |
+[ $res -ne 0 ] && echo "[ERROR] Via host is not valid" && usage && exit $res |
|
| 82 |
+export OCF_RESKEY_gateway="$via" |
|
| 83 |
+ |
|
| 84 |
+export OCF_TYPE=Route |
|
| 85 |
+export OCF_RESOURCE_INSTANCE=${OCF_TYPE}_${OCF_RESKEY_destination}_${OCF_RESKEY_gateway}
|
|
| 86 |
+ |
|
| 87 |
+ra_execocf $2 |
|
| 0 | 88 |