93 lines
2.2 KiB
Bash
Executable File
93 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
if [[ "$(id -u)" -ne 0 ]]; then
|
|
echo "tms-rabbitmqctl must be executed as root through sudo" >&2
|
|
exit 77
|
|
fi
|
|
|
|
if [[ $# -lt 1 ]]; then
|
|
echo "usage: tms-rabbitmqctl <allowed-rabbitmqctl-command> [args...]" >&2
|
|
exit 64
|
|
fi
|
|
|
|
require_arg_count() {
|
|
local expected="$1"
|
|
shift
|
|
if [[ $# -ne "${expected}" ]]; then
|
|
echo "unsupported rabbitmqctl arguments" >&2
|
|
exit 64
|
|
fi
|
|
}
|
|
|
|
case "$1" in
|
|
status|list_users)
|
|
require_arg_count 1 "$@"
|
|
;;
|
|
add_vhost|delete_user)
|
|
require_arg_count 2 "$@"
|
|
;;
|
|
add_user|change_password|authenticate_user)
|
|
require_arg_count 3 "$@"
|
|
;;
|
|
set_permissions)
|
|
if [[ $# -ne 7 || "${2:-}" != "-p" ]]; then
|
|
echo "unsupported rabbitmqctl set_permissions arguments" >&2
|
|
exit 64
|
|
fi
|
|
;;
|
|
clear_permissions)
|
|
if [[ $# -ne 4 || "${2:-}" != "-p" ]]; then
|
|
echo "unsupported rabbitmqctl clear_permissions arguments" >&2
|
|
exit 64
|
|
fi
|
|
;;
|
|
list_queues)
|
|
if [[ ! ( $# -eq 2 || ( $# -eq 4 && "${2:-}" == "-p" ) ) ]]; then
|
|
echo "unsupported rabbitmqctl list_queues arguments" >&2
|
|
exit 64
|
|
fi
|
|
;;
|
|
delete_queue)
|
|
if [[ ! ( $# -eq 2 || ( $# -eq 4 && "${2:-}" == "-p" ) ) ]]; then
|
|
echo "unsupported rabbitmqctl delete_queue arguments" >&2
|
|
exit 64
|
|
fi
|
|
;;
|
|
*)
|
|
echo "unsupported rabbitmqctl command: $1" >&2
|
|
exit 64
|
|
;;
|
|
esac
|
|
|
|
export ERLANG_HOME="${ERLANG_HOME:-/usr/local/erlang}"
|
|
export RABBITMQ_HOME="${RABBITMQ_HOME:-/usr/local/rabbitmq}"
|
|
export PATH="${ERLANG_HOME}/bin:${RABBITMQ_HOME}/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin"
|
|
|
|
if [[ -n "${RABBITMQ_CTL:-}" ]]; then
|
|
RABBITMQ_CTL_CANDIDATES=("${RABBITMQ_CTL}")
|
|
else
|
|
RABBITMQ_CTL_CANDIDATES=(
|
|
"${RABBITMQ_HOME}/sbin/rabbitmqctl"
|
|
"/usr/local/rabbitmq/sbin/rabbitmqctl"
|
|
"/usr/local/rabbitmq-server/sbin/rabbitmqctl"
|
|
"/usr/sbin/rabbitmqctl"
|
|
"/usr/lib/rabbitmq/bin/rabbitmqctl"
|
|
)
|
|
fi
|
|
|
|
RABBITMQ_CTL=""
|
|
for candidate in "${RABBITMQ_CTL_CANDIDATES[@]}"; do
|
|
if [[ -x "${candidate}" ]]; then
|
|
RABBITMQ_CTL="${candidate}"
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [[ ! -x "${RABBITMQ_CTL}" ]]; then
|
|
echo "rabbitmqctl not executable" >&2
|
|
exit 69
|
|
fi
|
|
|
|
exec "${RABBITMQ_CTL}" "$@"
|