From 03b0b85247f359dddbfa586595ab95603152bd9a Mon Sep 17 00:00:00 2001
From: Michael Jerger <michael.jerger@meissa-gmbh.de>
Date: Mon, 30 Dec 2024 14:21:27 +0100
Subject: [PATCH] refactor to babashka driven backup

---
 infrastructure/backup/image/Dockerfile        |  2 +-
 .../resources/entrypoint-start-and-wait.sh    | 19 -----------
 .../backup/image/resources/entrypoint.sh      | 17 ----------
 .../backup/image/resources/install.bb         | 10 ++----
 .../backup/image/resources/install.sh         | 21 ------------
 .../backup/image/resources/list-snapshots.bb  |  5 +--
 .../backup/image/resources/restore.bb         | 29 ++++++++++++++++
 .../backup/image/resources/restore.sh         | 33 -------------------
 infrastructure/backup/image/resources/wait.bb | 21 ++++++++++++
 .../backup/image/resources2/test.bb           | 10 +++---
 .../backup/backup-restore-deployment.yaml     |  2 +-
 src/main/resources/backup/cron.yaml           |  2 +-
 12 files changed, 62 insertions(+), 109 deletions(-)
 delete mode 100644 infrastructure/backup/image/resources/entrypoint-start-and-wait.sh
 delete mode 100755 infrastructure/backup/image/resources/entrypoint.sh
 delete mode 100755 infrastructure/backup/image/resources/install.sh
 create mode 100755 infrastructure/backup/image/resources/restore.bb
 delete mode 100755 infrastructure/backup/image/resources/restore.sh
 create mode 100755 infrastructure/backup/image/resources/wait.bb

diff --git a/infrastructure/backup/image/Dockerfile b/infrastructure/backup/image/Dockerfile
index cfec7b3..b9adae5 100644
--- a/infrastructure/backup/image/Dockerfile
+++ b/infrastructure/backup/image/Dockerfile
@@ -1,4 +1,4 @@
-FROM domaindrivenarchitecture/dda-backup:latest
+FROM domaindrivenarchitecture/dda-backup:5.1.0
 
 # Prepare Entrypoint Script
 ADD resources /tmp
diff --git a/infrastructure/backup/image/resources/entrypoint-start-and-wait.sh b/infrastructure/backup/image/resources/entrypoint-start-and-wait.sh
deleted file mode 100644
index 58d847b..0000000
--- a/infrastructure/backup/image/resources/entrypoint-start-and-wait.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-
-set -exo pipefail
-
-function main() {
-    file_env POSTGRES_DB
-    file_env POSTGRES_PASSWORD
-    file_env POSTGRES_USER
-
-    create-pg-pass
-
-    while true; do
-        sleep 1m
-    done
-}
-
-source /usr/local/lib/functions.sh
-source /usr/local/lib/pg-functions.sh
-main
\ No newline at end of file
diff --git a/infrastructure/backup/image/resources/entrypoint.sh b/infrastructure/backup/image/resources/entrypoint.sh
deleted file mode 100755
index 3bdf754..0000000
--- a/infrastructure/backup/image/resources/entrypoint.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-set -Eexo pipefail
-
-function main() {
-    file_env POSTGRES_DB
-    file_env POSTGRES_PASSWORD
-    file_env POSTGRES_USER
-
-    create-pg-pass
-
-    /usr/local/bin/backup.sh
-}
-
-source /usr/local/lib/functions.sh
-source /usr/local/lib/pg-functions.sh
-main
diff --git a/infrastructure/backup/image/resources/install.bb b/infrastructure/backup/image/resources/install.bb
index 9ce49b7..49f6429 100755
--- a/infrastructure/backup/image/resources/install.bb
+++ b/infrastructure/backup/image/resources/install.bb
@@ -5,19 +5,15 @@
  '[dda.image.install :as in])
 
 (ub/upgrade-system!)
-(in/install! "entrypoint.sh")
-(in/install! "entrypoint-start-and-wait.sh")
-
 (in/install! "bb-backup.edn" :target-name "bb.edn" :mod "0440")
 (in/install! "config.clj" :mod "0440")
 (in/install! "init.bb")
 (in/install! "backup.bb")
-(in/install! "restore.sh")
+(in/install! "restore.bb")
 (in/install! "list-snapshots.bb")
 (in/install! "start-maintenance.sh")
 (in/install! "end-maintenance.sh")
-
-#(in/install! "restore.bb")
-#(in/install! "wait.bb")
+(in/install! "restore.bb")
+(in/install! "wait.bb")
 
 (ub/cleanup-container!)
\ No newline at end of file
diff --git a/infrastructure/backup/image/resources/install.sh b/infrastructure/backup/image/resources/install.sh
deleted file mode 100755
index 1ebd786..0000000
--- a/infrastructure/backup/image/resources/install.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-
-set -exo pipefail
-
-function main() {
-    {
-    install -m 0700 /tmp/entrypoint.sh /
-    install -m 0700 /tmp/entrypoint-start-and-wait.sh /
-
-    install -m 0700 /tmp/init.sh /usr/local/bin/
-    install -m 0700 /tmp/backup.sh /usr/local/bin/
-    install -m 0700 /tmp/restore.sh /usr/local/bin/
-    install -m 0700 /tmp/list-snapshots.sh /usr/local/bin/
-    install -m 0700 /tmp/start-maintenance.sh /usr/local/bin/
-    install -m 0700 /tmp/end-maintenance.sh /usr/local/bin/
-    cleanupDocker
-    } > /dev/null
-}
-
-source /tmp/install_functions_debian.sh
-main
diff --git a/infrastructure/backup/image/resources/list-snapshots.bb b/infrastructure/backup/image/resources/list-snapshots.bb
index 361cfc4..fb97cdd 100755
--- a/infrastructure/backup/image/resources/list-snapshots.bb
+++ b/infrastructure/backup/image/resources/list-snapshots.bb
@@ -1,15 +1,12 @@
 #!/usr/bin/env bb
