Логи и конфиги переработаны, добавлен модуль ZFS и ведется работа с телеграм-ботом

This commit is contained in:
2026-02-14 19:20:55 +03:00
parent 40bf9f9887
commit f227824070
21 changed files with 1135 additions and 689 deletions

81
config/__init__.py Normal file
View File

@@ -0,0 +1,81 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
Загрузка конфигурации из YAML.
Файлы: config/migration.yaml, config/zfs_backup.yaml
"""
import os
from typing import Any, Dict, Optional
import yaml
CONFIG_DIR = os.path.dirname(os.path.abspath(__file__))
DEFAULT_MIGRATION_CONFIG = os.path.join(CONFIG_DIR, "migration.yaml")
DEFAULT_ZFS_CONFIG = os.path.join(CONFIG_DIR, "zfs_backup.yaml")
def _load_yaml(path: str) -> Dict[str, Any]:
"""Загрузить YAML-файл в словарь."""
with open(path, "r", encoding="utf-8") as f:
return yaml.safe_load(f)
def get_config(config_path: Optional[str] = None) -> Dict[str, Any]:
"""
Загрузка конфигурации миграции 1С (SSH, PostgreSQL, 1C, migration).
Args:
config_path: Путь к migration.yaml. По умолчанию — config/migration.yaml.
Returns:
dict: Секции ssh, postgresql, c1, migration, logging.
"""
path = config_path or os.environ.get("MIGRATION_CONFIG", DEFAULT_MIGRATION_CONFIG)
if not os.path.isabs(path):
# Относительно корня проекта (родитель config/)
root = os.path.dirname(CONFIG_DIR)
path = os.path.join(root, path)
data = _load_yaml(path)
config = {
"ssh": data.get("ssh", {}),
"postgresql": data.get("postgresql", {}),
"c1": data.get("c1", {}),
"migration": dict(data.get("migration", {})),
"logging": data.get("logging", {"level": "INFO"}),
}
mig = config["migration"]
archive = mig.get("archive_bases_name", [])
if mig.get("restore_bases_name") is None:
mig["restore_bases_name"] = list(archive)
if mig.get("bases") is None:
mig["bases"] = list(archive)
def _norm_on_off(v: Any) -> str:
if v in (True, "true", "on", "1"):
return "on"
if v in (False, "false", "off", "0"):
return "off"
raise ValueError(f"Ожидается on/off, получено: {v!r}")
scheduled = _norm_on_off(mig.get("scheduled_jobs_deny", "off"))
sessions = _norm_on_off(mig.get("sessions_deny", "off"))
mig["scheduled_jobs_deny"] = scheduled
mig["sessions_deny"] = sessions
return config
def load_zfs_config(config_path: Optional[str] = None) -> Dict[str, Any]:
"""
Загрузка конфигурации ZFS Backup.
Args:
config_path: Путь к zfs_backup.yaml. По умолчанию — config/zfs_backup.yaml.
"""
path = config_path or os.environ.get("ZFS_CONFIG", DEFAULT_ZFS_CONFIG)
if not os.path.isabs(path):
root = os.path.dirname(CONFIG_DIR)
path = os.path.join(root, path)
return _load_yaml(path)

32
config/config_log.yaml Normal file
View File

@@ -0,0 +1,32 @@
# Конфигурация логирования (PRD v1.8)
# Используется: zfs_backup.py, modules/logger.py
# Основные настройки
log_file: "/var/log/zfs_backup.log"
log_level: "INFO"
# Telegram интеграция
telegram:
enabled: true
bot_token: "8294703499:AAGfSNSxe9NOrh9wD7FeQcWax9yq1bGBqBY"
chat_id: "-5101685781"
allowed_users:
- 86018113
log_level: "INFO"
allowed_levels:
- "ERROR"
- "INFO"
- "WARNING"
retry:
attempts: 3
delay: 5
options:
parse_mode: "HTML"
disable_notification: false
max_message_length: 4096
enable_commands: true

41
config/migration.yaml Normal file
View File

@@ -0,0 +1,41 @@
# Конфигурация миграции 1С, PostgreSQL, SSH
# Используется: 1c-migration.py, example_postgresql.py, example_c1_cluster.py
logging:
level: INFO
ssh:
hostname: g.it.cln.su
port: 22222
username: root
pkey_file: /root/.ssh/id_rsa
host_keys: "~/.ssh/known_hosts"
postgresql:
archive_server: 1c.it.cln.su
restore_server: postgres.it.cln.su
backup_date: "16.12.2025"
extra_backup: true
postgres_user: postgres
postgres_password: PrestigePostgres
c1:
lxc_container_name: c1
cluster_user: neon
cluster_password: "Pre$tige310582"
db_server: postgres.it.cln.su
db_user: postgres
db_password: PrestigePostgres
infobase_user: neon
infobase_password: "$F%G^H&J*K"
migration:
archive_bases_name:
- salon
- lmotor-ut
- staretail
- uran-ut
restore_bases_name: null # если null — используется archive_bases_name
bases: null # для примеров; если null — archive_bases_name
scheduled_jobs_deny: on
sessions_deny: off

23
config/zfs_backup.yaml Normal file
View File

@@ -0,0 +1,23 @@
# Конфигурация ZFS Backup v1.1
# Запуск: python zfs_backup.py --config=config/zfs_backup.yaml
ssh_defaults:
port: 22222
username: root
pkey_file: /root/.ssh/id_rsa
host_keys: "~/.ssh/known_hosts"
servers:
- name: gwo2.mps.cln.su
pools:
- source_pool: zp2
datasets:
- containers/smb2
target_pool: fast-backup
- source_pool: zp0
datasets:
- containers/www
- containers/voip
target_pool: fast-backup
snapshot_name: dd-mm-yyyy
retention_days: 90