diff options
Diffstat (limited to 'net/keepalived/files')
-rw-r--r-- | net/keepalived/files/keepalived.init | 26 | ||||
-rw-r--r-- | net/keepalived/files/usr/libexec/rpcd/keepalived | 96 |
2 files changed, 120 insertions, 2 deletions
diff --git a/net/keepalived/files/keepalived.init b/net/keepalived/files/keepalived.init index 4f73cb6df..39e9f4742 100644 --- a/net/keepalived/files/keepalived.init +++ b/net/keepalived/files/keepalived.init @@ -100,6 +100,7 @@ globals() { printf '%bscript_user root\n' "${INDENT_1}" >> "$KEEPALIVED_CONF" printf '%benable_script_security\n' "${INDENT_1}" >> "$KEEPALIVED_CONF" + printf '%bprocess_names\n' "${INDENT_1}" >> "$KEEPALIVED_CONF" config_get notification_email "$1" notification_email print_list_indent notification_email @@ -126,6 +127,7 @@ print_ipaddress_indent() { config_get address "$section" address config_get device "$section" device config_get scope "$section" scope + config_get label_suffix "$section" label_suffix vip # Default indent [ -z "$indent" ] && indent="$INDENT_1" @@ -137,7 +139,7 @@ print_ipaddress_indent() { printf '%b%s' "$indent" "$address" >> "$KEEPALIVED_CONF" else # Add IP address/netmask and device - printf '%b%s dev %s' "$indent" "$address" "$device">> "$KEEPALIVED_CONF" + printf '%b%s dev %s label %s' "$indent" "$address" "$device" "$device:$label_suffix" >> "$KEEPALIVED_CONF" # Add scope [ -n "$scope" ] && printf ' scope %s' "$scope" >> "$KEEPALIVED_CONF" fi @@ -196,7 +198,27 @@ print_route_indent() { # Add table [ -n "$table" ] && printf ' table %s' "$table" >> "$KEEPALIVED_CONF" printf '\n' >> "$KEEPALIVED_CONF" +} + +print_track_script_indent() { + local section="$1" + local curr_track_elem="$2" + local indent="$3" + + local name value weight direction + config_get name "$section" name + [ "$name" != "$curr_track_elem" ] && return 0 + config_get value "$section" value + config_get weight "$section" weight + config_get direction "$section" direction + + [ -z "$value" ] && return 0 + [ "$direction" != "reverse" ] && [ "$direction" != "noreverse" ] && unset direction + + printf '%b%s' "$indent" "$value" >> "$KEEPALIVED_CONF" + [ -n "$weight" ] && printf ' weight %s' "$weight ${direction:+${direction}}" >> "$KEEPALIVED_CONF" + printf '\n' >> "$KEEPALIVED_CONF" } print_track_elem_indent() { @@ -349,7 +371,7 @@ vrrp_instance() { [ -z "$optval" ] && continue printf '%b%s {\n' "${INDENT_1}" "$opt" >> "$KEEPALIVED_CONF" for t in $optval; do - printf '%b%s\n' "${INDENT_2}" "$optval" >> "$KEEPALIVED_CONF" + config_foreach print_track_script_indent track_script "$t" "$INDENT_2" done printf '%b}\n' "${INDENT_1}" >> "$KEEPALIVED_CONF" done diff --git a/net/keepalived/files/usr/libexec/rpcd/keepalived b/net/keepalived/files/usr/libexec/rpcd/keepalived new file mode 100644 index 000000000..2ae14f105 --- /dev/null +++ b/net/keepalived/files/usr/libexec/rpcd/keepalived @@ -0,0 +1,96 @@ +#!/bin/sh + +. /lib/functions.sh +. /usr/share/libubox/jshn.sh + +RPC_SCRIPTS=/usr/libexec/keepalived/rpc + +[ -d $RPC_SCRIPTS ] && include $RPC_SCRIPTS + +__function__() { + type "$1" > /dev/null 2>&1 +} + +foreach_extra() { + local file obj + + [ ! -d $RPC_SCRIPTS ] && return + + for file in $RPC_SCRIPTS/*; do + obj="${file##*/}" + $1 "${obj%%.*}" + done +} + +keepalived_dump() { + local stats_file="/tmp/keepalived.json" + local pids + + [ -f "$stats_file" ] && rm -f "$stats_file" + + pids=$(pidof /usr/sbin/keepalived) + if [ -n "$pids" ]; then + kill -37 $pids > /dev/null 2>&1 + json_load "{ \"status\" : $(cat $stats_file) }" + else + json_init + fi + + json_dump +} + +call_extra() { + if __function__ "$1"; then + $1 + else + json_init + json_add_string error "invalid call $1" + json_dump + fi +} + +call_method() { + case "$1" in + dump) + keepalived_dump + ;; + *) + call_extra $1 + ;; + esac +} + +list_extra() { + if __function__ "${1}_help"; then + ${1}_help + else + json_add_object "$1" + json_close_object + fi +} + +list_methods() { + local file + + json_init + + json_add_object dump + json_close_object + + foreach_extra list_extra ${1} + + json_dump +} + +main () { + case "$1" in + list) + list_methods + ;; + call) + call_method $2 + ;; + esac +} + +main "$@" |