add folder
This commit is contained in:
		
							parent
							
								
									13689ca6f4
								
							
						
					
					
						commit
						c9fbad8604
					
				| 
						 | 
				
			
			@ -6,6 +6,26 @@ import re
 | 
			
		|||
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]]:
 | 
			
		||||
 | 
			
		||||
    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)
 | 
			
		||||
        return
 | 
			
		||||
    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)
 | 
			
		||||
    log.info("Backup saved")
 | 
			
		||||
 | 
			
		||||
    add_file_and_commit(file_name=name)
 | 
			
		||||
    add_file_and_commit(file_name=name, file_folder=file_folder)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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":
 | 
			
		||||
        log.warning("Timeout read config from %r", name)
 | 
			
		||||
        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)
 | 
			
		||||
    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_sb_bcp(host: str, name: str) -> None:
 | 
			
		||||
| 
						 | 
				
			
			@ -152,10 +172,11 @@ def save_cisco_sb_bcp(host: str, name: str) -> None:
 | 
			
		|||
    elif result == "ReadTimeout":
 | 
			
		||||
        log.warning("Timeout read config from %r", name)
 | 
			
		||||
        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)
 | 
			
		||||
    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:
 | 
			
		||||
| 
						 | 
				
			
			@ -174,7 +195,8 @@ def save_cisco_bcp(host: str, name: str) -> None:
 | 
			
		|||
    elif result == "ReadTimeout":
 | 
			
		||||
        log.warning("Timeout read config from %r", name)
 | 
			
		||||
        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)
 | 
			
		||||
    log.info("Backup saved")
 | 
			
		||||
    add_file_and_commit(file_name=name)
 | 
			
		||||
    add_file_and_commit(file_name=name, file_folder=file_folder)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,6 +59,9 @@ class ConfigBcp:
 | 
			
		|||
    file: str = config["bcp"].get("file")
 | 
			
		||||
    pattern: str = config["bcp"].get("pattern")
 | 
			
		||||
    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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,6 +35,11 @@ file: dev_list.txt
 | 
			
		|||
pattern:(?P<name>\S+) (?P<ip>\d+\.\d+\.\d+\.\d+) (?P<vendor>\S+) (?P<model>\S+)
 | 
			
		||||
# Во сколько будет делаться бэкап
 | 
			
		||||
start_at: 18:59
 | 
			
		||||
# True \ False - Создание папок внутри репозитория. Если False, то все файлы будут сохраняться в корень
 | 
			
		||||
in_folder: True
 | 
			
		||||
# Регулярное выражение по которому будет парситься имя папки из названия девайса
 | 
			
		||||
folder_name_pattern: ^(.*?)-
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[net_dev]
 | 
			
		||||
debug: False
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,9 +52,11 @@ def check_bcp_repo(path: str = cfg.bcp.dir) -> None:
 | 
			
		|||
        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")
 | 
			
		||||
    repo = Repo(cfg.bcp.dir)
 | 
			
		||||
    if file_folder is not None:
 | 
			
		||||
        file_name = file_folder + "/" + file_name
 | 
			
		||||
    if file_name in repo.untracked_files:
 | 
			
		||||
        repo.git.add(file_name)
 | 
			
		||||
        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)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def push_to_remote():
 | 
			
		||||
    repo = Repo(cfg.bcp.dir)
 | 
			
		||||
    remote = repo.remote(name=cfg.git.branch)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue