From 9d763ef628b309e9bb30fbb16489d4986cdcfd49 Mon Sep 17 00:00:00 2001 From: Jaime Melis Date: Mon, 29 May 2017 17:49:30 +0200 Subject: [PATCH] F #4809: Fully working vip hooks --- install.sh | 3 +-- share/etc/oned.conf | 34 ++++++++++++++++++++++++---------- share/hooks/raft/follower.sh | 11 ----------- share/hooks/raft/leader.sh | 11 ----------- share/hooks/raft/vip.sh | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 57 insertions(+), 34 deletions(-) delete mode 100755 share/hooks/raft/follower.sh delete mode 100755 share/hooks/raft/leader.sh create mode 100755 share/hooks/raft/vip.sh diff --git a/install.sh b/install.sh index df77692cda..96216b1deb 100755 --- a/install.sh +++ b/install.sh @@ -1281,8 +1281,7 @@ HOOK_FT_FILES="share/hooks/ft/host_error.rb \ # HOOK RAFT scripts, to be installed under $VAR_LOCATION/remotes/hooks/raft #------------------------------------------------------------------------------- -HOOK_RAFT_FILES="share/hooks/raft/leader.sh \ - share/hooks/raft/follower.sh" +HOOK_RAFT_FILES="share/hooks/raft/vip.sh" #------------------------------------------------------------------------------- # Installation scripts, to be installed under $SHARE_LOCATION diff --git a/share/etc/oned.conf b/share/etc/oned.conf index 62c390059f..b160771dd7 100644 --- a/share/etc/oned.conf +++ b/share/etc/oned.conf @@ -127,6 +127,18 @@ VNC_PORTS = [ # BROADCAST_TIMEOUT_MS: How often heartbeats are sent to followers. # XMLRPC_TIMEOUT_MS: To timeout raft related API calls # +# RAFT_LEADER_HOOK: Executed when a server transits from follower->leader +# The purpose of this hook is to configure the Virtual IP. +# COMMAND: raft/vip.sh is a fully working script, this should not be changed +# ARGUMENTS: and must be replaced. For example +# ARGUMENTS = "leader ens1 10.0.0.2/24" +# +# RAFT_FOLLOWER_HOOK: Executed when a server transits from leader->follower +# The purpose of this hook is to configure the Virtual IP. +# COMMAND: raft/vip.sh is a fully working script, this should not be changed +# ARGUMENTS: and must be replaced. For example +# ARGUMENTS = "follower ens1 10.0.0.2/24" +# # NOTE: Timeout tunning depends on the latency of the servers (network and load) # as well as the max downtime tolerated by the system. Timeouts needs to be # greater than 10ms @@ -148,6 +160,18 @@ RAFT = [ XMLRPC_TIMEOUT_MS = 100 ] +# Executed when a server transits from follower->leader +# RAFT_LEADER_HOOK = [ +# COMMAND = "raft/vip.sh", +# ARGUMENTS = "leader " +# ] + +# Executed when a server transits from leader->follower +# RAFT_FOLLOWER_HOOK = [ +# COMMAND = "raft/follower.sh", +# ARGUMENTS = "follower " +# ] + #******************************************************************************* # Default showback cost #------------------------------------------------------------------------------- @@ -743,16 +767,6 @@ IPAM_MAD = [ # the master OpenNebula. #------------------------------------------------------------------------------- -# Executed when a server transit from follower->leader -RAFT_LEADER_HOOK = [ - COMMAND = "raft/leader.sh" -] - -# Executed when a server transit from leader->follower -RAFT_FOLLOWER_HOOK = [ - COMMAND = "raft/follower.sh" -] - HM_MAD = [ EXECUTABLE = "one_hm" ] diff --git a/share/hooks/raft/follower.sh b/share/hooks/raft/follower.sh deleted file mode 100755 index c0289d5080..0000000000 --- a/share/hooks/raft/follower.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -e - -DIR=`dirname $0` -cd $DIR -cd ../../../../ - -SERVER=$(basename `pwd`) - -echo "`date +'%F %H:%M:%S'` [$SERVER] FOLLOWER HOOK" >> /tmp/raft_hooks.log - -exit 0 diff --git a/share/hooks/raft/leader.sh b/share/hooks/raft/leader.sh deleted file mode 100755 index 16f41b3c88..0000000000 --- a/share/hooks/raft/leader.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -e - -DIR=`dirname $0` -cd $DIR -cd ../../../../ - -SERVER=$(basename `pwd`) - -echo "`date +'%F %H:%M:%S'` [$SERVER] LEADER HOOK" >> /tmp/raft_hooks.log - -exit 0 diff --git a/share/hooks/raft/vip.sh b/share/hooks/raft/vip.sh new file mode 100755 index 0000000000..c48090be06 --- /dev/null +++ b/share/hooks/raft/vip.sh @@ -0,0 +1,32 @@ +#!/bin/bash -e + +ACTION="$1" +INTERFACE="$2" +IP="$3" + +if [ -z "$INTERFACE" ]; then + echo "Missing interface." >&2 + exit 1 +fi + +if [ -z "$IP" ]; then + echo "Missing IP." >&2 + exit 1 +fi + +case $ACTION in +leader) + sudo ip address add $IP dev $INTERFACE + ;; + +follower) + sudo ip address del $IP dev $INTERFACE + ;; + +*) + echo "Unknown action '$ACTION'" >&2 + exit 1 + ;; +esac + +exit 0