#!/usr/bin/env bash set -eu script_name=$0 die() { echo >&2 "$@" exit 1 } POSTGRES_HOST=${POSTGRES_HOST:-127.0.0.1} POSTGRES_PORT=${POSTGRES_PORT:-5432} POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} POSTGRES_USER=${POSTGRES_USER:-postgres} about() { die "usage: $script_name [ config_yaml | setup | dump | restore ]" } check_postgres_client() { if ! command -v psql --version >/dev/null; then die "missing required program 'psql' as a postgres client (package postgres-client-13 on debian like system)" fi } exec_sql() { cmd="${1?Missing required sql command}" PGPASSWORD="${POSTGRES_PASSWORD}" psql --host "${POSTGRES_HOST}" --user "${POSTGRES_USER}" "--port=${POSTGRES_PORT}" <<< "$cmd" } requirements() { check_mysql_client } setup() { exec_sql "DROP DATABASE IF EXISTS crowdsec_test;" exec_sql "CREATE DATABASE crowdsec_test;" exec_sql "DROP USER IF EXISTS crowdsec_test;" exec_sql "CREATE USER crowdsec_test WITH ENCRYPTED PASSWORD 'crowdsec_test';" exec_sql "GRANT ALL PRIVILEGES ON DATABASE crowdsec_test TO crowdsec_test;" # exec_sql "SET log_statement='all';" # exec_sql "SELECT pg_reload_conf();" } dump() { backup_file="${1?Missing file to backup database to}" PGPASSWORD="${POSTGRES_PASSWORD}" pg_dump -Ft --host "${POSTGRES_HOST}" --port "${POSTGRES_PORT}" --username "${POSTGRES_USER}" --dbname crowdsec_test > "$backup_file" } restore() { backup_file="${1?missing file to restore database from}" [ -f "$backup_file" ] || die "Backup file $backup_file doesn't exist" PGPASSWORD="${POSTGRES_PASSWORD}" pg_restore --username "${POSTGRES_USER}" --host "${POSTGRES_HOST}" --port "${POSTGRES_PORT}" --dbname crowdsec_test --clean < "$backup_file" } config_yaml() { POSTGRES_PORT=${POSTGRES_PORT} POSTGRES_HOST=${POSTGRES_HOST} yq ' .db_config.type="postgres"| .db_config.user="crowdsec_test" | .db_config.password="crowdsec_test" | .db_config.db_name="crowdsec_test" | .db_config.host=strenv(POSTGRES_HOST) | .db_config.port=env(POSTGRES_PORT) | .db_config.sslmode="disable" | del(.db_config.db_path) ' -i "${CONFIG_YAML}" } [ $# -lt 1 ] && about case "$1" in setup) setup ;; config-yaml) config_yaml ;; dump) shift dump "$@" ;; restore) shift restore "$@" ;; *) about ;; esac;