From accc39a56df6ac56dcb4b1c4d4758c6da37f2e13 Mon Sep 17 00:00:00 2001
From: Neil-Jocelyn Schark <neil-jocelyn.schark@stud.h-da.de>
Date: Thu, 15 Dec 2022 13:11:39 +0000
Subject: [PATCH] Add backup script

See merge request danet/gosdn!407
---
 .gitignore                      |  3 +++
 README.md                       | 18 ++++++++++++++++++
 docker_volume_backup/.gitkeep   |  0
 scripts/backup_mongo_volume.sh  |  7 +++++++
 scripts/restore_mongo_volume.sh |  7 +++++++
 5 files changed, 35 insertions(+)
 create mode 100644 docker_volume_backup/.gitkeep
 create mode 100755 scripts/backup_mongo_volume.sh
 create mode 100755 scripts/restore_mongo_volume.sh

diff --git a/.gitignore b/.gitignore
index fc66c8dcc..a111591e2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -58,3 +58,6 @@ applications/venv-manager/*.clab.yaml
 
 #debug
 __debug_bin
+
+#misc
+*/mongo_backup_*.tar
diff --git a/README.md b/README.md
index ce2d4c028..fc3e04357 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,7 @@ to get all submodules.
 - [Contributing](CONTRIBUTING.md)
 - [License](LICENSE)
 - [CI Status](#ci-status)
+- [Development Tutorial](#development-tutorial)
 
 # Overview
 
@@ -122,3 +123,20 @@ Information about how to use the CLI is provided in the `cli` folder, see [here]
 | ------ | ------ |
 | [![coverage report](https://code.fbi.h-da.de/danet/gosdn/badges/master/coverage.svg)](https://code.fbi.h-da.de/danet/gosdn/-/commits/master) | [![coverage report](https://code.fbi.h-da.de/danet/gosdn/badges/develop/coverage.svg)](https://code.fbi.h-da.de/danet/gosdn/-/commits/develop) |
 | [![pipeline status](https://code.fbi.h-da.de/danet/gosdn/badges/master/pipeline.svg)](https://code.fbi.h-da.de/danet/gosdn/-/commits/master) | [![pipeline status](https://code.fbi.h-da.de/danet/gosdn/badges/develop/pipeline.svg)](https://code.fbi.h-da.de/danet/gosdn/-/commits/develop) |
+
+# Development Tutorial
+
+TBD
+
+## Backup and restore your mongodb
+
+If you are using the mongodb provided via the `docker-compose.yaml`, you can easily backup and restore your data via two scripts.
+
+```bash
+./scripts/backup_mongo_volume.sh $(suffix_of_backup)
+```
+```bash
+./scripts/restore_mongo_volume.sh $(suffix_of_backup)
+```
+
+Keep in mind that a restore will restart the mongodb container.
diff --git a/docker_volume_backup/.gitkeep b/docker_volume_backup/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/scripts/backup_mongo_volume.sh b/scripts/backup_mongo_volume.sh
new file mode 100755
index 000000000..5eac99398
--- /dev/null
+++ b/scripts/backup_mongo_volume.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+file_suffix=$1
+
+docker-compose pause mongo
+docker run --rm --volumes-from gosdn-mongo-1 -v $(pwd)/docker_volume_backup:/backup ubuntu bash -c 'cd /data/db/ && tar cvf /backup/mongo_backup_'"$file_suffix"'.tar .'
+docker-compose unpause mongo
diff --git a/scripts/restore_mongo_volume.sh b/scripts/restore_mongo_volume.sh
new file mode 100755
index 000000000..601f1bbb7
--- /dev/null
+++ b/scripts/restore_mongo_volume.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+file_suffix=$1
+
+docker-compose pause mongo
+docker run --rm --volumes-from gosdn-mongo-1 -v $(pwd)/docker_volume_backup:/backup ubuntu bash -c 'rm -r /data/db/* && cd /data/db && tar xvf /backup/mongo_backup_'"$file_suffix"'.tar --strip 1'
+docker-compose restart mongo
-- 
GitLab