mirror of
https://github.com/bitnami/charts.git
synced 2026-04-04 16:27:07 +08:00
[bitnami/redis] fix(redis): add support for script prestop prestart with external access (#35364)
* feat(redis): add support for script start node with external access Signed-off-by: unkls <benjamin.leveque97@gmail.com> * feat(redis): add conditional check for external access in sentinel script Signed-off-by: unkls <benjamin.leveque97@gmail.com> * feat(redis): update script to handle externalAccess usage Signed-off-by: unkls <benjamin.leveque97@gmail.com> * chore(redis): update Chart.yaml for version consistency Signed-off-by: unkls <benjamin.leveque97@gmail.com> * Update CHANGELOG.md Signed-off-by: Bitnami Bot <bitnami.bot@broadcom.com> * Update CHANGELOG.md Signed-off-by: Bitnami Bot <bitnami.bot@broadcom.com> --------- Signed-off-by: unkls <benjamin.leveque97@gmail.com> Signed-off-by: Bitnami Bot <bitnami.bot@broadcom.com> Co-authored-by: Bitnami Bot <bitnami.bot@broadcom.com>
This commit is contained in:
@@ -1,8 +1,16 @@
|
||||
# Changelog
|
||||
|
||||
## 21.2.13 (2025-07-16)
|
||||
## 21.2.14 (2025-08-03)
|
||||
|
||||
* [bitnami/redis] Bugfix/script prestop redis external access ([#34806](https://github.com/bitnami/charts/pull/34806))
|
||||
* [bitnami/redis] fix(redis): add support for script prestop prestart with external access ([#35364](https://github.com/bitnami/charts/pull/35364))
|
||||
|
||||
## <small>21.2.13 (2025-07-23)</small>
|
||||
|
||||
* [bitnami/*] Adapt main README and change ascii (#35173) ([73d15e0](https://github.com/bitnami/charts/commit/73d15e03e04647efa902a1d14a09ea8657429cd0)), closes [#35173](https://github.com/bitnami/charts/issues/35173)
|
||||
* [bitnami/*] Adapt welcome message to BSI (#35170) ([e1c8146](https://github.com/bitnami/charts/commit/e1c8146831516fb35de736a6f3fd10e5e7a44286)), closes [#35170](https://github.com/bitnami/charts/issues/35170)
|
||||
* [bitnami/*] Add BSI to charts' READMEs (#35174) ([4973fd0](https://github.com/bitnami/charts/commit/4973fd08dd7e95398ddcc4054538023b542e19f2)), closes [#35174](https://github.com/bitnami/charts/issues/35174)
|
||||
* [bitnami/redis] Add Redis Open Source 8 Load Modules Docs (#35171) ([ce07616](https://github.com/bitnami/charts/commit/ce07616d4a41f96bad7d50b1e58a46f0022a2a8f)), closes [#35171](https://github.com/bitnami/charts/issues/35171)
|
||||
* [bitnami/redis] Bugfix/script prestop redis external access (#34806) ([65f4f25](https://github.com/bitnami/charts/commit/65f4f25fa648d8ac8ca633728498961ad0bd0c1e)), closes [#34806](https://github.com/bitnami/charts/issues/34806)
|
||||
|
||||
## <small>21.2.12 (2025-07-16)</small>
|
||||
|
||||
|
||||
@@ -39,4 +39,4 @@ maintainers:
|
||||
name: redis
|
||||
sources:
|
||||
- https://github.com/bitnami/charts/tree/main/bitnami/redis
|
||||
version: 21.2.13
|
||||
version: 21.2.14
|
||||
|
||||
@@ -71,8 +71,6 @@ data:
|
||||
|
||||
REDISPORT=$(get_port "$HOSTNAME" "REDIS")
|
||||
|
||||
HEADLESS_SERVICE="{{ template "common.names.fullname" . }}-headless.{{ include "common.names.namespace" . }}.svc.{{ .Values.clusterDomain }}"
|
||||
|
||||
if [ -n "$REDIS_EXTERNAL_MASTER_HOST" ]; then
|
||||
REDIS_SERVICE="$REDIS_EXTERNAL_MASTER_HOST"
|
||||
else
|
||||
@@ -115,6 +113,39 @@ data:
|
||||
retry_while "eval $sentinel_info_command" 2 5
|
||||
}
|
||||
|
||||
{{- if and .Values.sentinel.externalAccess.enabled .Values.sentinel.externalAccess.service.loadBalancerIP }}
|
||||
|
||||
SERVICE_NAMES="{{- $fullname := include "common.names.fullname" . -}}
|
||||
{{- range $i, $e := .Values.sentinel.externalAccess.service.loadBalancerIP -}}
|
||||
{{- if $i }} {{ end }}{{ printf "%s-svc-%d" $fullname $i }}
|
||||
{{- end }}"
|
||||
SERVICE_IPS="{{- range $i, $ip := .Values.sentinel.externalAccess.service.loadBalancerIP -}}
|
||||
{{- if $i }} {{ end }}{{ $ip }}
|
||||
{{- end }}"
|
||||
|
||||
|
||||
# Helper function to get IP by service name
|
||||
get_service_ip() {
|
||||
search_name="$1"
|
||||
set -- $SERVICE_NAMES
|
||||
for i in $(seq 1 $#); do
|
||||
eval name=\${$i}
|
||||
if [ "$name" = "$search_name" ]; then
|
||||
set -- $SERVICE_IPS
|
||||
eval echo \${$i}
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
SVC_NAME=$(hostname | sed 's/node/svc/g')
|
||||
CURRENT_SERVICE_IP=$(get_service_ip "$SVC_NAME")
|
||||
echo "CURRENT_SERVICE_IP: $CURRENT_SERVICE_IP"
|
||||
{{- else }}
|
||||
HEADLESS_SERVICE="{{ template "common.names.fullname" . }}-headless.{{- include "common.names.namespace" . }}.svc.{{ .Values.clusterDomain }}"
|
||||
{{- end }}
|
||||
|
||||
{{- if and .Values.replica.containerSecurityContext.runAsUser (eq (.Values.replica.containerSecurityContext.runAsUser | int) 0) }}
|
||||
useradd redis
|
||||
chown -R redis {{ .Values.replica.persistence.path }}
|
||||
@@ -124,7 +155,7 @@ data:
|
||||
[[ -f $REDIS_MASTER_PASSWORD_FILE ]] && export REDIS_MASTER_PASSWORD="$(< "${REDIS_MASTER_PASSWORD_FILE}")"
|
||||
|
||||
# check if there is a master
|
||||
master_in_persisted_conf="$(get_full_hostname "$HOSTNAME")"
|
||||
master_in_persisted_conf="$(get_service_ip "$SVC_NAME")"
|
||||
master_port_in_persisted_conf="$REDIS_MASTER_PORT_NUMBER"
|
||||
master_in_sentinel="$(get_sentinel_master_info)"
|
||||
redisRetVal=$?
|
||||
@@ -141,7 +172,11 @@ data:
|
||||
fi
|
||||
|
||||
if [[ $redisRetVal -ne 0 ]]; then
|
||||
{{- if and .Values.sentinel.externalAccess.enabled .Values.sentinel.externalAccess.service.loadBalancerIP }}
|
||||
if [[ "$master_in_persisted_conf" == "$(get_service_ip "$SVC_NAME")" ]]; then
|
||||
{{- else }}
|
||||
if [[ "$master_in_persisted_conf" == "$(get_full_hostname "$HOSTNAME")" ]]; then
|
||||
{{- end }}
|
||||
# Case 1: No active sentinel and in previous sentinel.conf we were the master --> MASTER
|
||||
info "Configuring the node as master"
|
||||
export REDIS_REPLICATION_MODE="master"
|
||||
@@ -158,8 +193,11 @@ data:
|
||||
info "Current master: REDIS_SENTINEL_INFO=(${REDIS_SENTINEL_INFO[0]},${REDIS_SENTINEL_INFO[1]})"
|
||||
REDIS_MASTER_HOST=${REDIS_SENTINEL_INFO[0]}
|
||||
REDIS_MASTER_PORT_NUMBER=${REDIS_SENTINEL_INFO[1]}
|
||||
|
||||
{{- if and .Values.sentinel.externalAccess.enabled .Values.sentinel.externalAccess.service.loadBalancerIP }}
|
||||
if [[ "$REDIS_MASTER_HOST" == "$(get_service_ip "$SVC_NAME")" ]]; then
|
||||
{{- else }}
|
||||
if [[ "$REDIS_MASTER_HOST" == "$(get_full_hostname "$HOSTNAME")" ]]; then
|
||||
{{- end }}
|
||||
# Case 3: Active sentinel and master it is this node --> MASTER
|
||||
info "Configuring the node as master"
|
||||
export REDIS_REPLICATION_MODE="master"
|
||||
@@ -503,7 +541,37 @@ data:
|
||||
. /opt/bitnami/scripts/libvalidations.sh
|
||||
. /opt/bitnami/scripts/libos.sh
|
||||
|
||||
HEADLESS_SERVICE="{{ template "common.names.fullname" . }}-headless.{{ include "common.names.namespace" . }}.svc.{{ .Values.clusterDomain }}"
|
||||
{{- if and .Values.sentinel.externalAccess.enabled .Values.sentinel.externalAccess.service.loadBalancerIP }}
|
||||
|
||||
SERVICE_NAMES="{{ $fullname := include "common.names.fullname" . -}}
|
||||
{{- range $i, $e := .Values.sentinel.externalAccess.service.loadBalancerIP -}}
|
||||
{{- if $i }} {{ end }}{{ printf "%s-svc-%d" $fullname $i }}
|
||||
{{- end }}"
|
||||
SERVICE_IPS="{{- range $i, $ip := .Values.sentinel.externalAccess.service.loadBalancerIP -}}
|
||||
{{- if $i }} {{ end }}{{ $ip }}
|
||||
{{- end }}"
|
||||
|
||||
|
||||
# Helper function to get IP by service name
|
||||
get_service_ip() {
|
||||
search_name="$1"
|
||||
set -- $SERVICE_NAMES
|
||||
for i in $(seq 1 $#); do
|
||||
eval name=\${$i}
|
||||
if [ "$name" = "$search_name" ]; then
|
||||
set -- $SERVICE_IPS
|
||||
eval echo \${$i}
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
SVC_NAME=$(hostname | sed 's/node/svc/g')
|
||||
{{- else }}
|
||||
HEADLESS_SERVICE="{{ template "common.names.fullname" . }}-headless.{{- include "common.names.namespace" . }}.svc.{{ .Values.clusterDomain }}"
|
||||
{{- end }}
|
||||
|
||||
|
||||
get_full_hostname() {
|
||||
hostname="$1"
|
||||
@@ -539,10 +607,38 @@ data:
|
||||
redis-cli -p "$REDIS_SENTINEL_PORT" sentinel "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
sentinel_failover_finished() {
|
||||
REDIS_SENTINEL_INFO=($(run_sentinel_command get-master-addr-by-name "{{ .Values.sentinel.masterSet }}"))
|
||||
REDIS_MASTER_HOST="${REDIS_SENTINEL_INFO[0]}"
|
||||
[[ "$REDIS_MASTER_HOST" != "$(get_full_hostname $HOSTNAME)" ]]
|
||||
REDIS_SENTINEL_INFO=($(run_sentinel_command get-master-addr-by-name "{{ .Values.sentinel.masterSet }}"))
|
||||
echo "REDIS_SENTINEL_INFO: $REDIS_SENTINEL_INFO"
|
||||
REDIS_MASTER_HOST="${REDIS_SENTINEL_INFO[0]}"
|
||||
echo "REDIS_MASTER_HOST: $REDIS_MASTER_HOST"
|
||||
{{- if .Values.sentinel.externalAccess.enabled }}
|
||||
# Get the current service name and its IP
|
||||
CURRENT_SERVICE_NAME="$SVC_NAME"
|
||||
echo "CURRENT_SERVICE_NAME: $CURRENT_SERVICE_NAME"
|
||||
CURRENT_SERVICE_IP=$(get_service_ip "$CURRENT_SERVICE_NAME")
|
||||
echo "CURRENT_SERVICE_IP: $CURRENT_SERVICE_IP"
|
||||
# Check if both variables are not empty
|
||||
if [[ -z "$REDIS_MASTER_HOST" ]]; then
|
||||
echo "WARNING: REDIS_MASTER_HOST is empty, assuming failover not finished"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ -z "$CURRENT_SERVICE_IP" ]]; then
|
||||
echo "WARNING: CURRENT_SERVICE_IP is empty, assuming failover not finished"
|
||||
return 1
|
||||
fi
|
||||
[[ "$REDIS_MASTER_HOST" != "$CURRENT_SERVICE_IP" ]]
|
||||
{{- else }}
|
||||
echo "REDIS_MASTER_HOST: $(get_full_hostname $HOSTNAME)"
|
||||
# Check if both variables are not empty
|
||||
if [[ -z "$REDIS_MASTER_HOST" ]]; then
|
||||
echo "WARNING: REDIS_MASTER_HOST is empty, assuming failover not finished"
|
||||
return 1
|
||||
fi
|
||||
[[ "$REDIS_MASTER_HOST" != "$(get_full_hostname $HOSTNAME)" ]]
|
||||
{{- end }}
|
||||
}
|
||||
|
||||
{{ if .Values.auth.sentinel -}}
|
||||
@@ -614,7 +710,6 @@ data:
|
||||
}
|
||||
|
||||
SVC_NAME=$(hostname | sed 's/node/svc/g')
|
||||
EXTERNAL_SERVICE="$SVC_NAME.{{ include "common.names.namespace" . }}.svc.{{ .Values.clusterDomain }}"
|
||||
{{- else }}
|
||||
HEADLESS_SERVICE="{{ template "common.names.fullname" . }}-headless.{{- include "common.names.namespace" . }}.svc.{{ .Values.clusterDomain }}"
|
||||
{{- end }}
|
||||
@@ -667,9 +762,24 @@ data:
|
||||
echo "CURRENT_SERVICE_NAME: $CURRENT_SERVICE_NAME"
|
||||
CURRENT_SERVICE_IP=$(get_service_ip "$CURRENT_SERVICE_NAME")
|
||||
echo "CURRENT_SERVICE_IP: $CURRENT_SERVICE_IP"
|
||||
# Check if both variables are not empty
|
||||
if [[ -z "$REDIS_MASTER_HOST" ]]; then
|
||||
echo "WARNING: REDIS_MASTER_HOST is empty, assuming failover not finished"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ -z "$CURRENT_SERVICE_IP" ]]; then
|
||||
echo "WARNING: CURRENT_SERVICE_IP is empty, assuming failover not finished"
|
||||
return 1
|
||||
fi
|
||||
[[ "$REDIS_MASTER_HOST" != "$CURRENT_SERVICE_IP" ]]
|
||||
{{- else }}
|
||||
echo "REDIS_MASTER_HOST: $(get_full_hostname $HOSTNAME)"
|
||||
# Check if both variables are not empty
|
||||
if [[ -z "$REDIS_MASTER_HOST" ]]; then
|
||||
echo "WARNING: REDIS_MASTER_HOST is empty, assuming failover not finished"
|
||||
return 1
|
||||
fi
|
||||
[[ "$REDIS_MASTER_HOST" != "$(get_full_hostname $HOSTNAME)" ]]
|
||||
{{- end }}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user