instance-postgres 2.4 KB

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