Логи и конфиги переработаны, добавлен модуль ZFS и ведется работа с телеграм-ботом
This commit is contained in:
81
config/__init__.py
Normal file
81
config/__init__.py
Normal 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
32
config/config_log.yaml
Normal 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
41
config/migration.yaml
Normal 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
23
config/zfs_backup.yaml
Normal 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
|
||||
Reference in New Issue
Block a user