backup-role-might work
This commit is contained in:
parent
f2c382190d
commit
dccc20a5f9
3 changed files with 48 additions and 6 deletions
|
@ -8,7 +8,7 @@
|
||||||
(s/def ::files (s/+ string?))
|
(s/def ::files (s/+ string?))
|
||||||
|
|
||||||
(s/def ::backup-file-config
|
(s/def ::backup-file-config
|
||||||
(s/merge ::rd/config
|
(s/merge ::rd/restic-config
|
||||||
(s/keys :req-un [::files])))
|
(s/keys :req-un [::files])))
|
||||||
|
|
||||||
(defn-spec backup-files-command ::cd/commands
|
(defn-spec backup-files-command ::cd/commands
|
||||||
|
|
|
@ -2,15 +2,18 @@
|
||||||
(:require
|
(:require
|
||||||
[orchestra.core :refer [defn-spec]]
|
[orchestra.core :refer [defn-spec]]
|
||||||
[clojure.spec.alpha :as s]
|
[clojure.spec.alpha :as s]
|
||||||
[dda.backup.core.domain :as cd]))
|
[clojure.string :as st]
|
||||||
|
[dda.backup.core.domain :as cd]
|
||||||
|
[dda.backup.restic.domain :as rd]))
|
||||||
|
|
||||||
(s/def ::pg-host string?)
|
(s/def ::pg-host string?)
|
||||||
(s/def ::pg-port pos-int?)
|
(s/def ::pg-port pos-int?)
|
||||||
(s/def ::pg-db string?)
|
(s/def ::pg-db string?)
|
||||||
(s/def ::pg-user string?)
|
(s/def ::pg-user string?)
|
||||||
(s/def ::pg-password string?)
|
(s/def ::pg-password string?)
|
||||||
|
(s/def ::pg-role-prefix string?)
|
||||||
|
|
||||||
(s/def ::config
|
(s/def ::pg-config
|
||||||
(s/keys :req-un [::pg-host
|
(s/keys :req-un [::pg-host
|
||||||
::pg-port
|
::pg-port
|
||||||
::pg-db
|
::pg-db
|
||||||
|
@ -18,8 +21,14 @@
|
||||||
::pg-user]
|
::pg-user]
|
||||||
:opt-un []))
|
:opt-un []))
|
||||||
|
|
||||||
|
(s/def ::pg-role-config
|
||||||
|
(s/merge ::pg-config
|
||||||
|
::rd/restic-config
|
||||||
|
(s/keys :req-un [::pg-role-prefix]
|
||||||
|
:opt-un [])))
|
||||||
|
|
||||||
(defn-spec psql-command ::cd/command
|
(defn-spec psql-command ::cd/command
|
||||||
[config ::config
|
[config ::pg-config
|
||||||
command ::cd/command]
|
command ::cd/command]
|
||||||
(let [{:keys [pg-host pg-port pg-user]} config]
|
(let [{:keys [pg-host pg-port pg-user]} config]
|
||||||
(into
|
(into
|
||||||
|
@ -27,13 +36,32 @@
|
||||||
"--no-password" "-c"]
|
"--no-password" "-c"]
|
||||||
command)))
|
command)))
|
||||||
|
|
||||||
|
(defn-spec pgdumpall-command ::cd/command
|
||||||
|
[config ::pg-role-config
|
||||||
|
command ::cd/command]
|
||||||
|
(let [{:keys [pg-host pg-port pg-user pg-role-prefix]} config]
|
||||||
|
(into
|
||||||
|
[]
|
||||||
|
(concat
|
||||||
|
["pg_dumpall" "-h" pg-host "-p" (str pg-port) "-U" pg-user
|
||||||
|
"--no-password"]
|
||||||
|
command
|
||||||
|
["|" "grep" pg-role-prefix "|"]
|
||||||
|
(rd/repo-command config ["backup" "--stdin"])
|
||||||
|
))))
|
||||||
|
|
||||||
(defn-spec pgpass string?
|
(defn-spec pgpass string?
|
||||||
[config ::config]
|
[config ::pg-config]
|
||||||
(let [{:keys [pg-host pg-db pg-user pg-password]} config]
|
(let [{:keys [pg-host pg-db pg-user pg-password]} config]
|
||||||
(str pg-host ":" pg-db ":" pg-user ":" pg-password)))
|
(str pg-host ":" pg-db ":" pg-user ":" pg-password)))
|
||||||
|
|
||||||
(defn-spec db-drop-create-command ::cd/commands
|
(defn-spec db-drop-create-command ::cd/commands
|
||||||
[config ::config]
|
[config ::pg-config]
|
||||||
(let [{:keys [pg-db]} config]
|
(let [{:keys [pg-db]} config]
|
||||||
[(psql-command config [(str "\"DROP DATABASE \\\"" pg-db "\\\";\"")])
|
[(psql-command config [(str "\"DROP DATABASE \\\"" pg-db "\\\";\"")])
|
||||||
(psql-command config [(str "\"CREATE DATABASE \\\"" pg-db "\\\";\"")])]))
|
(psql-command config [(str "\"CREATE DATABASE \\\"" pg-db "\\\";\"")])]))
|
||||||
|
|
||||||
|
(defn-spec backup-role-command ::cd/commands
|
||||||
|
[config ::pg-role-config]
|
||||||
|
(let [{:keys [pg-db]} config]
|
||||||
|
["bash" "-c" (st/join " " (pgdumpall-command config ["--roles-only"]))]))
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
(st/instrument `cut/pgpass)
|
(st/instrument `cut/pgpass)
|
||||||
(st/instrument `cut/db-drop-create-command)
|
(st/instrument `cut/db-drop-create-command)
|
||||||
|
(st/instrument `cut/backup-role-command)
|
||||||
|
|
||||||
(deftest should-calculate-pgpass
|
(deftest should-calculate-pgpass
|
||||||
(is (= "localhost:mydb:user:password"
|
(is (= "localhost:mydb:user:password"
|
||||||
|
@ -29,3 +30,16 @@
|
||||||
:pg-db "mydb"
|
:pg-db "mydb"
|
||||||
:pg-user "user"
|
:pg-user "user"
|
||||||
:pg-password "password"}))))
|
:pg-password "password"}))))
|
||||||
|
|
||||||
|
(deftest should-calculate-backup-role-command
|
||||||
|
(is (= [["bash" "-c" "pg_dumpall -h localhost -p 5432 -U user --no-password --roles-only | grep prefix | restic -r repo/dir-at-repo -v backup --stdin"]]
|
||||||
|
(cut/backup-role-command {:restic-repository "repo"
|
||||||
|
:backup-path "dir-at-repo"
|
||||||
|
:days-to-keep 39
|
||||||
|
:months-to-keep 3
|
||||||
|
:pg-host "localhost"
|
||||||
|
:pg-port 5432
|
||||||
|
:pg-db "mydb"
|
||||||
|
:pg-role-prefix "prefix"
|
||||||
|
:pg-user "user"
|
||||||
|
:pg-password "password"}))))
|
||||||
|
|
Loading…
Reference in a new issue