From 1003aa7a277177f4b6139e8c472509fd6543552e Mon Sep 17 00:00:00 2001 From: Michael Jerger <michael.jerger@meissa-gmbh.de> Date: Mon, 13 Jan 2025 13:50:45 +0100 Subject: [PATCH] backup: use config data instead of code --- doc/BackupAndRestore.md | 20 +++--- infrastructure/backup/image/Dockerfile | 2 +- .../backup/image/resources/backup.bb | 27 ++++---- .../backup/image/resources/bb-backup.edn | 1 + .../backup/image/resources/change-password.bb | 21 ++++--- .../backup/image/resources/config.clj | 61 ------------------- .../backup/image/resources/install.bb | 2 +- .../backup/image/resources/list-snapshots.bb | 19 +++--- .../backup/image/resources/restore.bb | 23 +++---- infrastructure/backup/image/resources/wait.bb | 16 +++-- infrastructure/backup/test/resources/test.bb | 49 +++++++++------ 11 files changed, 91 insertions(+), 150 deletions(-) delete mode 100644 infrastructure/backup/image/resources/config.clj diff --git a/doc/BackupAndRestore.md b/doc/BackupAndRestore.md index 2e4b10e..57f0893 100644 --- a/doc/BackupAndRestore.md +++ b/doc/BackupAndRestore.md @@ -18,20 +18,16 @@ ## Manual restore -1. Scale Cloud deployment down: - `kubectl -n nextcloud scale deployment cloud-deployment --replicas=0` -2. Scale backup-restore deployment up: +1. Scale backup-restore deployment up: `kubectl -n nextcloud scale deployment backup-restore --replicas=1` 3. exec into pod and execute restore pod `kubectl -n nextcloud exec -it backup-restore -- restore.bb` 4. Scale backup-restore deployment down: `kubectl -n nextcloud scale deployment backup-restore --replicas=0` -5. Scale Cloud deployment up: - `kubectl -n nextcloud scale deployment cloud-deployment --replicas=1` ## Change Password -1. Apply restic-new-password to secret & backup deployment +1. Check restic-new-password env is set in backup deployment ``` kind: Deployment metadata: @@ -43,7 +39,9 @@ env: - name: RESTIC_NEW_PASSWORD_FILE value: /var/run/secrets/backup-secrets/restic-new-password - --- + ``` +2. Add restic-new-password to secret + ``` kind: Secret metadata: name: backup-secret @@ -51,13 +49,13 @@ restic-password: old restic-new-password: new ``` -2. Scale backup-restore deployment up: +3. Scale backup-restore deployment up: `kubectl -n nextcloud scale deployment backup-restore --replicas=1` -3. exec into pod and execute restore pod +4. exec into pod and execute restore pod `kubectl -n nextcloud exec -it backup-restore -- change-password.bb` -4. Scale backup-restore deployment down: +5. Scale backup-restore deployment down: `kubectl -n nextcloud scale deployment backup-restore --replicas=0` -5. Replace restic-password with restic-new-password in secret +6. Replace restic-password with restic-new-password in secret ``` kind: Secret metadata: diff --git a/infrastructure/backup/image/Dockerfile b/infrastructure/backup/image/Dockerfile index 02a85be..69f7040 100644 --- a/infrastructure/backup/image/Dockerfile +++ b/infrastructure/backup/image/Dockerfile @@ -1,4 +1,4 @@ -FROM domaindrivenarchitecture/dda-backup:5.2.1 +FROM domaindrivenarchitecture/dda-backup:5.3.0 # Prepare Entrypoint Script ADD resources /tmp diff --git a/infrastructure/backup/image/resources/backup.bb b/infrastructure/backup/image/resources/backup.bb index b2e9acc..da49f11 100755 --- a/infrastructure/backup/image/resources/backup.bb +++ b/infrastructure/backup/image/resources/backup.bb @@ -1,32 +1,31 @@ #!/usr/bin/env bb -(require - '[babashka.fs :as fs]) -(-> "/usr/local/bin/config.clj" fs/file load-file) - (require '[babashka.tasks :as t] '[dda.backup.core :as bc] + '[dda.backup.config :as cfg] '[dda.backup.restic :as rc] '[dda.backup.postgresql :as pg] - '[dda.backup.backup :as bak] - '[config :as cf]) + '[dda.backup.backup :as bak]) + +(def config (cfg/read-config "/usr/local/bin/config.edn")) + (defn prepare! [] - (bc/create-aws-credentials! cf/aws-config) - (pg/create-pg-pass! cf/db-config)) + (bc/create-aws-credentials! (:aws-config config)) + (pg/create-pg-pass! (:db-config config))) (defn restic-repo-init! [] - (rc/init! cf/file-config) - (rc/init! cf/db-role-config) - (rc/init! cf/db-config)) + (rc/init! (:file-config config)) + (rc/init! (:db-role-config config)) + (rc/init! (:db-config config))) (defn restic-backup! [] - (bak/backup-file! cf/file-config) - (bak/backup-db-roles! cf/db-role-config) - (bak/backup-db! cf/db-config)) + (bak/backup-file! (:file-config config)) + (bak/backup-db-roles! (:db-role-config config)) + (bak/backup-db! (:db-config config))) (t/shell "start-maintenance.sh") (prepare!) diff --git a/infrastructure/backup/image/resources/bb-backup.edn b/infrastructure/backup/image/resources/bb-backup.edn index 1a7297a..11e9d9c 100644 --- a/infrastructure/backup/image/resources/bb-backup.edn +++ b/infrastructure/backup/image/resources/bb-backup.edn @@ -1,3 +1,4 @@ {:deps {org.clojure/spec.alpha {:mvn/version "0.4.233"} orchestra/orchestra {:mvn/version "2021.01.01-1"} + aero/aero {:mvn/version "1.1.6"} org.domaindrivenarchitecture/dda-backup {:local/root "/usr/local/lib/dda-backup"}}} diff --git a/infrastructure/backup/image/resources/change-password.bb b/infrastructure/backup/image/resources/change-password.bb index d8c1b82..4746a1e 100755 --- a/infrastructure/backup/image/resources/change-password.bb +++ b/infrastructure/backup/image/resources/change-password.bb @@ -1,20 +1,21 @@ #!/usr/bin/env bb -(require - '[babashka.fs :as fs]) -(-> "/usr/local/bin/config.clj" fs/file load-file) - (require '[dda.backup.core :as bc] - '[dda.backup.restic :as rc] - '[config :as cf]) + '[dda.backup.config :as cfg] + '[dda.backup.restic :as rc]) -(def file-pw-change-config (merge cf/file-config {:new-password-file (bc/env-or-file "RESTIC_NEW_PASSWORD_FILE")})) -(def db-pw-change-config (merge cf/db-config {:new-password-file (bc/env-or-file "RESTIC_NEW_PASSWORD_FILE")})) -(def db-role-pw-change-config (merge cf/db-role-config {:new-password-file (bc/env-or-file "RESTIC_NEW_PASSWORD_FILE")})) +(def config (cfg/read-config "/usr/local/bin/config.edn")) + +(def file-pw-change-config (merge (:file-config config) + {:new-password-file (bc/env-or-file "RESTIC_NEW_PASSWORD_FILE")})) +(def db-role-pw-change-config (merge (:db-role-config config) + {:new-password-file (bc/env-or-file "RESTIC_NEW_PASSWORD_FILE")})) +(def db-pw-change-config (merge (:db-config config) + {:new-password-file (bc/env-or-file "RESTIC_NEW_PASSWORD_FILE")})) (defn prepare! [] - (bc/create-aws-credentials! cf/aws-config)) + (bc/create-aws-credentials! (:aws-config config))) (defn change-password! [] diff --git a/infrastructure/backup/image/resources/config.clj b/infrastructure/backup/image/resources/config.clj deleted file mode 100644 index 9386f02..0000000 --- a/infrastructure/backup/image/resources/config.clj +++ /dev/null @@ -1,61 +0,0 @@ -(ns config - (:require - [dda.backup.core :as bc])) - -(def restic-repo {:password-file (bc/env-or-file "RESTIC_PASSWORD_FILE") - :restic-repository (bc/env-or-file "RESTIC_REPOSITORY")}) - -(def file-config (merge restic-repo {:backup-path "files" - :execution-directory "/var/backups" - :restore-target-directory "/var/backups/" - :files ["."]})) - -(def file-restore-config (merge restic-repo {:backup-path "files" - :restore-target-directory "/var/backups/" - :clean-up-elements [".htaccess" - ".reuse/" - ".user.ini" - "3rdparty/" - "apps/" - "composer.json" - "composer.lock" - "console.php" - "core/" - "cron.php" - "custom_apps/" - "data/" - "dist/" - "index.html" - "index.php" - "lib/" - "ocs/" - "ocs-provider/" - "package-lock.json" - "package.json" - "public.php" - "remote.php" - "resources" - "robots.txt" - "status.php" - "themes/" - "version.php"]})) - -(def db-config (merge restic-repo {:backup-path "pg-database" - :pg-host (bc/env-or-file "POSTGRES_SERVICE") - :pg-port (bc/env-or-file "POSTGRES_PORT") - :pg-db (bc/env-or-file "POSTGRES_DB") - :pg-user (bc/env-or-file "POSTGRES_USER") - :pg-password (bc/env-or-file "POSTGRES_PASSWORD")})) - -(def db-role-config (merge restic-repo {:backup-path "pg-role" - :pg-role-prefix "oc_" - :pg-host (bc/env-or-file "POSTGRES_SERVICE") - :pg-port (bc/env-or-file "POSTGRES_PORT") - :pg-db (bc/env-or-file "POSTGRES_DB") - :pg-user (bc/env-or-file "POSTGRES_USER") - :pg-password (bc/env-or-file "POSTGRES_PASSWORD")})) - -(def aws-config {:aws-access-key-id (bc/env-or-file "AWS_ACCESS_KEY_ID") - :aws-secret-access-key (bc/env-or-file "AWS_SECRET_ACCESS_KEY")}) - -(def dry-run {:dry-run true :debug true}) diff --git a/infrastructure/backup/image/resources/install.bb b/infrastructure/backup/image/resources/install.bb index 9ae0e86..e39557f 100755 --- a/infrastructure/backup/image/resources/install.bb +++ b/infrastructure/backup/image/resources/install.bb @@ -6,7 +6,7 @@ (ub/upgrade-system!) (in/install! "bb-backup.edn" :target-name "bb.edn" :mod "0440") -(in/install! "config.clj" :mod "0440") +(in/install! "config.edn" :mod "0440") (in/install! "init.bb") (in/install! "backup.bb") (in/install! "restore.bb") diff --git a/infrastructure/backup/image/resources/list-snapshots.bb b/infrastructure/backup/image/resources/list-snapshots.bb index fb97cdd..178b27a 100755 --- a/infrastructure/backup/image/resources/list-snapshots.bb +++ b/infrastructure/backup/image/resources/list-snapshots.bb @@ -1,22 +1,21 @@ #!/usr/bin/env bb -(require - '[babashka.fs :as fs]) -(-> "/usr/local/bin/config.clj" fs/file load-file) - (require '[dda.backup.core :as bc] - '[dda.backup.restic :as rc] - '[config :as cf]) + '[dda.backup.config :as cfg] + '[dda.backup.restic :as rc]) + +(def config (cfg/read-config "/usr/local/bin/config.edn")) + (defn prepare! [] - (bc/create-aws-credentials! cf/aws-config)) + (bc/create-aws-credentials! (:aws-config config))) (defn list-snapshots! [] - (rc/list-snapshots! cf/file-config) - (rc/list-snapshots! cf/db-role-config) - (rc/list-snapshots! cf/db-config)) + (rc/list-snapshots! (:file-config config)) + (rc/list-snapshots! (:db-role-config config)) + (rc/list-snapshots! (:db-config config))) (prepare!) (list-snapshots!) diff --git a/infrastructure/backup/image/resources/restore.bb b/infrastructure/backup/image/resources/restore.bb index 5f41f21..09bd358 100755 --- a/infrastructure/backup/image/resources/restore.bb +++ b/infrastructure/backup/image/resources/restore.bb @@ -1,27 +1,24 @@ #!/usr/bin/env bb -(require - '[babashka.fs :as fs]) -(-> "/usr/local/bin/config.clj" fs/file load-file) - (require '[babashka.tasks :as t] '[dda.backup.core :as bc] + '[dda.backup.config :as cfg] '[dda.backup.postgresql :as pg] - '[dda.backup.restore :as rs] - '[config :as cf]) + '[dda.backup.restore :as rs]) + +(def config (cfg/read-config "/usr/local/bin/config.edn")) (defn prepare! [] - (bc/create-aws-credentials! cf/aws-config) - (pg/create-pg-pass! cf/db-config)) + (bc/create-aws-credentials! (:aws-config config)) + (pg/create-pg-pass! (:db-config config))) (defn restic-restore! [] - (pg/drop-create-db! cf/db-config) - (rs/restore-db-roles! cf/db-role-config) - (rs/restore-db! cf/db-config) - (rs/restore-file! cf/file-restore-config) - ) + (pg/drop-create-db! (:db-config config)) + (rs/restore-db-roles! (:db-role-config config)) + (rs/restore-db! (:db-config config)) + (rs/restore-file! (:file-restore-config config))) (t/shell "start-maintenance.sh") (prepare!) diff --git a/infrastructure/backup/image/resources/wait.bb b/infrastructure/backup/image/resources/wait.bb index 620b789..bd0ecd9 100755 --- a/infrastructure/backup/image/resources/wait.bb +++ b/infrastructure/backup/image/resources/wait.bb @@ -1,21 +1,19 @@ #!/usr/bin/env bb -(require - '[babashka.fs :as fs]) -(-> "/usr/local/bin/config.clj" fs/file load-file) - (require '[dda.backup.core :as bc] - '[dda.backup.postgresql :as pg] - '[config :as cf]) + '[dda.backup.config :as cfg] + '[dda.backup.postgresql :as pg]) + +(def config (cfg/read-config "/usr/local/bin/config.edn")) (defn prepare! [] - (bc/create-aws-credentials! cf/aws-config) - (pg/create-pg-pass! cf/db-config)) + (bc/create-aws-credentials! (:aws-config config)) + (pg/create-pg-pass! (:db-config config))) (defn wait! [] (while true (Thread/sleep 1000))) (prepare!) -(wait!) \ No newline at end of file +(wait!) diff --git a/infrastructure/backup/test/resources/test.bb b/infrastructure/backup/test/resources/test.bb index 203fd27..83e51b8 100755 --- a/infrastructure/backup/test/resources/test.bb +++ b/infrastructure/backup/test/resources/test.bb @@ -1,17 +1,16 @@ #!/usr/bin/env bb -(require - '[babashka.fs :as fs]) -(-> "/usr/local/bin/config.clj" fs/file load-file) - (require '[babashka.tasks :as tasks] '[dda.backup.core :as bc] + '[dda.backup.config :as cfg] '[dda.backup.restic :as rc] '[dda.backup.postgresql :as pg] '[dda.backup.backup :as bak] - '[dda.backup.restore :as rs] - '[config :as cf]) + '[dda.backup.restore :as rs]) -(def file-pw-change-config (merge cf/file-config {:new-password-file (bc/env-or-file "RESTIC_NEW_PASSWORD_FILE")})) +(def config (cfg/read-config "/usr/local/bin/config.edn")) + +(def file-pw-change-config (merge (:file-config config) + {:new-password-file (bc/env-or-file "RESTIC_NEW_PASSWORD_FILE")})) (defn prepare! [] @@ -21,29 +20,39 @@ (defn restic-repo-init! [] - (rc/init! cf/file-config) - (rc/init! (merge cf/db-role-config cf/dry-run)) - (rc/init! (merge cf/db-config cf/dry-run))) + (rc/init! (:file-config config)) + (rc/init! (merge (:db-role-config config) + (:dry-run config))) + (rc/init! (merge (:db-config config) + (:dry-run config)))) (defn restic-backup! [] - (bak/backup-file! cf/file-config) - (bak/backup-db-roles! (merge cf/db-role-config cf/dry-run)) - (bak/backup-db! (merge cf/db-config cf/dry-run))) + (bak/backup-file! (:file-config config)) + (bak/backup-db-roles! (merge (:db-role-config config) + (:dry-run config))) + (bak/backup-db! (merge (:db-config config) + (:dry-run config)))) (defn list-snapshots! [] - (rc/list-snapshots! cf/file-config) - (rc/list-snapshots! (merge cf/db-role-config cf/dry-run)) - (rc/list-snapshots! (merge cf/db-config cf/dry-run))) + (rc/list-snapshots! (:file-config config)) + (rc/list-snapshots! (merge (:db-role-config config) + (:dry-run config))) + (rc/list-snapshots! (merge (:db-config config) + (:dry-run config)))) (defn restic-restore! [] - (pg/drop-create-db! (merge cf/db-config cf/dry-run)) - (rs/restore-db-roles! (merge cf/db-role-config cf/dry-run)) - (rs/restore-db! (merge cf/db-config cf/dry-run)) - (rs/restore-file! (merge cf/file-restore-config cf/dry-run))) + (pg/drop-create-db! (merge (:db-config config) + (:dry-run config))) + (rs/restore-db-roles! (merge (:db-role-config config) + (:dry-run config))) + (rs/restore-db! (merge (:db-config config) + (:dry-run config))) + (rs/restore-file! (merge (:file-restore-config config) + (:dry-run config)))) (defn change-password! []