[bitnami/rabbitmq] Support additional virtual host via RABBITMQ_VHOSTS (#2061)

* [bitnami/rabbitmq] Support additional virtual host via RABBITMQ_VHOSTS

Signed-off-by: Nobi <nobi@nobidev.com>

* [bitnami/rabbitmq] Grant permission user to vhosts

Signed-off-by: Nobi <nobi@nobidev.com>

Signed-off-by: Nobi <nobi@nobidev.com>
This commit is contained in:
Nguyễn Đức Chiến 2022-08-22 23:10:32 +07:00 committed by GitHub
parent bd4640522f
commit 41a7169862
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 111 additions and 0 deletions

View File

@ -718,6 +718,48 @@ rabbitmq_join_cluster() {
debug_execute "${RABBITMQ_BIN_DIR}/rabbitmqctl" start_app
}
########################
# Declare a new virtual host
# Globals:
# BITNAMI_DEBUG
# RABBITMQ_BIN_DIR
# Arguments:
# $1 - Name
# Returns:
# None
#########################
rabbitmq_declare_vhost() {
local name="${1:?name is required}"
debug "Declaring vhost '${name}'..."
if ! debug_execute "${RABBITMQ_BIN_DIR}/rabbitmqctl" add_vhost -- "${name}"; then
error "Couldn't declared vhost '${name}'."
return 1
fi
}
########################
# Allow a user to access a virtual host
# Globals:
# BITNAMI_DEBUG
# RABBITMQ_BIN_DIR
# Arguments:
# $1 - User
# $2 - Vhost
# Returns:
# None
#########################
rabbitmq_set_user_vhost_permission() {
local user="${1:?user is required}"
local vhost="${2:?vhost is required}"
debug "Assigning permissions to user '${user}' to access vhost '${vhost}'..."
if ! debug_execute "${RABBITMQ_BIN_DIR}/rabbitmqctl" set_permissions --vhost "${vhost}" "${user}" ".*" ".*" ".*"; then
error "Couldn't assigned perrmissions to user '${user}' to access vhost '${vhost}'."
return 1
fi
}
########################
# Ensure RabbitMQ is initialized
# Globals:
@ -781,6 +823,15 @@ rabbitmq_initialize() {
rabbitmq_change_password "$RABBITMQ_USERNAME" "$RABBITMQ_PASSWORD"
fi
if [[ -n "${RABBITMQ_VHOSTS:-}" ]]; then
for vhost in ${RABBITMQ_VHOSTS}; do
rabbitmq_declare_vhost "${vhost}"
if [[ -n "${RABBITMQ_USERNAME}" ]]; then
rabbitmq_set_user_vhost_permission "${RABBITMQ_USERNAME}" "${vhost}"
fi
done
fi
if [[ "$RABBITMQ_NODE_TYPE" != "stats" ]] && [[ -n "$RABBITMQ_CLUSTER_NODE_NAME" ]]; then
rabbitmq_join_cluster "$RABBITMQ_CLUSTER_NODE_NAME" "$RABBITMQ_NODE_TYPE"
fi

View File

@ -39,6 +39,7 @@ rabbitmq_env_vars=(
RABBITMQ_NODE_PORT_NUMBER
RABBITMQ_NODE_TYPE
RABBITMQ_VHOST
RABBITMQ_VHOSTS
RABBITMQ_CLUSTER_REBALANCE
RABBITMQ_CLUSTER_REBALANCE_ATTEMPTS
RABBITMQ_USERNAME
@ -138,6 +139,9 @@ export RABBITMQ_USERNAME="${RABBITMQ_USERNAME:-user}"
RABBITMQ_PASSWORD="${RABBITMQ_PASSWORD:-"${RABBITMQ_DEFAULT_PASS:-}"}"
export RABBITMQ_PASSWORD="${RABBITMQ_PASSWORD:-bitnami}"
# RabbitMQ vhosts
export RABBITMQ_VHOSTS="${RABBITMQ_VHOSTS:-}"
# Force boot cluster
export RABBITMQ_FORCE_BOOT="${RABBITMQ_FORCE_BOOT:-no}"

View File

@ -718,6 +718,48 @@ rabbitmq_join_cluster() {
debug_execute "${RABBITMQ_BIN_DIR}/rabbitmqctl" start_app
}
########################
# Declare a new virtual host
# Globals:
# BITNAMI_DEBUG
# RABBITMQ_BIN_DIR
# Arguments:
# $1 - Name
# Returns:
# None
#########################
rabbitmq_declare_vhost() {
local name="${1:?name is required}"
debug "Declaring vhost '${name}'..."
if ! debug_execute "${RABBITMQ_BIN_DIR}/rabbitmqctl" add_vhost -- "${name}"; then
error "Couldn't declared vhost '${name}'."
return 1
fi
}
########################
# Allow a user to access a virtual host
# Globals:
# BITNAMI_DEBUG
# RABBITMQ_BIN_DIR
# Arguments:
# $1 - User
# $2 - Vhost
# Returns:
# None
#########################
rabbitmq_set_user_vhost_permission() {
local user="${1:?user is required}"
local vhost="${2:?vhost is required}"
debug "Assigning permissions to user '${user}' to access vhost '${vhost}'..."
if ! debug_execute "${RABBITMQ_BIN_DIR}/rabbitmqctl" set_permissions --vhost "${vhost}" "${user}" ".*" ".*" ".*"; then
error "Couldn't assigned perrmissions to user '${user}' to access vhost '${vhost}'."
return 1
fi
}
########################
# Ensure RabbitMQ is initialized
# Globals:
@ -781,6 +823,15 @@ rabbitmq_initialize() {
rabbitmq_change_password "$RABBITMQ_USERNAME" "$RABBITMQ_PASSWORD"
fi
if [[ -n "${RABBITMQ_VHOSTS:-}" ]]; then
for vhost in ${RABBITMQ_VHOSTS}; do
rabbitmq_declare_vhost "${vhost}"
if [[ -n "${RABBITMQ_USERNAME}" ]]; then
rabbitmq_set_user_vhost_permission "${RABBITMQ_USERNAME}" "${vhost}"
fi
done
fi
if [[ "$RABBITMQ_NODE_TYPE" != "stats" ]] && [[ -n "$RABBITMQ_CLUSTER_NODE_NAME" ]]; then
rabbitmq_join_cluster "$RABBITMQ_CLUSTER_NODE_NAME" "$RABBITMQ_NODE_TYPE"
fi

View File

@ -39,6 +39,7 @@ rabbitmq_env_vars=(
RABBITMQ_NODE_PORT_NUMBER
RABBITMQ_NODE_TYPE
RABBITMQ_VHOST
RABBITMQ_VHOSTS
RABBITMQ_CLUSTER_REBALANCE
RABBITMQ_CLUSTER_REBALANCE_ATTEMPTS
RABBITMQ_USERNAME
@ -138,6 +139,9 @@ export RABBITMQ_USERNAME="${RABBITMQ_USERNAME:-user}"
RABBITMQ_PASSWORD="${RABBITMQ_PASSWORD:-"${RABBITMQ_DEFAULT_PASS:-}"}"
export RABBITMQ_PASSWORD="${RABBITMQ_PASSWORD:-bitnami}"
# RabbitMQ vhosts
export RABBITMQ_VHOSTS="${RABBITMQ_VHOSTS:-}"
# Force boot cluster
export RABBITMQ_FORCE_BOOT="${RABBITMQ_FORCE_BOOT:-no}"

View File

@ -190,6 +190,7 @@ Available variables:
#### Node and cluster configuration
* `RABBITMQ_VHOST`: RabbitMQ application vhost. Default: **/**
* `RABBITMQ_VHOSTS`: List of additional virtual host (vhost), separated by space. E.g.: **/shared /prioritized /tasks**
* `RABBITMQ_USERNAME`: RabbitMQ application username. Default: **user**
* `RABBITMQ_PASSWORD`: RabbitMQ application password. Default: **bitnami**
* `RABBITMQ_SECURE_PASSWORD`: Whether to set the RabbitMQ password securely. This is incompatible with loading external RabbitMQ definitions. Default: **no**