dev1.2.0 #8

Merged
sergey merged 4 commits from dev1.2 into main 2025-07-09 06:35:48 +00:00
4 changed files with 45 additions and 11 deletions
Showing only changes of commit c9fbad8604 - Show all commits

View File

@ -6,6 +6,26 @@ import re
from repo import add_file_and_commit from repo import add_file_and_commit
def get_bcp_file_path(name: str) -> [str, str|None]:
if cfg.bcp.in_folder:
match = re.match(cfg.bcp.folder_name_pattern, name)
if match:
result = match.group(1)
bcp_file_path = os.path.join(cfg.bcp.dir, result, name)
if not os.path.exists(os.path.join(cfg.bcp.dir, result)):
os.makedirs(os.path.join(cfg.bcp.dir, result))
log.info("create folder %r", result)
else:
log.info("folder %r exists", result)
return bcp_file_path, result
else:
return os.path.join(cfg.bcp.dir, name), None
else:
return os.path.join(cfg.bcp.dir, name), None
def read_device_list() -> dict[str, dict[str, str]]: def read_device_list() -> dict[str, dict[str, str]]:
bcp_dev_file = os.path.join( bcp_dev_file = os.path.join(
@ -106,11 +126,11 @@ def save_mikrotik_bcp(host: str, name: str) -> None:
log.warning("Timeout read config from %r", name) log.warning("Timeout read config from %r", name)
return return
result = "\n".join(result.split("\n")[1:]) result = "\n".join(result.split("\n")[1:])
with open(os.path.join(cfg.bcp.dir, name), "w") as f: bcp_file_name, file_folder = get_bcp_file_path(name)
with open(bcp_file_name, "w") as f:
f.write(result) f.write(result)
log.info("Backup saved") log.info("Backup saved")
add_file_and_commit(file_name=name, file_folder=file_folder)
add_file_and_commit(file_name=name)
def save_snr_bcp(host: str, name: str) -> None: def save_snr_bcp(host: str, name: str) -> None:
@ -129,11 +149,11 @@ def save_snr_bcp(host: str, name: str) -> None:
elif result == "ReadTimeout": elif result == "ReadTimeout":
log.warning("Timeout read config from %r", name) log.warning("Timeout read config from %r", name)
return return
with open(os.path.join(cfg.bcp.dir, name), "w") as f: bcp_file_name, file_folder = get_bcp_file_path(name)
with open(bcp_file_name, "w") as f:
f.write(result) f.write(result)
log.info("Backup saved") log.info("Backup saved")
add_file_and_commit(file_name=name, file_folder=file_folder)
add_file_and_commit(file_name=name)
def save_cisco_sb_bcp(host: str, name: str) -> None: def save_cisco_sb_bcp(host: str, name: str) -> None:
@ -152,10 +172,11 @@ def save_cisco_sb_bcp(host: str, name: str) -> None:
elif result == "ReadTimeout": elif result == "ReadTimeout":
log.warning("Timeout read config from %r", name) log.warning("Timeout read config from %r", name)
return return
with open(os.path.join(cfg.bcp.dir, name), "w") as f: bcp_file_name, file_folder = get_bcp_file_path(name)
with open(bcp_file_name, "w") as f:
f.write(result) f.write(result)
log.info("Backup saved") log.info("Backup saved")
add_file_and_commit(file_name=name) add_file_and_commit(file_name=name, file_folder=file_folder)
def save_cisco_bcp(host: str, name: str) -> None: def save_cisco_bcp(host: str, name: str) -> None:
@ -174,7 +195,8 @@ def save_cisco_bcp(host: str, name: str) -> None:
elif result == "ReadTimeout": elif result == "ReadTimeout":
log.warning("Timeout read config from %r", name) log.warning("Timeout read config from %r", name)
return return
with open(os.path.join(cfg.bcp.dir, name), "w") as f: bcp_file_name, file_folder = get_bcp_file_path(name)
with open(bcp_file_name, "w") as f:
f.write(result) f.write(result)
log.info("Backup saved") log.info("Backup saved")
add_file_and_commit(file_name=name) add_file_and_commit(file_name=name, file_folder=file_folder)

View File

@ -59,6 +59,9 @@ class ConfigBcp:
file: str = config["bcp"].get("file") file: str = config["bcp"].get("file")
pattern: str = config["bcp"].get("pattern") pattern: str = config["bcp"].get("pattern")
start_at: str = config["bcp"].get("start_at") start_at: str = config["bcp"].get("start_at")
in_folder: bool = config["bcp"].getboolean("in_folder")
if in_folder:
folder_name_pattern: str = config["bcp"].get("folder_name_pattern")
@dataclass @dataclass

View File

@ -35,6 +35,11 @@ file: dev_list.txt
pattern:(?P<name>\S+) (?P<ip>\d+\.\d+\.\d+\.\d+) (?P<vendor>\S+) (?P<model>\S+) pattern:(?P<name>\S+) (?P<ip>\d+\.\d+\.\d+\.\d+) (?P<vendor>\S+) (?P<model>\S+)
# Во сколько будет делаться бэкап # Во сколько будет делаться бэкап
start_at: 18:59 start_at: 18:59
# True \ False - Создание папок внутри репозитория. Если False, то все файлы будут сохраняться в корень
in_folder: True
# Регулярное выражение по которому будет парситься имя папки из названия девайса
folder_name_pattern: ^(.*?)-
[net_dev] [net_dev]
debug: False debug: False

View File

@ -52,9 +52,11 @@ def check_bcp_repo(path: str = cfg.bcp.dir) -> None:
log.warning("Error: %r", e) log.warning("Error: %r", e)
def add_file_and_commit(file_name: str) -> None: def add_file_and_commit(file_name: str, file_folder: str) -> None:
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
repo = Repo(cfg.bcp.dir) repo = Repo(cfg.bcp.dir)
if file_folder is not None:
file_name = file_folder + "/" + file_name
if file_name in repo.untracked_files: if file_name in repo.untracked_files:
repo.git.add(file_name) repo.git.add(file_name)
repo.index.commit("add %s %s" % (file_name, current_time)) repo.index.commit("add %s %s" % (file_name, current_time))
@ -68,6 +70,8 @@ def add_file_and_commit(file_name: str) -> None:
log.info("no changed in file %r", file_name) log.info("no changed in file %r", file_name)
def push_to_remote(): def push_to_remote():
repo = Repo(cfg.bcp.dir) repo = Repo(cfg.bcp.dir)
remote = repo.remote(name=cfg.git.branch) remote = repo.remote(name=cfg.git.branch)