#!/bin/python3
|
|
"""
|
|
Automated backup script.
|
|
"""
|
|
|
|
import argparse
|
|
from pathlib import Path
|
|
import os
|
|
|
|
from typing import (
|
|
Callable,
|
|
List
|
|
)
|
|
|
|
import yaml
|
|
|
|
from backup.server import Server, load_server_from_file
|
|
from backup.repo import Repo, load_repo_from_file
|
|
|
|
#############
|
|
# Arguments #
|
|
#############
|
|
|
|
parser = argparse.ArgumentParser(description="Automated backup script")
|
|
parser.add_argument('--config_dir',
|
|
metavar="DIR",
|
|
default="./conf",
|
|
help="Directory for configuration files")
|
|
|
|
args = parser.parse_args()
|
|
|
|
#############
|
|
# Functions #
|
|
#############
|
|
|
|
def list_yml_files_in_dir( directory: Path ) -> List[str]:
|
|
"""
|
|
Lists the YAML files in a given directory.
|
|
"""
|
|
files: List[str] = []
|
|
with os.scandir( directory ) as iterator:
|
|
for entry in iterator:
|
|
if not entry.is_file():
|
|
continue
|
|
if entry.name.startswith('.'):
|
|
continue
|
|
if not entry.name.endswith('.yml'):
|
|
continue
|
|
|
|
files.append(entry.path)
|
|
return files
|
|
|
|
##########
|
|
# Script #
|
|
##########
|
|
|
|
config_dir = Path(args.config_dir)
|
|
|
|
# load servers
|
|
server_dir = config_dir / "servers"
|
|
servers: List[Server] = []
|
|
for server_file in list_yml_files_in_dir( server_dir ):
|
|
servers.append( load_server_from_file( server_file ) )
|
|
|
|
# load repos
|
|
repos_dir = config_dir / "backups"
|
|
repos: List[Repo] = []
|
|
for repo_file in list_yml_files_in_dir( repos_dir ):
|
|
repos.append( load_repo_from_file( repo_file ) )
|
|
|
|
# init backups
|
|
for server in servers:
|
|
for repo in repos:
|
|
repo.init_or_config( server )
|
|
print(repo.backup( server ))
|