diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 291e998b..7076a626 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -80,6 +80,11 @@ variables: options: - "yes" - "no" + FLUSH_EXTERNAL_SERVICES_TYPE: + description: > + Select the type of external services (e.g. "RUN", or "STACKIT"), as they require different + cleanup strategies. Requires `FLUSH_EXTERNAL_SERVICES_BEFORE=yes`. + value: "RUN" DEBUG_ENABLED: description: > Allows to set `debug.enabled` to true for a deployment, needs to be supported by stage specific @@ -272,7 +277,22 @@ db-cleanup: when: "on_success" script: # yamllint disable-line rule:line-length rule:quoted-strings - - export FILES=(${CI_PROJECT_DIR}/helmfile/environments/default/database.yaml.gotmpl ${CI_PROJECT_DIR}/helmfile/environments/dev/write-over-values-for-environment.yaml.gotmpl) + - | + echo "Checking FLUSH_EXTERNAL_SERVICES_TYPE value..." + case "$FLUSH_EXTERNAL_SERVICES_TYPE" in + "RUN") + echo " ... running flush procedure for RUN cluster." + ;; + "STACKIT") + echo " ... running flush procedure for STACKIT provider." + ;; + *) + echo "ERROR: FLUSH_EXTERNAL_SERVICES_TYPE is not set to valid value." + echo " Expected 'RUN' or 'STACKIT', got ${FLUSH_EXTERNAL_SERVICES_TYPE}." + exit 1 + ;; + esac + - export FILES=(${CI_PROJECT_DIR}/helmfile/environments/default/database.yaml.gotmpl ${CI_PROJECT_DIR}/helmfile/environments/dev/write-over-values-for-environment.yaml.gotmpl ${CI_PROJECT_DIR}/helmfile/environments/dev/values.yaml.gotmpl) # Cleanup MariaDB - | export DATABASES="oxAppSuite" @@ -297,26 +317,28 @@ db-cleanup: fi; done; - CONNECTION="--host=${MARIADB_HOST} \ - --port=${MARIADB_PORT} \ - --user=${MARIADB_USERNAME} \ - --password=${MARIADB_PASSWORD} \ - --skip-ssl" + CONNECTION=( + "--host=${MARIADB_HOST}" + "--port=${MARIADB_PORT}" + "--user=${MARIADB_USERNAME}" + "--password=${MARIADB_PASSWORD}" + "--skip-ssl" + ) echo "[mysql] [${ENV_DATABASE}] DROP ${MARIADB_DATABASE} on ${MARIADB_HOST}" - mariadb ${CONNECTION} -e "DROP DATABASE IF EXISTS ${MARIADB_DATABASE};" + mariadb ${CONNECTION[@]} -e "DROP DATABASE IF EXISTS ${MARIADB_DATABASE};" if [ "${ENV_DATABASE}" = "oxAppSuite" ]; then echo "[mysql] [${ENV_DATABASE}] DROP oxguard on ${MARIADB_HOST}" - mariadb ${CONNECTION} -e "DROP DATABASE IF EXISTS oxguard;" + mariadb ${CONNECTION[@]} -e "DROP DATABASE IF EXISTS oxguard;" echo "[mysql] [${ENV_DATABASE}] DROP oxguard_1 on ${MARIADB_HOST}" - mariadb ${CONNECTION} -e "DROP DATABASE IF EXISTS oxguard_1;" + mariadb ${CONNECTION[@]} -e "DROP DATABASE IF EXISTS oxguard_1;" echo "[mysql] [${ENV_DATABASE}] DROP PRIMARYDB_9 on ${MARIADB_HOST}" - mariadb ${CONNECTION} -e "DROP DATABASE IF EXISTS PRIMARYDB_9;" + mariadb ${CONNECTION[@]} -e "DROP DATABASE IF EXISTS PRIMARYDB_9;" else - mariadb ${CONNECTION} -e "CREATE DATABASE ${MARIADB_DATABASE};" - mariadb ${CONNECTION} -e "GRANT ALL PRIVILEGES ON ${MARIADB_DATABASE}.* TO ${MARIADB_USERNAME}@\"%\";" - mariadb ${CONNECTION} -e "FLUSH PRIVILEGES;" + mariadb ${CONNECTION[@]} -e "CREATE DATABASE ${MARIADB_DATABASE};" + mariadb ${CONNECTION[@]} -e "GRANT ALL PRIVILEGES ON ${MARIADB_DATABASE}.* TO ${MARIADB_USERNAME}@\"%\";" + mariadb ${CONNECTION[@]} -e "FLUSH PRIVILEGES;" fi; done; # Cleanup PostgreSQL @@ -347,15 +369,26 @@ db-cleanup: fi; done; - echo "[psql] [${ENV_DATABASE}] DROP ${POSTGRES_DATABASE} on ${PGHOST}" - psql -c "DROP DATABASE ${POSTGRES_DATABASE}" || true; - if [ "${PGPARAMS}" = "null" ]; then - psql -c "CREATE DATABASE \"${POSTGRES_DATABASE}\";" - else - psql -c "CREATE DATABASE \"${POSTGRES_DATABASE}\" ${PGPARAMS};" - fi; - psql -c "ALTER DATABASE \"${POSTGRES_DATABASE}\" OWNER TO \"${PGUSER}\""; - psql -c "GRANT ALL PRIVILEGES ON DATABASE \"${POSTGRES_DATABASE}\" TO \"${PGUSER}\""; + + case "$FLUSH_EXTERNAL_SERVICES_TYPE" in + "STACKIT") + # In case of STACKIT resources the db content should just be dropped + echo "[psql] [${ENV_DATABASE}] DROP OWNED BY ${PGUSER} in ${POSTGRES_DATABASE} on ${PGHOST}" + psql -c "DROP OWNED BY ${PGUSER}" || true; + ;; + *) + # Usually, e.g. in "RUN" cluster, databases can simply be dropped and recreated + echo "[psql] [${ENV_DATABASE}] DROP ${POSTGRES_DATABASE} on ${PGHOST}" + psql -c "DROP DATABASE ${POSTGRES_DATABASE}" || true; + if [ "${PGPARAMS}" = "null" ]; then + psql -c "CREATE DATABASE \"${POSTGRES_DATABASE}\";" + else + psql -c "CREATE DATABASE \"${POSTGRES_DATABASE}\" ${PGPARAMS};" + fi; + psql -c "ALTER DATABASE \"${POSTGRES_DATABASE}\" OWNER TO \"${PGUSER}\""; + psql -c "GRANT ALL PRIVILEGES ON DATABASE \"${POSTGRES_DATABASE}\" TO \"${PGUSER}\""; + ;; + esac done; # Cleanup Objectstore - |