-
-
Save SeonghoonKim/5385982 to your computer and use it in GitHub Desktop.
#! /bin/sh | |
# Set up a default search path | |
PATH="/usr/bin:/bin" | |
CURL=`which curl` | |
if [ -z "$CURL" ]; then | |
echo "curl not found" | |
exit 1 | |
fi | |
server="localhost" | |
port="80" | |
manager="balancer-manager" | |
while getopts "s:p:m:" opt; do | |
case "$opt" in | |
s) | |
server=$OPTARG | |
;; | |
p) | |
port=$OPTARG | |
;; | |
m) | |
manager=$OPTARG | |
;; | |
esac | |
done | |
shift $(($OPTIND - 1)) | |
action=$1 | |
list_balancers() { | |
$CURL -s "http://${server}:${port}/${manager}" | grep "balancer://" | sed "s/.*balancer:\/\/\(.*\)<\/a>.*/\1/" | |
} | |
list_workers() { | |
balancer=$1 | |
if [ -z "$balancer" ]; then | |
echo "Usage: $0 [-s host] [-p port] [-m balancer-manager] list-workers balancer_name" | |
echo " balancer_name : balancer name" | |
exit 1 | |
fi | |
$CURL -s "http://${server}:${port}/${manager}" | grep "/balancer-manager?b=${balancer}&w" | sed "s/.*href='\(.[^']*\).*/\1/" | sed "s/.*w=\(.*\)&.*/\1/" | |
} | |
enable() { | |
balancer=$1 | |
worker=$2 | |
if [ -z "$balancer" ] || [ -z "$worker" ]; then | |
echo "Usage: $0 [-s host] [-p port] [-m balancer-manager] enable balancer_name worker_route" | |
echo " balancer_name : balancer/cluster name" | |
echo " worker_route : worker route e.g.) ajp://192.1.2.3:8009" | |
exit 1 | |
fi | |
nonce=`$CURL -s "http://${server}:${port}/${manager}" | grep nonce | grep "${balancer}" | sed "s/.*nonce=\(.*\)['\"].*/\1/" | tail -n 1` | |
if [ -z "$nonce" ]; then | |
echo "balancer_name ($balancer) not found" | |
exit 1 | |
fi | |
echo "Enabling $2 of $1..." | |
# Apache 2.2.x | |
#$CURL -s -o /dev/null -XPOST "http://${server}:${port}/${manager}?" -d b="${balancer}" -d w="${worker}" -d nonce="${nonce}" -d dw=Enable | |
$CURL -s -o /dev/null -XPOST "http://${server}:${port}/${manager}?" -d b="${balancer}" -d w="${worker}" -d nonce="${nonce}" -d w_status_D=0 | |
sleep 2 | |
status | |
} | |
disable() { | |
balancer=$1 | |
worker=$2 | |
if [ -z "$balancer" ] || [ -z "$worker" ]; then | |
echo "Usage: $0 [-s host] [-p port] [-m balancer-manager] disable balancer_name worker_route" | |
echo " balancer_name : balancer/cluster name" | |
echo " worker_route : worker route e.g.) ajp://192.1.2.3:8009" | |
exit 1 | |
fi | |
echo "Disabling $2 of $1..." | |
nonce=`$CURL -s "http://${server}:${port}/${manager}" | grep nonce | grep "${balancer}" | sed "s/.*nonce=\(.*\)['\"].*/\1/" | tail -n 1` | |
if [ -z "$nonce" ]; then | |
echo "balancer_name ($balancer) not found" | |
exit 1 | |
fi | |
# Apache 2.2.x | |
#$CURL -s -o /dev/null -XPOST "http://${server}:${port}/${manager}?" -d b="${balancer}" -d w="${worker}" -d nonce="${nonce}" -d dw=Disable | |
$CURL -s -o /dev/null -XPOST "http://${server}:${port}/${manager}?" -d b="${balancer}" -d w="${worker}" -d nonce="${nonce}" -d w_status_D=1 | |
sleep 2 | |
status | |
} | |
status() { | |
$CURL -s "http://${server}:${port}/${manager}" | grep "href" | sed "s/<[^>]*>/ /g" | |
} | |
case "$1" in | |
list-balancer) | |
list_balancers "${@:2}" | |
;; | |
list-worker) | |
list_workers "${@:2}" | |
;; | |
enable) | |
enable "${@:2}" | |
;; | |
disable) | |
disable "${@:2}" | |
;; | |
status) | |
status "${@:2}" | |
;; | |
*) | |
echo "Usage: $0 {list-balancer|list-worker|enable|disable|status}" | |
echo "" | |
echo "Options: " | |
echo " -s server" | |
echo " -p port" | |
echo " -m balancer-manager-context-path" | |
echo "" | |
echo "Commands: " | |
echo " list-balancer" | |
echo " list-worker balancer-name" | |
echo " enable balancer_name worker_route" | |
echo " disable balancer_name worker_route" | |
exit 1 | |
esac | |
exit $? |
Hi,
I also use balancer-manager but after upgrading to httpd2.4.41 the curl is not working anymore, nothing changes on balancer page.
Anyone had this issue?
Hi,
I also use balancer-manager but after upgrading to httpd2.4.41 the curl is not working anymore, nothing changes on balancer page.
Anyone had this issue?
Hi,
I am having this issue. I had a working bash script that use to be able to manipulate the balance manager members. But, some upgrade seems to have broken this functionality.
Hello.
Same issue here, but it works when adding the referer header :
$CURL -s -o /dev/null -XPOST "http://${server}:${port}/${manager}?" -H "Referer: http://${server}:${port}/${manager}?b=${balancer}&w=${worker}&nonce=${nonce}" -d b="${balancer}" -d w="${worker}" -d nonce="${nonce}" -d w_status_D=1
curl version 7.64.0-4; apache2 version 2.4.38-3
POST requests still work for me.
BUT: Since the last apache update you have to specify a referer inside your request! Otherwise it may be that you can't disable the loadbalance member.
add this part: -H "Referer: ${proto}://${vhost}:${port}/${manager}?"
Example (Disable Member):
$CURL -s -o /dev/null -XPOST -H "Referer: ${proto}://${vhost}:${port}/${manager}?" "${proto}://${vhost}:${port}/${manager}?" -d b="${balancer}" -d w="${worker}" -d nonce="${nonce}" -d w_status_D=1