apiVersion: v1 kind: ConfigMap metadata: name: {{ printf "%s-hooks-scripts" (include "postgresql-ha.postgresql" .) }} labels: {{- include "common.labels.standard" . | nindent 4 }} app.kubernetes.io/component: postgresql {{- if .Values.commonLabels }} {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} {{- end }} {{- if .Values.commonAnnotations }} annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} {{- end }} data: pre-stop.sh: |- #!/bin/bash set -o errexit set -o pipefail set -o nounset # Debug section exec 3>&1 exec 4>&2 # Load Libraries . /opt/bitnami/scripts/liblog.sh . /opt/bitnami/scripts/libpostgresql.sh . /opt/bitnami/scripts/librepmgr.sh # Load PostgreSQL & repmgr environment variables . /opt/bitnami/scripts/postgresql-env.sh # Auxiliary functions is_new_primary_ready() { return_value=1 currenty_primary_node="$(repmgr_get_primary_node)" currenty_primary_host="$(echo $currenty_primary_node | awk '{print $1}')" info "$currenty_primary_host != $REPMGR_NODE_NETWORK_NAME" if [[ $(echo $currenty_primary_node | wc -w) -eq 2 ]] && [[ "$currenty_primary_host" != "$REPMGR_NODE_NETWORK_NAME" ]]; then info "New primary detected, leaving the cluster..." return_value=0 else info "Waiting for a new primary to be available..." fi return $return_value } export MODULE="pre-stop-hook" if [[ "${BITNAMI_DEBUG}" == "true" ]]; then info "Bash debug is on" else info "Bash debug is off" exec 1>/dev/null exec 2>/dev/null fi postgresql_enable_nss_wrapper # Prepare env vars for managing roles readarray -t primary_node < <(repmgr_get_upstream_node) primary_host="${primary_node[0]}" # Stop postgresql for graceful exit. postgresql_stop if [[ -z "$primary_host" ]] || [[ "$primary_host" == "$REPMGR_NODE_NETWORK_NAME" ]]; then info "Primary node need to wait for a new primary node before leaving the cluster" retry_while is_new_primary_ready 10 5 else info "Standby node doesn't need to wait, leaving the cluster." fi