Working container spawner

This commit is contained in:
Einar Forselv 2019-04-17 04:38:15 +02:00
parent 7a647c06b7
commit 357e387ed2
4 changed files with 30 additions and 7 deletions

View File

@ -1,18 +1,19 @@
import os import os
import time
import docker import docker
from restic_volume_backup.config import Config from restic_volume_backup.config import Config
def run():
def run(image: str, command: str):
config = Config() config = Config()
client = docker.DockerClient(base_url=config.docker_base_url) client = docker.DockerClient(base_url=config.docker_base_url)
container = client.containers.run( container = client.containers.run(
'restic-volume-backup_backup', image,
'echo "Hello"', command,
labels={"restic-volume-backup.backup_process": 'True'}, labels={"restic-volume-backup.backup_process": 'True'},
auto_remove=True, auto_remove=True,
remove=True,
detach=True, detach=True,
environment={ environment={
'test1': 'value1', 'test1': 'value1',
@ -25,4 +26,14 @@ def run():
working_dir=os.getcwd(), 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")

View File

@ -25,11 +25,20 @@ def main():
print() print()
elif args.action == 'backup': 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 # TODO: Errors when repo already exists
restic.init_repo(config.repository) 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(): # for vol in containers.backup_volumes():
# restic.backup_volume(Config.repository, vol) # restic.backup_volume(Config.repository, vol)

View File

@ -15,6 +15,7 @@ class Container:
def __init__(self, data): def __init__(self, data):
self.id = data.get('Id') self.id = data.get('Id')
self.state = data.get('State') self.state = data.get('State')
self.image = data.get('Image')
self.labels = data.get('Labels', {}) self.labels = data.get('Labels', {})
self.names = data.get('Names', []) self.names = data.get('Names', [])
self.mounts = [Mount(mnt, container=self) for mnt in data.get('Mounts')] self.mounts = [Mount(mnt, container=self) for mnt in data.get('Mounts')]

2
test.sh Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
for i in 1 2 3 4 5; do echo 'moo'; sleep 2; done