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