summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Eckert <fe@dev.tdt.de>2018-10-25 09:55:15 +0200
committerFlorian Eckert <fe@dev.tdt.de>2018-11-12 15:20:20 +0100
commitb443dfe00b42bbb5a7ddd07c96e27d06cdbb19b2 (patch)
tree3d6f04bb31888828de6e260823242e32e8eac651
parent1df38a4495a5eae7e39d10b93b3c7264a2fa8ddd (diff)
keepalived: add ipvs uci support
Add uci ipvs support to keepalived. Signed-off-by: Florian Eckert <fe@dev.tdt.de>
-rw-r--r--net/keepalived/Makefile2
-rw-r--r--net/keepalived/files/keepalived.config54
-rw-r--r--net/keepalived/files/keepalived.init110
3 files changed, 165 insertions, 1 deletions
diff --git a/net/keepalived/Makefile b/net/keepalived/Makefile
index dfbed1b41..4f5e25119 100644
--- a/net/keepalived/Makefile
+++ b/net/keepalived/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=keepalived
PKG_VERSION:=2.0.7
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.keepalived.org/software
diff --git a/net/keepalived/files/keepalived.config b/net/keepalived/files/keepalived.config
index 7279381a8..5fde1f89d 100644
--- a/net/keepalived/files/keepalived.config
+++ b/net/keepalived/files/keepalived.config
@@ -145,3 +145,57 @@ config global_defs
# option fall "2"
# option rise "3"
+#config virtual_server
+# option enabled "1"
+# option ipaddr "192.168.200.2"
+# option port "80"
+# option fwmark "0x42"
+# option delay_loop "30"
+# valid values for lb_algo rr|wrr|lc|wlc
+# option lb_algo "rr"
+# valid values for lb_kind NAT|DR|TUN
+# option lb_kind "NAT"
+# option persistence_timeout "50"
+# option persistence_granularity "192.168.110.2"
+# option virtualhost "www.domain1.com"
+# valid values for protocol TCP|UDP
+# option protocol "TCP"
+# option sorry_server_ip "192.168.100.100"
+# option sorry_server_port "80"
+# list real_server "Server1"
+# list real_server "Server2"
+
+#config real_server
+# option enabled "1"
+# option name "Server1"
+# option weight "2"
+# option check "HTTP_GET"
+# only for check TCP_CHECK|HTTP_GET|SSL_GET
+# option connect_port "80"
+# option connect_timeout "3"
+# only for check MISC_CHECK
+# option misc_path "<user-defined-check-script>"
+# only for check HTTP_GET | SSL_GET
+# list url "url1"
+# list url "url2"
+# option nb_get_retry "3"
+# option delay_before_retry "2"
+
+#config real_server
+# option enabled "1"
+# option name "Server2"
+# option weight "2"
+# option check "TCP_CHECK"
+# option connect_port "80"
+# option connect_timeout "3"
+
+#config url
+# option name "url1"
+# option path "/testurl/test1.jsp"
+# option digest "11"
+
+#config url
+# option name "url2"
+# option path "/testurl/test2.jsp"
+# option digest "22"
+
diff --git a/net/keepalived/files/keepalived.init b/net/keepalived/files/keepalived.init
index 49c64f016..70e0b7310 100644
--- a/net/keepalived/files/keepalived.init
+++ b/net/keepalived/files/keepalived.init
@@ -10,6 +10,8 @@ KEEPALIVED_CONF=/tmp/keepalived.conf
INDENT_1=\\t
INDENT_2=$INDENT_1$INDENT_1
+INDENT_3=$INDENT_1$INDENT_1$INDENT_1
+INDENT_4=$INDENT_1$INDENT_1$INDENT_1$INDENT_1
config_section_open() {
local tag=$1
@@ -366,6 +368,113 @@ vrrp_script() {
config_section_close
}
+url() {
+ local url="$2"
+
+ local name path digest
+
+ config_get name $1 name
+ [ "$url" = "$name" ] || return 0
+
+ config_get path $1 path
+ config_get digest $1 digest
+
+ [ -n "$digest" -a -n "$path" ] && {
+ printf "${INDENT_3}url {\n" >> $KEEPALIVED_CONF
+ printf "${INDENT_4}path "$path"\n" >> $KEEPALIVED_CONF
+ printf "${INDENT_4}digest $digest\n" >> $KEEPALIVED_CONF
+ printf "${INDENT_3}}\n" >> $KEEPALIVED_CONF
+ }
+}
+
+url_list() {
+ config_foreach url url "$1"
+}
+
+real_server() {
+ local server="$2"
+
+ local enabled name weight ipaddr port check
+
+ config_get_bool enabled $1 enabled 1
+ [ "$enabled" -eq 1 ] || return 0
+
+ config_get name $1 name
+ [ "$server" = "$name" ] || return 0
+
+ config_get weight $1 weight
+ [ -n "$weight" ] || return 0
+
+ config_get ipaddr $1 ipaddr
+ config_get port $1 port
+ config_get check $1 check
+
+ [ -n "$ipaddr" -a -n "$port" ] && {
+ printf "${INDENT_1}real_server $ipaddr $port {\n" >> $KEEPALIVED_CONF
+ printf "${INDENT_2}weight $weight\n" >> $KEEPALIVED_CONF
+ case "$check" in
+ TCP_CHECK)
+ printf "${INDENT_2}${check} {\n" >> $KEEPALIVED_CONF
+ print_elems_indent $1 $INDENT_3 connect_timeout \
+ connect_port
+ printf "${INDENT_2}}\n" >> $KEEPALIVED_CONF
+ ;;
+ MISC_CHECK)
+ printf "${INDENT_2}${check} {\n" >> $KEEPALIVED_CONF
+ print_elems_indent $1 $INDENT_3 misc_path
+ printf "${INDENT_2}}\n" >> $KEEPALIVED_CONF
+ ;;
+ HTTP_GET | SSL_GET)
+ printf "${INDENT_2}${check} {\n" >> $KEEPALIVED_CONF
+ print_elems_indent $1 $INDENT_3 connect_timeout \
+ connect_port nb_get_retry delay_before_retry
+ # Handle url list
+ config_list_foreach $1 url url_list
+ printf "${INDENT_2}}\n" >> $KEEPALIVED_CONF
+ ;;
+ esac
+ printf "${INDENT_1}}\n" >> $KEEPALIVED_CONF
+ }
+}
+
+real_server_list() {
+ config_foreach real_server real_server "$1"
+}
+
+virtual_server() {
+ local enabled ipaddr port lb_algo sorry_server_ip sorry_server_port
+
+ config_get_bool enabled $1 enabled 1
+ [ "$enabled" -eq 1 ] || return 0
+
+ config_get ipaddr $1 ipaddr
+ [ -z "$ipaddr" ] && return 0
+ config_get port $1 port
+ [ -z "$port" ] && return 0
+
+ config_section_open "virtual_server" "$ipaddr $port"
+
+ print_elems_indent $1 $INDENT_1 fwmark delay_loop \
+ lb_kind persistence_timeout persistence_granularity \
+ virtualhost protocol
+
+ config_get lb_algo $1 lb_algo
+ [ -z "$lb_algo" ] && lb_algo="rr"
+ modprobe ip_vs_${lb_algo} 2>&1 1>/dev/null
+ printf "${INDENT_1}lb_algo ${lb_algo}\n" >> $KEEPALIVED_CONF
+
+ config_get sorry_server_ip $1 sorry_server_ip
+ config_get sorry_server_port $1 sorry_server_port
+ [ -n "$sorry_server_ip" -a -n "$sorry_server_port" ] && {
+ printf "${INDENT_1}sorry_server $sorry_server_ip $sorry_server_port\n" >> $KEEPALIVED_CONF
+ }
+
+ # Handle real_server list
+ config_list_foreach $1 real_server real_server_list
+
+ config_section_close
+}
+
process_config() {
local alt_config_file
@@ -401,6 +510,7 @@ process_config() {
config_foreach_wrapper vrrp_script
config_foreach_wrapper vrrp_sync_group
config_foreach_wrapper vrrp_instance
+ config_foreach_wrapper virtual_server
return 0
}