#!/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 [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}" "$@"