init command now is working
This commit is contained in:
parent
ca6a34bbc3
commit
36a6d7991b
8 changed files with 106 additions and 21 deletions
4
Makefile
4
Makefile
|
@ -61,11 +61,11 @@ dist: build-uberjar ## Build and package Clojure service
|
||||||
|
|
||||||
install: build-jar
|
install: build-jar
|
||||||
$(info --------- install library jar ---------)
|
$(info --------- install library jar ---------)
|
||||||
clojure -T:build install
|
clojure -T:build/task install
|
||||||
|
|
||||||
deploy: build-jar
|
deploy: build-jar
|
||||||
$(info --------- install library jar ---------)
|
$(info --------- install library jar ---------)
|
||||||
clojure -T:build deploy
|
clojure -T:build/task deploy
|
||||||
|
|
||||||
publish: build-jar
|
publish: build-jar
|
||||||
$(info --------- Build and Package Clojure lib ---------)
|
$(info --------- Build and Package Clojure lib ---------)
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
(ns build
|
(ns build
|
||||||
(:require
|
(:require
|
||||||
[clojure.tools.build.api :as build-api]
|
[clojure.tools.build.api :as build-api]
|
||||||
|
[clojure.edn :as edn]
|
||||||
[clojure.pprint :as pprint]))
|
[clojure.pprint :as pprint]))
|
||||||
|
|
||||||
;; ---------------------------------------------------------
|
;; ---------------------------------------------------------
|
||||||
|
|
15
src/dda/backup/core.clj
Normal file
15
src/dda/backup/core.clj
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
(ns dda.backup.core
|
||||||
|
(:require [clojure.spec.alpha :as s]
|
||||||
|
[orchestra.core :refer [defn-spec]]
|
||||||
|
))
|
||||||
|
|
||||||
|
(s/def ::command (s/cat
|
||||||
|
:app string?
|
||||||
|
:params (s/* string?)))
|
||||||
|
(s/def ::commands (s/coll-of ::command))
|
||||||
|
|
||||||
|
(s/def ::dry-run boolean?)
|
||||||
|
(s/def ::debug boolean?)
|
||||||
|
|
||||||
|
(def default {:dry-run false
|
||||||
|
:debug false})
|
14
src/dda/backup/infrastructure.clj
Normal file
14
src/dda/backup/infrastructure.clj
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
(ns dda.backup.infrastructure
|
||||||
|
(:require [orchestra.core :refer [defn-spec]]
|
||||||
|
[babashka.tasks :as t]
|
||||||
|
[dda.backup.core :as core]))
|
||||||
|
|
||||||
|
(defn-spec execute! nil?
|
||||||
|
[commands ::core/command
|
||||||
|
config any?]
|
||||||
|
(let [{:keys [dry-run debug]} config]
|
||||||
|
(doseq [c commands]
|
||||||
|
(when debug
|
||||||
|
(println c))
|
||||||
|
(when-not dry-run
|
||||||
|
(apply t/shell c)))))
|
|
@ -2,5 +2,15 @@
|
||||||
(:require
|
(:require
|
||||||
[orchestra.core :refer [defn-spec]]
|
[orchestra.core :refer [defn-spec]]
|
||||||
[clojure.spec.alpha :as s]
|
[clojure.spec.alpha :as s]
|
||||||
[dda.build.devops.domain :as domain]
|
[dda.backup.core :as core]
|
||||||
[dda.build.infrastructure :as i]))
|
[dda.backup.management.domain :as domain]
|
||||||
|
[dda.backup.infrastructure :as i]))
|
||||||
|
|
||||||
|
(s/def ::config
|
||||||
|
(s/keys :req-un [::domain/restic-repository ::domain/backup-path]
|
||||||
|
:opt-un [::domain/certificate-file ::core/debug ::core/dry-run]))
|
||||||
|
|
||||||
|
(defn-spec init! nil?
|
||||||
|
[config ::config]
|
||||||
|
(let [config-w-defaults (merge core/default config)]
|
||||||
|
(i/execute! (domain/init-repo-command config-w-defaults) config-w-defaults)))
|
|
@ -1,21 +1,37 @@
|
||||||
(ns dda.backup.management.domain
|
(ns dda.backup.management.domain
|
||||||
(: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 :as core]))
|
||||||
|
|
||||||
(s/def ::certificate-file string?)
|
|
||||||
(s/def ::restic-repository string?)
|
(s/def ::restic-repository string?)
|
||||||
(s/def ::backup-file-path string?)
|
(s/def ::backup-path string?)
|
||||||
|
(s/def ::certificate-file string?)
|
||||||
|
(s/def ::password-file string?)
|
||||||
|
|
||||||
(s/def ::config
|
(s/def ::config
|
||||||
(s/keys :req-un [::restic-repository ::backup-file-path]
|
(s/keys :req-un [::restic-repository ::backup-path]
|
||||||
:opt-un [::certificate-file]))
|
:opt-un [::certificate-file ::password-file]))
|
||||||
|
|
||||||
; TODO: specify output better
|
(defn-spec init-repo-command ::core/commands
|
||||||
(defn-spec init-repo-command seq?
|
|
||||||
[config ::config]
|
[config ::config]
|
||||||
(let [{:keys [certificate-file restic-repository backup-file-path]} config]
|
(let [{:keys [certificate-file password-file restic-repository backup-path]} config]
|
||||||
(if (some? certificate-file)
|
(cond
|
||||||
["restic" "-r" (str restic-repository "/" backup-file-path) "-v" "init" "--cacert" certificate-file]
|
(some? certificate-file)
|
||||||
["restic" "-r" (str restic-repository "/" backup-file-path) "-v" "init"]
|
[ ["restic" "-r" (str restic-repository "/" backup-path) "--cacert" certificate-file "-v" "init"]]
|
||||||
|
(some? password-file)
|
||||||
|
[["restic" "-r" (str restic-repository "/" backup-path) "--password-file" password-file "-v" "init"]]
|
||||||
|
:else
|
||||||
|
[ ["restic" "-r" (str restic-repository "/" backup-path) "-v" "init"]]
|
||||||
)))
|
)))
|
||||||
|
|
||||||
|
(defn-spec list-snapshot-command ::core/commands
|
||||||
|
[config ::config]
|
||||||
|
(let [{:keys [certificate-file password-file restic-repository backup-path]} config]
|
||||||
|
(cond
|
||||||
|
(some? certificate-file)
|
||||||
|
[["restic" "-r" (str restic-repository "/" backup-path) "--cacert" certificate-file "-v" "snapshots"]]
|
||||||
|
(some? password-file)
|
||||||
|
[["restic" "-r" (str restic-repository "/" backup-path) "--password-file" password-file "-v" "snapshots"]]
|
||||||
|
:else
|
||||||
|
[["restic" "-r" (str restic-repository "/" backup-path) "-v" "snapshots"]])))
|
||||||
|
|
16
test/dda/backup/core_test.clj
Normal file
16
test/dda/backup/core_test.clj
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
(ns dda.backup.core-test
|
||||||
|
(:require
|
||||||
|
[clojure.test :refer [deftest is are testing run-tests]]
|
||||||
|
[clojure.spec.alpha :as s]
|
||||||
|
[clojure.spec.test.alpha :as st]
|
||||||
|
[dda.backup.core :as cut]))
|
||||||
|
|
||||||
|
(deftest should-verify-command
|
||||||
|
(is (= {:app "restic", :params ["-r" "repo/dir" "-v" "init" "--cacert" "ca"]}
|
||||||
|
(s/conform ::cut/command ["restic" "-r" "repo/dir" "-v" "init" "--cacert" "ca"]))))
|
||||||
|
|
||||||
|
(deftest should-verify-commands
|
||||||
|
(is (= [{:app "ls"}
|
||||||
|
{:app "restic", :params ["-r" "repo/dir" "-v" "init" "--cacert" "ca"]}]
|
||||||
|
(s/conform ::cut/commands [["ls"]
|
||||||
|
["restic" "-r" "repo/dir" "-v" "init" "--cacert" "ca"]]))))
|
|
@ -5,13 +5,26 @@
|
||||||
[dda.backup.management.domain :as cut]))
|
[dda.backup.management.domain :as cut]))
|
||||||
|
|
||||||
(st/instrument `cut/init-repo-command)
|
(st/instrument `cut/init-repo-command)
|
||||||
|
(st/instrument `cut/list-snapshot-command)
|
||||||
|
|
||||||
(deftest should-calculate-init-repo-command
|
(deftest should-calculate-init-repo-command
|
||||||
(is (= ["restic" "-r" "repo/dir" "-v" "init" "--cacert" "ca"]
|
(is (= [["restic" "-r" "repo/dir" "--cacert" "ca" "-v" "init"]]
|
||||||
(cut/init-repo-command {:certificate-file "ca"
|
(cut/init-repo-command {:certificate-file "ca"
|
||||||
:restic-repository "repo"
|
:restic-repository "repo"
|
||||||
:backup-file-path "dir"})))
|
:backup-path "dir"})))
|
||||||
(is (= ["restic" "-r" "repo/dir" "-v" "init"]
|
(is (= [["restic" "-r" "repo/dir" "-v" "init"]]
|
||||||
(cut/init-repo-command {:restic-repository "repo"
|
(cut/init-repo-command {:restic-repository "repo"
|
||||||
:backup-file-path "dir"})))
|
:backup-path "dir"}))))
|
||||||
)
|
|
||||||
|
(deftest should-calculate-list-snapshot-command
|
||||||
|
(is (= [["restic" "-r" "repo/dir" "--cacert" "ca" "-v" "snapshots"]]
|
||||||
|
(cut/list-snapshot-command {:certificate-file "ca"
|
||||||
|
:restic-repository "repo"
|
||||||
|
:backup-path "dir"})))
|
||||||
|
(is (= [["restic" "-r" "repo/dir" "--password-file" "password" "-v" "snapshots"]]
|
||||||
|
(cut/list-snapshot-command {:password-file "password"
|
||||||
|
:restic-repository "repo"
|
||||||
|
:backup-path "dir"})))
|
||||||
|
(is (= [["restic" "-r" "repo/dir" "-v" "snapshots"]]
|
||||||
|
(cut/list-snapshot-command {:restic-repository "repo"
|
||||||
|
:backup-path "dir"}))))
|
||||||
|
|
Loading…
Reference in a new issue