restic-compose-backup/src/restic_compose_backup/utils.py

74 lines
1.6 KiB
Python
Raw Normal View History

2019-12-03 05:23:44 +00:00
import os
2019-12-07 23:57:23 +00:00
import logging
from typing import List
2019-12-03 05:23:44 +00:00
from contextlib import contextmanager
import docker
2019-12-03 08:40:02 +00:00
from restic_compose_backup.config import Config
2019-12-07 23:57:23 +00:00
logger = logging.getLogger(__name__)
TRUE_VALUES = ['1', 'true', 'True', True, 1]
2019-12-07 23:57:23 +00:00
def docker_client():
config = Config()
return docker.DockerClient(base_url=config.docker_base_url)
def list_containers() -> List[dict]:
"""
List all containers.
Returns:
List of raw container json data from the api
"""
2019-12-07 23:57:23 +00:00
client = docker_client()
all_containers = client.containers.list(all=True)
client.close()
return [c.attrs for c in all_containers]
2019-12-07 23:57:23 +00:00
def remove_containers(containers: List['Container']):
client = docker_client()
logger.info('Attempting to delete stale backup process containers')
for container in containers:
logger.info(' -> deleting %s', container.name)
try:
c = client.containers.get(container.name)
c.remove()
except Exception as ex:
logger.exception(ex)
2019-11-15 13:23:56 +00:00
def is_true(value):
"""
Evaluates the truthfullness of a bool value in container labels
"""
return value in TRUE_VALUES
2019-11-25 21:28:04 +00:00
def strip_root(path):
"""
Removes the root slash in a path.
Example: /srv/data becomes srv/data
"""
path = path.strip()
if path.startswith('/'):
return path[1:]
return path
2019-12-03 05:23:44 +00:00
@contextmanager
def environment(name, value):
"""Tempset env var"""
old_val = os.environ.get(name)
os.environ[name] = value
try:
yield
finally:
if old_val is None:
del os.environ[name]
else:
os.environ[name] = old_val