deploy-templates/templates/configmap.yaml (70 lines of code) (raw):

apiVersion: v1 kind: ConfigMap metadata: name: {{ include "redash.fullname" . }} labels: {{- include "redash.labels" . | nindent 4 }} data: install-upgrade.sh: | #!/usr/bin/env bash echo "This will retry connections until PostgreSQL/Redis is up, then perform database installation/migrations as needed." # Status command timeout STATUS_TIMEOUT=45 # Create tables command timeout CREATE_TIMEOUT=60 # Upgrade command timeout UPGRADE_TIMEOUT=600 # Time to wait between attempts RETRY_WAIT=10 # Max number of attempts MAX_ATTEMPTS=5 # Load connection variables . /config/dynamicenv.sh # Check Settings (for debug) # /app/manage.py check_settings # Initialize attempt counter ATTEMPTS=0 while ((ATTEMPTS < MAX_ATTEMPTS)); do echo "Starting attempt ${ATTEMPTS} of ${MAX_ATTEMPTS}" ATTEMPTS=$((ATTEMPTS+1)) # Install and upgrade if [[ "${1}" == "install" ]]; then echo "Installing Redash:" timeout $CREATE_TIMEOUT /app/manage.py database create_tables echo "Tables created" echo "Running Redash database migrations after install" timeout $UPGRADE_TIMEOUT /app/manage.py db upgrade echo "Upgrade complete" fi # Upgrade if [[ "${1}" == "upgrade" ]]; then echo "Running Redash database migrations:" timeout $UPGRADE_TIMEOUT /app/manage.py db upgrade echo "Upgrade complete" fi STATUS=$(timeout $STATUS_TIMEOUT /app/manage.py status 2>&1) RETCODE=$? echo "Return code: ${RETCODE}" echo "Status: ${STATUS}" case "$RETCODE" in 0) exit 0 ;; 124) echo "Status command timed out after ${STATUS_TIMEOUT} seconds." ;; esac case "$STATUS" in *sqlalchemy.exc.OperationalError*) echo "Database not yet functional, waiting." ;; *sqlalchemy.exc.ProgrammingError*) echo "Database does not appear to be installed." ;; esac echo "Waiting ${RETRY_WAIT} seconds before retrying." sleep 10 done echo "Reached ${MAX_ATTEMPTS} attempts, giving up." exit 1 dynamicenv.sh: | # Build connection URLs from environment variables. # NOTES: # This script should be sourced, not run directly. # All variables are expected to be set by the caller. if [ -z "$REDASH_DATABASE_URL" ]; then export REDASH_DATABASE_URL=postgresql://${REDASH_DATABASE_USER}:${REDASH_DATABASE_PASSWORD}@${REDASH_DATABASE_HOSTNAME}:${REDASH_DATABASE_PORT}/${REDASH_DATABASE_DB} echo "Using Database: postgresql://${REDASH_DATABASE_USER}:******@${REDASH_DATABASE_HOSTNAME}:${REDASH_DATABASE_PORT}/${REDASH_DATABASE_DB}" else echo "Using external postgresql database" fi if [ -z "$REDASH_REDIS_URL" ]; then export REDASH_REDIS_URL=redis://:${REDASH_REDIS_PASSWORD}@${REDASH_REDIS_HOSTNAME}:${REDASH_REDIS_PORT}/${REDASH_REDIS_DB}?${REDASH_REDIS_CONN_PARAMS} echo "Using Redis: redis://:******@${REDASH_REDIS_HOSTNAME}:${REDASH_REDIS_PORT}/${REDASH_REDIS_DB}" else echo "Using external redis database" fi