-
 (require
  '[babashka.fs :as fs])
-
-(println (-> "/usr/local/bin/config.clj" fs/file load-file))
 (-> "/usr/local/bin/config.clj" fs/file load-file)
 
 (require
  '[dda.backup.core :as bc]
  '[dda.backup.restic :as rc]
- '[config.clj :as cf])
+ '[config :as cf])
 
 (defn prepare!
   []
diff --git a/infrastructure/backup/image/resources/restore.bb b/infrastructure/backup/image/resources/restore.bb
new file mode 100755
index 0000000..797d005
--- /dev/null
+++ b/infrastructure/backup/image/resources/restore.bb
@@ -0,0 +1,29 @@
+#!/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.postgresql :as pg]
+ '[dda.backup.restore :as rs]
+ '[config :as cf])
+
+(defn prepare!
+  []
+  (bc/create-aws-credentials! cf/aws-config)
+  (pg/create-pg-pass! cf/db-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-config)
+  )
+
+(t/shell "start-maintenance.sh")
+(prepare!)
+(restic-restore!)
+(t/shell "end-maintenance.sh")
\ No newline at end of file
diff --git a/infrastructure/backup/image/resources/restore.sh b/infrastructure/backup/image/resources/restore.sh
deleted file mode 100755
index 44db019..0000000
--- a/infrastructure/backup/image/resources/restore.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/bash
-
-set -Eexo pipefail
-
-function main() {
-    local role_snapshot_id="${1:-latest}"
-    local db_snapshot_id="${2:-latest}"
-    local file_snapshot_id="${3:-latest}"
-
-
-    start-maintenance.sh
-
-    file_env AWS_ACCESS_KEY_ID
-    file_env AWS_SECRET_ACCESS_KEY
-
-    file_env POSTGRES_DB
-    file_env POSTGRES_PASSWORD
-    file_env POSTGRES_USER
-
-    drop-create-db
-
-    restore-roles ${role_snapshot_id}
-    restore-db ${db_snapshot_id}
-    restore-directory '/var/backups/' ${file_snapshot_id}
-
-    end-maintenance.sh
-}
-
-source /usr/local/lib/functions.sh
-source /usr/local/lib/pg-functions.sh
-source /usr/local/lib/file-functions.sh
-
-main "$@"
diff --git a/infrastructure/backup/image/resources/wait.bb b/infrastructure/backup/image/resources/wait.bb
new file mode 100755
index 0000000..620b789
--- /dev/null
+++ b/infrastructure/backup/image/resources/wait.bb
@@ -0,0 +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.postgresql :as pg]
+ '[config :as cf])
+
+(defn prepare!
+  []
+  (bc/create-aws-credentials! cf/aws-config)
+  (pg/create-pg-pass! cf/db-config))
+
+(defn wait! []
+  (while true
+    (Thread/sleep 1000)))
+
+(prepare!)
+(wait!)
\ No newline at end of file
diff --git a/infrastructure/backup/image/resources2/test.bb b/infrastructure/backup/image/resources2/test.bb
index a6d4314..3604da7 100755
--- a/infrastructure/backup/image/resources2/test.bb
+++ b/infrastructure/backup/image/resources2/test.bb
@@ -22,8 +22,8 @@
 (defn restic-repo-init!
   []
   (rc/init! cf/file-config)
-  (rc/init! (merge cf/db-config cf/dry-run))
-  (rc/init! (merge cf/db-role-config cf/dry-run)))
+  (rc/init! (merge cf/db-config))
+  (rc/init! (merge cf/db-role-config)))
 
 (defn restic-backup!
   []
@@ -37,12 +37,12 @@
   (rc/list-snapshots! (merge cf/db-role-config cf/dry-run))
   (rc/list-snapshots! (merge cf/db-config cf/dry-run)))
 
-
 (defn restic-restore!
   []
-  (rs/restore-file! (merge {:debug true} cf/file-restore-config))
+  (println "huhu")
+  (rs/restore-file! (merge cf/file-restore-config  {:debug true}))
   (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-roles! (merge cf/db-role-config cf/dry-run))
   (rs/restore-db! (merge cf/db-config cf/dry-run)))
 
 (prepare!)
diff --git a/src/main/resources/backup/backup-restore-deployment.yaml b/src/main/resources/backup/backup-restore-deployment.yaml
index 3a43bd1..26a4ebe 100644
--- a/src/main/resources/backup/backup-restore-deployment.yaml
+++ b/src/main/resources/backup/backup-restore-deployment.yaml
@@ -21,7 +21,7 @@ spec:
       - name: backup-app
         image: domaindrivenarchitecture/c4k-cloud-backup
         imagePullPolicy: IfNotPresent
-        command: ["/entrypoint-start-and-wait.sh"]
+        command: ["wait.bb"]
         env:
         - name: POSTGRES_USER
           valueFrom:
diff --git a/src/main/resources/backup/cron.yaml b/src/main/resources/backup/cron.yaml
index 0424ec6..a7c1cad 100644
--- a/src/main/resources/backup/cron.yaml
+++ b/src/main/resources/backup/cron.yaml
@@ -17,7 +17,7 @@ spec:
           - name: backup-app
             image: domaindrivenarchitecture/c4k-cloud-backup
             imagePullPolicy: IfNotPresent
-            command: ["/entrypoint.sh"]
+            command: ["backup.bb"]
             env:
             - name: POSTGRES_USER
               valueFrom: