Allow excluding all bind mounts from backups

This commit is contained in:
Jannik 2020-05-26 15:30:54 +02:00
parent f7958d7db9
commit 0fc620bb1f
4 changed files with 10 additions and 3 deletions

View File

@ -6,6 +6,7 @@
SWARM_MODE=true SWARM_MODE=true
INCLUDE_PROJECT_NAME=false INCLUDE_PROJECT_NAME=false
EXCLUDE_BIND_MOUNTS=false
RESTIC_REPOSITORY=/restic_data RESTIC_REPOSITORY=/restic_data
RESTIC_PASSWORD=password RESTIC_PASSWORD=password

View File

@ -67,6 +67,7 @@ def status(config, containers):
logger.info("Repository: '%s'", config.repository) logger.info("Repository: '%s'", config.repository)
logger.info("Backup currently running?: %s", containers.backup_process_running) logger.info("Backup currently running?: %s", containers.backup_process_running)
logger.info("Include project name in backup path?: %s", utils.is_true(config.include_project_name)) logger.info("Include project name in backup path?: %s", utils.is_true(config.include_project_name))
logger.debug("Exclude bind mounts from backups?: %s", utils.is_true(config.exclude_bind_mounts))
logger.info("Checking docker availability") logger.info("Checking docker availability")
utils.list_containers() utils.list_containers()

View File

@ -14,6 +14,7 @@ class Config:
self.cron_command = os.environ.get('CRON_COMMAND') or self.default_backup_command self.cron_command = os.environ.get('CRON_COMMAND') or self.default_backup_command
self.swarm_mode = os.environ.get('SWARM_MODE') or False self.swarm_mode = os.environ.get('SWARM_MODE') or False
self.include_project_name = os.environ.get('INCLUDE_PROJECT_NAME') or False self.include_project_name = os.environ.get('INCLUDE_PROJECT_NAME') or False
self.exclude_bind_mounts = os.environ.get('EXCLUDE_BIND_MOUNTS') or False
# Log # Log
self.log_level = os.environ.get('LOG_LEVEL') self.log_level = os.environ.get('LOG_LEVEL')

View File

@ -193,11 +193,15 @@ class Container:
"""Get all mounts for this container matching include/exclude filters""" """Get all mounts for this container matching include/exclude filters"""
filtered = [] filtered = []
# If exclude_bind_mounts is true, only volume mounts are kept in the list of mounts
exclude_bind_mounts = utils.is_true(config.exclude_bind_mounts)
mounts = list(filter(lambda m: not exclude_bind_mounts or m.type == "volume", self._mounts))
if not self.volume_backup_enabled: if not self.volume_backup_enabled:
return filtered return filtered
if self._include: if self._include:
for mount in self._mounts: for mount in mounts:
for pattern in self._include: for pattern in self._include:
if pattern in mount.source: if pattern in mount.source:
break break
@ -207,14 +211,14 @@ class Container:
filtered.append(mount) filtered.append(mount)
elif self._exclude: elif self._exclude:
for mount in self._mounts: for mount in mounts:
for pattern in self._exclude: for pattern in self._exclude:
if pattern in mount.source: if pattern in mount.source:
break break
else: else:
filtered.append(mount) filtered.append(mount)
else: else:
return self._mounts return mounts
return filtered return filtered