instance-postgres 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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 >/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 -h "${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. }
  34. dump() {
  35. backup_file="${1?Missing file to backup database to}"
  36. PGPASSWORD="${POSTGRES_PASSWORD}" pg_dump -Ft --host "${POSTGRES_HOST}" --port "${POSTGRES_PORT}" --username "${POSTGRES_USER}" --dbname crowdsec_test > "$backup_file"
  37. }
  38. restore() {
  39. backup_file="${1?missing file to restore database from}"
  40. [ -f "$backup_file" ] || die "Backup file $backup_file doesn't exist"
  41. PGPASSWORD="${POSTGRES_PASSWORD}" pg_restore --username "${POSTGRES_USER}" --host "${POSTGRES_HOST}" --port "${POSTGRES_PORT}" --dbname crowdsec_test --clean < "$backup_file"
  42. }
  43. config_yaml() {
  44. POSTGRES_PORT=${POSTGRES_PORT} POSTGRES_HOST=${POSTGRES_HOST} yq '
  45. .db_config.type="postgres"|
  46. .db_config.user="crowdsec_test" |
  47. .db_config.password="crowdsec_test" |
  48. .db_config.db_name="crowdsec_test" |
  49. .db_config.host=strenv(POSTGRES_HOST) |
  50. .db_config.port=env(POSTGRES_PORT) |
  51. .db_config.sslmode="disable" |
  52. del(.db_config.db_path)
  53. ' -i "${CONFIG_YAML}"
  54. }
  55. [ $# -lt 1 ] && about
  56. case "$1" in
  57. setup)
  58. setup
  59. ;;
  60. config-yaml)
  61. config_yaml
  62. ;;
  63. dump)
  64. shift
  65. dump "$@"
  66. ;;
  67. restore)
  68. shift
  69. restore "$@"
  70. ;;
  71. *)
  72. about
  73. ;;
  74. esac;