+++ /dev/null
-################################################################################
-# Copyright (c) 2019 AT&T Intellectual Property. #
-# Copyright (c) 2019 Nokia. #
-# #
-# Licensed under the Apache License, Version 2.0 (the "License"); #
-# you may not use this file except in compliance with the License. #
-# You may obtain a copy of the License at #
-# #
-# http://www.apache.org/licenses/LICENSE-2.0 #
-# #
-# Unless required by applicable law or agreed to in writing, software #
-# distributed under the License is distributed on an "AS IS" BASIS, #
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
-# See the License for the specific language governing permissions and #
-# limitations under the License. #
-################################################################################
-
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: {{ template "common.configmapname.dbaasha" . }}-config
- labels:
- heritage: {{ .Release.Service }}
- release: {{ .Release.Name }}
- chart: {{ .Chart.Name }}-{{ .Chart.Version }}
- app: {{ include "common.namespace.platform" . }}-{{ include "common.name.dbaasha" . }}
-data:
- redis.conf: |
- dir "/data"
- {{- range $key, $value := .Values.dbaasha.redis.config }}
- {{ $key }} {{ $value }}
- {{- end }}
-
- sentinel.conf: |
- dir "/data"
- {{- $root := . -}}
- {{- range $key, $value := .Values.dbaasha.sentinel.config }}
- sentinel {{ $key }} {{ $root.Values.dbaasha.redis.masterGroupName }} {{ $value }}
- {{- end }}
- protected-mode {{ index .Values.dbaasha.sentinel "protected-mode" }}
-
- init.sh: |
- HOSTNAME="$(hostname)"
- INDEX="${HOSTNAME##*-}"
- MASTER="$(redis-cli -h {{ template "common.servicename.dbaasha.tcp" . }}.{{ .Release.Namespace }}.svc.cluster.local -p {{ include "common.serviceport.dbaasha.sentinel" . }} sentinel get-master-addr-by-name {{ .Values.dbaasha.redis.masterGroupName }} | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')"
- MASTER_GROUP="{{ .Values.dbaasha.redis.masterGroupName }}"
- QUORUM="{{ .Values.dbaasha.sentinel.quorum }}"
- REDIS_CONF=/data/conf/redis.conf
- REDIS_PORT={{ include "common.serviceport.dbaasha.redis" . }}
- SENTINEL_CONF=/data/conf/sentinel.conf
- SENTINEL_PORT={{ include "common.serviceport.dbaasha.sentinel" . }}
- SERVICE={{ template "common.fullname.dbaasha" . }}
- set -eu
-
- sentinel_update() {
- echo "Updating sentinel config"
- sed -i "1s/^/$(cat sentinel-id)\\n/" "$SENTINEL_CONF"
- sed -i "2s/^/sentinel monitor $MASTER_GROUP $1 $REDIS_PORT $QUORUM \\n/" "$SENTINEL_CONF"
- echo "sentinel announce-ip $ANNOUNCE_IP" >> $SENTINEL_CONF
- echo "sentinel announce-port $SENTINEL_PORT" >> $SENTINEL_CONF
- }
-
- redis_update() {
- echo "Updating redis config"
- echo "slaveof $1 $REDIS_PORT" >> "$REDIS_CONF"
- echo "slave-announce-ip $ANNOUNCE_IP" >> $REDIS_CONF
- echo "slave-announce-port $REDIS_PORT" >> $REDIS_CONF
- }
-
- redis_master_update() {
- echo "Updating redis default master config"
- echo "slave-announce-ip $ANNOUNCE_IP" >> $REDIS_CONF
- echo "slave-announce-port $REDIS_PORT" >> $REDIS_CONF
- }
-
- copy_config() {
- if [ -f "$SENTINEL_CONF" ]; then
- grep "sentinel myid" "$SENTINEL_CONF" > sentinel-id || true
- fi
- cp /readonly-config/redis.conf "$REDIS_CONF"
- cp /readonly-config/sentinel.conf "$SENTINEL_CONF"
- }
-
- setup_defaults() {
- echo "Setting up defaults"
- if [ "$INDEX" = "0" ]; then
- echo "Setting this pod as the default master"
- sed -i "s/^.*slaveof.*//" "$REDIS_CONF"
- redis_master_update
- sentinel_update "$ANNOUNCE_IP"
- else
- DEFAULT_MASTER="$(getent hosts "$SERVICE-announce-0" | awk '{ print $1 }')"
- if [ -z "$DEFAULT_MASTER" ]; then
- echo "Unable to resolve host"
- exit 1
- fi
- echo "Setting default slave config.."
- redis_update "$DEFAULT_MASTER"
- sentinel_update "$DEFAULT_MASTER"
- fi
- }
-
- find_master() {
- echo "Attempting to find master"
- if [ "$(redis-cli -h "$MASTER"{{ if .Values.auth }} -a "$AUTH"{{ end }} ping)" != "PONG" ]; then
- echo "Can't ping master, attempting to force failover"
- if redis-cli -h "$SERVICE" -p "$SENTINEL_PORT" sentinel failover "$MASTER_GROUP" | grep -q 'NOGOODSLAVE' ; then
- setup_defaults
- return 0
- fi
- sleep 10
- MASTER="$(redis-cli -h $SERVICE -p $SENTINEL_PORT sentinel get-master-addr-by-name $MASTER_GROUP | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')"
- if [ "$MASTER" ]; then
- sentinel_update "$MASTER"
- redis_update "$MASTER"
- else
- echo "Could not failover, exiting..."
- exit 1
- fi
- else
- echo "Found reachable master, updating config"
- sentinel_update "$MASTER"
- redis_update "$MASTER"
- fi
- }
-
- mkdir -p /data/conf/
-
- echo "Initializing config.."
- copy_config
-
- ANNOUNCE_IP=$(getent hosts "$SERVICE-announce-$INDEX" | awk '{ print $1 }')
- if [ -z "$ANNOUNCE_IP" ]; then
- "Could not resolve the announce ip for this pod"
- exit 1
- elif [ "$MASTER" ]; then
- find_master
- else
- setup_defaults
- fi
-
- if [ "${AUTH:-}" ]; then
- echo "Setting auth values"
- sed -i "s/replace-default-auth/$AUTH/" "$REDIS_CONF" "$SENTINEL_CONF"
- fi
-
- echo "Ready..."