mirror of
https://github.com/bitnami/containers.git
synced 2026-10-19 15:45:45 +02:00
[bitnami/postgresql-repmgr] Release 17.6.0-debian-12-r1 (#85490)
Signed-off-by: Bitnami Bot <bitnami.bot@broadcom.com>
This commit is contained in:
@@ -8,7 +8,7 @@ ARG TARGETARCH
|
||||
|
||||
LABEL com.vmware.cp.artifact.flavor="sha256:c50c90cfd9d12b445b011e6ad529f1ad3daea45c26d20b00732fae3cd71f6a83" \
|
||||
org.opencontainers.image.base.name="docker.io/bitnami/minideb:bookworm" \
|
||||
org.opencontainers.image.created="2025-08-14T16:37:45Z" \
|
||||
org.opencontainers.image.created="2025-08-19T14:46:33Z" \
|
||||
org.opencontainers.image.description="Application packaged by Broadcom, Inc." \
|
||||
org.opencontainers.image.documentation="https://github.com/bitnami/containers/tree/main/bitnami/postgresql-repmgr/README.md" \
|
||||
org.opencontainers.image.source="https://github.com/bitnami/containers/tree/main/bitnami/postgresql-repmgr" \
|
||||
@@ -59,6 +59,7 @@ RUN echo 'en_GB.UTF-8 UTF-8' >> /etc/locale.gen
|
||||
RUN /opt/bitnami/scripts/locales/generate-locales.sh
|
||||
ENV APP_VERSION="17.6.0" \
|
||||
BITNAMI_APP_NAME="postgresql-repmgr" \
|
||||
IMAGE_REVISION="1" \
|
||||
LANG="en_US.UTF-8" \
|
||||
LANGUAGE="en_US:en" \
|
||||
NSS_WRAPPER_LIB="/opt/bitnami/common/lib/libnss_wrapper.so" \
|
||||
|
||||
@@ -142,80 +142,6 @@ EOF
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Remove a cron configuration file for a given service
|
||||
# Arguments:
|
||||
# $1 - Service name
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
remove_cron_conf() {
|
||||
local service_name="${1:?service name is missing}"
|
||||
local cron_conf_dir="/etc/monit/conf.d"
|
||||
rm -f "${cron_conf_dir}/${service_name}"
|
||||
}
|
||||
|
||||
########################
|
||||
# Generate a monit configuration file for a given service
|
||||
# Arguments:
|
||||
# $1 - Service name
|
||||
# $2 - Pid file
|
||||
# $3 - Start command
|
||||
# $4 - Stop command
|
||||
# Flags:
|
||||
# --disable - Whether to disable the monit configuration
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
generate_monit_conf() {
|
||||
local service_name="${1:?service name is missing}"
|
||||
local pid_file="${2:?pid file is missing}"
|
||||
local start_command="${3:?start command is missing}"
|
||||
local stop_command="${4:?stop command is missing}"
|
||||
local monit_conf_dir="/etc/monit/conf.d"
|
||||
local disabled="no"
|
||||
|
||||
# Parse optional CLI flags
|
||||
shift 4
|
||||
while [[ "$#" -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--disable)
|
||||
disabled="yes"
|
||||
;;
|
||||
*)
|
||||
echo "Invalid command line flag ${1}" >&2
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
is_boolean_yes "$disabled" && conf_suffix=".disabled"
|
||||
mkdir -p "$monit_conf_dir"
|
||||
cat > "${monit_conf_dir}/${service_name}.conf${conf_suffix:-}" <<EOF
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
check process ${service_name}
|
||||
with pidfile "${pid_file}"
|
||||
start program = "${start_command}" with timeout 90 seconds
|
||||
stop program = "${stop_command}" with timeout 90 seconds
|
||||
EOF
|
||||
}
|
||||
|
||||
########################
|
||||
# Remove a monit configuration file for a given service
|
||||
# Arguments:
|
||||
# $1 - Service name
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
remove_monit_conf() {
|
||||
local service_name="${1:?service name is missing}"
|
||||
local monit_conf_dir="/etc/monit/conf.d"
|
||||
rm -f "${monit_conf_dir}/${service_name}.conf"
|
||||
}
|
||||
|
||||
########################
|
||||
# Generate a logrotate configuration file
|
||||
# Arguments:
|
||||
|
||||
@@ -139,41 +139,6 @@ web_server_stop() {
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Restart web server
|
||||
# Globals:
|
||||
# *
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
web_server_restart() {
|
||||
info "Restarting $(web_server_type)"
|
||||
if [[ "${BITNAMI_SERVICE_MANAGER:-}" = "systemd" ]]; then
|
||||
systemctl restart "bitnami.$(web_server_type).service"
|
||||
else
|
||||
"${BITNAMI_ROOT_DIR}/scripts/$(web_server_type)/restart.sh"
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Reload web server
|
||||
# Globals:
|
||||
# *
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
web_server_reload() {
|
||||
if [[ "${BITNAMI_SERVICE_MANAGER:-}" = "systemd" ]]; then
|
||||
systemctl reload "bitnami.$(web_server_type).service"
|
||||
else
|
||||
"${BITNAMI_ROOT_DIR}/scripts/$(web_server_type)/reload.sh"
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Ensure a web server application configuration exists (i.e. Apache virtual host format or NGINX server block)
|
||||
# It serves as a wrapper for the specific web server function
|
||||
@@ -429,48 +394,3 @@ web_server_update_app_configuration() {
|
||||
web_server_execute "$web_server" "${web_server}_update_app_configuration" "${args[@]}"
|
||||
done
|
||||
}
|
||||
|
||||
########################
|
||||
# Enable loading page, which shows users that the initialization process is not yet completed
|
||||
# Globals:
|
||||
# *
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
web_server_enable_loading_page() {
|
||||
ensure_web_server_app_configuration_exists "__loading" --hosts "_default_" \
|
||||
--apache-additional-configuration "
|
||||
# Show a HTTP 503 Service Unavailable page by default
|
||||
RedirectMatch 503 ^/$
|
||||
# Show index.html if server is answering with 404 Not Found or 503 Service Unavailable status codes
|
||||
ErrorDocument 404 /index.html
|
||||
ErrorDocument 503 /index.html" \
|
||||
--nginx-additional-configuration "
|
||||
# Show a HTTP 503 Service Unavailable page by default
|
||||
location / {
|
||||
return 503;
|
||||
}
|
||||
# Show index.html if server is answering with 404 Not Found or 503 Service Unavailable status codes
|
||||
error_page 404 @installing;
|
||||
error_page 503 @installing;
|
||||
location @installing {
|
||||
rewrite ^(.*)$ /index.html break;
|
||||
}"
|
||||
web_server_reload
|
||||
}
|
||||
|
||||
########################
|
||||
# Enable loading page, which shows users that the initialization process is not yet completed
|
||||
# Globals:
|
||||
# *
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
web_server_disable_install_page() {
|
||||
ensure_web_server_app_configuration_not_exists "__loading"
|
||||
web_server_reload
|
||||
}
|
||||
|
||||
@@ -14,6 +14,27 @@
|
||||
. /opt/bitnami/scripts/libvalidations.sh
|
||||
. /opt/bitnami/scripts/libnet.sh
|
||||
|
||||
########################
|
||||
# Execute repmgr command and print the output
|
||||
# Globals:
|
||||
# REPMGR_*
|
||||
# POSTGRESQL_DAEMON_USER
|
||||
# Arguments:
|
||||
# $@ - Additional arguments to pass to the repmgr command
|
||||
# Returns:
|
||||
# None
|
||||
########################
|
||||
repmgr_execute_print_output() {
|
||||
local repmgr_cmd=()
|
||||
if am_i_root; then
|
||||
repmgr_cmd=("run_as_user" "$POSTGRESQL_DAEMON_USER" "${REPMGR_BIN_DIR}/repmgr")
|
||||
else
|
||||
repmgr_cmd=("${REPMGR_BIN_DIR}/repmgr")
|
||||
fi
|
||||
|
||||
"${repmgr_cmd[@]}" "$@" 2>&1
|
||||
}
|
||||
|
||||
########################
|
||||
# Execute repmgr command
|
||||
# Globals:
|
||||
@@ -25,15 +46,7 @@
|
||||
# None
|
||||
########################
|
||||
repmgr_execute() {
|
||||
local repmgr_cmd=()
|
||||
|
||||
if am_i_root; then
|
||||
repmgr_cmd=("run_as_user" "$POSTGRESQL_DAEMON_USER" "${REPMGR_BIN_DIR}/repmgr")
|
||||
else
|
||||
repmgr_cmd=("${REPMGR_BIN_DIR}/repmgr")
|
||||
fi
|
||||
|
||||
debug_execute "${repmgr_cmd[@]}" "$@"
|
||||
debug_execute "repmgr_execute_print_output" "$@"
|
||||
}
|
||||
|
||||
########################
|
||||
@@ -181,7 +194,7 @@ repmgr_get_upstream_node() {
|
||||
info "Querying all partner nodes for common upstream node..."
|
||||
read -r -a nodes <<<"$(tr ',;' ' ' <<<"${REPMGR_PARTNER_NODES}")"
|
||||
for node in "${nodes[@]}"; do
|
||||
# intentionally accept inncorect address (without [schema:]// )
|
||||
# intentionally accept incorrect address (without [schema:]// )
|
||||
[[ "$node" =~ ^(([^:/?#]+):)?// ]] || node="tcp://${node}"
|
||||
host="$(parse_uri "$node" 'host')"
|
||||
port="$(parse_uri "$node" 'port')"
|
||||
@@ -926,3 +939,31 @@ repmgr_initialize() {
|
||||
repmgr_register_witness
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Checks repmgr status trying to detect split-brain scenarios
|
||||
# Globals:
|
||||
# REPMGR_*
|
||||
# Arguments:
|
||||
# $1 - property
|
||||
# $2 - value
|
||||
# $3 - Path to configuration file (default: $REPMGR_CONF_FILE)
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
repmgr_check_status() {
|
||||
local -r flags=("-f" "$REPMGR_CONF_FILE")
|
||||
|
||||
repmgr_role=$(repmgr_execute_print_output "${flags[@]}" node check --role --nagios | awk '{print $NF}')
|
||||
if [[ "$repmgr_role" = "primary" ]]; then
|
||||
# Split-brain case: this node considers himself a primary but
|
||||
# there's another primary node in the cluster
|
||||
repmgr_status=$(repmgr_execute_print_output "${flags[@]}" daemon status)
|
||||
if grep -q "registered as standby but running as primary" <<< "$repmgr_status"; then
|
||||
echo "inconsistent repmgr status"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user