instance-postgres 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #!/usr/bin/env bash
  2. set -eu
  3. script_name=$0
  4. die() {
  5. echo >&2 "$@"
  6. exit 1
  7. }
  8. POSTGRES_HOST=${POSTGRES_HOST:-127.0.0.1}
  9. POSTGRES_PORT=${POSTGRES_PORT:-5432}
  10. POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
  11. POSTGRES_USER=${POSTGRES_USER:-postgres}
  12. about() {
  13. die "usage: $script_name [ config_yaml | setup | dump <backup_file> | restore <backup_file> ]"
  14. }
  15. check_postgres_client() {
  16. if ! command -v psql --version >/dev/null; then
  17. die "missing required program 'psql' as a postgres client (package postgres-client-13 on debian like system)"
  18. fi
  19. }
  20. exec_sql() {
  21. cmd="${1?Missing required sql command}"
  22. PGPASSWORD="${POSTGRES_PASSWORD}" psql --host "${POSTGRES_HOST}" --user "${POSTGRES_USER}" "--port=${POSTGRES_PORT}" <<< "$cmd"
  23. }
  24. requirements() {
  25. check_mysql_client
  26. }
  27. setup() {
  28. exec_sql "DROP DATABASE IF EXISTS crowdsec_test;"
  29. exec_sql "CREATE DATABASE crowdsec_test;"
  30. exec_sql "DROP USER IF EXISTS crowdsec_test;"
  31. exec_sql "CREATE USER crowdsec_test WITH ENCRYPTED PASSWORD 'crowdsec_test';"
  32. exec_sql "GRANT ALL PRIVILEGES ON DATABASE crowdsec_test TO crowdsec_test;"
  33. # exec_sql "SET log_statement='all';"
  34. # exec_sql "SELECT pg_reload_conf();"
  35. }
  36. dump() {
  37. backup_file="${1?Missing file to backup database to}"
  38. PGPASSWORD="${POSTGRES_PASSWORD}" pg_dump -Ft --host "${POSTGRES_HOST}" --port "${POSTGRES_PORT}" --username "${POSTGRES_USER}" --dbname crowdsec_test > "$backup_file"
  39. }
  40. restore() {
  41. backup_file="${1?missing file to restore database from}"
  42. [ -f "$backup_file" ] || die "Backup file $backup_file doesn't exist"
  43. PGPASSWORD="${POSTGRES_PASSWORD}" pg_restore --username "${POSTGRES_USER}" --host "${POSTGRES_HOST}" --port "${POSTGRES_PORT}" --dbname crowdsec_test --clean < "$backup_file"
  44. }
  45. config_yaml() {
  46. POSTGRES_PORT=${POSTGRES_PORT} POSTGRES_HOST=${POSTGRES_HOST} yq '
  47. .db_config.type="postgres"|
  48. .db_config.user="crowdsec_test" |
  49. .db_config.password="crowdsec_test" |
  50. .db_config.db_name="crowdsec_test" |
  51. .db_config.host=strenv(POSTGRES_HOST) |
  52. .db_config.port=env(POSTGRES_PORT) |
  53. .db_config.sslmode="disable" |
  54. del(.db_config.db_path)
  55. ' -i "${CONFIG_YAML}"
  56. }
  57. [ $# -lt 1 ] && about
  58. case "$1" in
  59. setup)
  60. setup
  61. ;;
  62. config-yaml)
  63. config_yaml
  64. ;;
  65. dump)
  66. shift
  67. dump "$@"
  68. ;;
  69. restore)
  70. shift
  71. restore "$@"
  72. ;;
  73. *)
  74. about
  75. ;;
  76. esac;