From 357e387ed28f8c30cd172dc8bd760f6fba97debb Mon Sep 17 00:00:00 2001
From: Einar Forselv <eforselv@gmail.com>
Date: Wed, 17 Apr 2019 04:38:15 +0200
Subject: [PATCH] Working container spawner

---
 restic_volume_backup/backup_runner.py | 21 ++++++++++++++++-----
 restic_volume_backup/cli.py           | 13 +++++++++++--
 restic_volume_backup/containers.py    |  1 +
 test.sh                               |  2 ++
 4 files changed, 30 insertions(+), 7 deletions(-)
 create mode 100755 test.sh

diff --git a/restic_volume_backup/backup_runner.py b/restic_volume_backup/backup_runner.py
index 2ec535d..a5299ee 100644
--- a/restic_volume_backup/backup_runner.py
+++ b/restic_volume_backup/backup_runner.py
@@ -1,18 +1,19 @@
 import os
+import time
 import docker
 
 from restic_volume_backup.config import Config
 
-def run():
+
+def run(image: str, command: str):
     config = Config()
     client = docker.DockerClient(base_url=config.docker_base_url)
 
     container = client.containers.run(
-        'restic-volume-backup_backup',
-        'echo "Hello"',
+        image,
+        command,
         labels={"restic-volume-backup.backup_process": 'True'},
         auto_remove=True,
-        remove=True,
         detach=True,
         environment={
             'test1': 'value1',
@@ -25,4 +26,14 @@ def run():
         working_dir=os.getcwd(),
     )
 
-    # Pull logs and exist status of container
+    print("Backup process container:", container.name)
+    logs = container.logs(stdout=True, stderr=True, stream=True)
+    try:
+        while True:
+            time.sleep(3)
+            for line in logs:
+                print(line.decode(), end='')
+            # Raises requests.exceptions.HTTPError if continer is dead
+            container.top()
+    except Exception as ex:
+        print("Container stopped")
diff --git a/restic_volume_backup/cli.py b/restic_volume_backup/cli.py
index 0fbba5b..3c9ed30 100644
--- a/restic_volume_backup/cli.py
+++ b/restic_volume_backup/cli.py
@@ -25,11 +25,20 @@ def main():
         print()
 
     elif args.action == 'backup':
-        print("Starting backup ..")
+        if containers.backup_process_running:
+            raise ValueError("Backup process alredy running")
+
+        print("Initializing repository")
+
         # TODO: Errors when repo already exists
         restic.init_repo(config.repository)
 
-        backup_runner.run()
+        print("Starting backup container..")
+        backup_runner.run(
+            containers.this_container.image,
+            # "sleep 10",
+            './test.sh',
+        )
         # for vol in containers.backup_volumes():
         #     restic.backup_volume(Config.repository, vol)
 
diff --git a/restic_volume_backup/containers.py b/restic_volume_backup/containers.py
index b226ba4..37726c8 100644
--- a/restic_volume_backup/containers.py
+++ b/restic_volume_backup/containers.py
@@ -15,6 +15,7 @@ class Container:
     def __init__(self, data):
         self.id = data.get('Id')
         self.state = data.get('State')
+        self.image = data.get('Image')
         self.labels = data.get('Labels', {})
         self.names = data.get('Names', [])
         self.mounts = [Mount(mnt, container=self) for mnt in data.get('Mounts')]
diff --git a/test.sh b/test.sh
new file mode 100755
index 0000000..58de8f9
--- /dev/null
+++ b/test.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+for i in 1 2 3 4 5; do echo 'moo'; sleep 2; done