1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #!/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 <backup_file> | restore <backup_file> ]"
- }
- 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;
|