Логи и конфиги переработаны, добавлен модуль 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

View File

@@ -1,12 +1,11 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
Примеры использования модуля c1_cluster.py новым способом
Демонстрирует прямое использование C1ClusterOperations без основного класса ssh
Примеры использования модуля c1_cluster через единый SSHClient.
Паттерн: SSHClient + connect() + set_c1_config() + операции + close()
"""
import config
from modules.ssh_base import SSHBase
from modules.c1_cluster import C1ClusterOperations
from modules import SSHClient
def example_basic_usage():
@@ -17,37 +16,27 @@ def example_basic_usage():
print("Пример 1: Базовое использование модуля c1_cluster")
print("=" * 60)
# Загружаем конфигурацию
cfg = config.get_config()
# Создаем SSH подключение
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh']['host_keys']
host_keys=cfg['ssh']['host_keys'],
)
# Подключаемся
ssh_client.connect()
# Создаем экземпляр модуля 1С кластера с параметрами из конфига
lxc_container = cfg['c1']['lxc_container_name']
cluster_user = cfg['c1']['cluster_user']
cluster_password = cfg['c1']['cluster_password']
c1_cluster = C1ClusterOperations(ssh_client, lxc_container, cluster_user, cluster_password)
# Получаем версию кластера
version = c1_cluster.cluster_version()
client.connect()
client.set_c1_config(
cfg['c1']['lxc_container_name'],
cfg['c1']['cluster_user'],
cfg['c1']['cluster_password'],
)
version = client.cluster_version()
print(f"Версия кластера 1С: {version}")
# Получаем ID кластера
cluster_id = c1_cluster.cluster_id()
cluster_id = client.cluster_id()
print(f"ID кластера 1С: {cluster_id}")
# Закрываем соединение
ssh_client.close()
client.close()
print("\n")
@@ -61,22 +50,21 @@ def example_get_base_list():
cfg = config.get_config()
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh'].get('host_keys', '~/.ssh/known_hosts'),
)
ssh_client.connect()
# Создаем экземпляр модуля 1С кластера с параметрами из конфига
lxc_container = cfg['c1']['lxc_container_name']
cluster_user = cfg['c1']['cluster_user']
cluster_password = cfg['c1']['cluster_password']
c1_cluster = C1ClusterOperations(ssh_client, lxc_container, cluster_user, cluster_password)
# Получаем список баз данных
bases = c1_cluster.base_list()
client.connect()
client.set_c1_config(
cfg['c1']['lxc_container_name'],
cfg['c1']['cluster_user'],
cfg['c1']['cluster_password'],
)
bases = client.base_list()
print(f"Найдено баз данных: {len(bases)}")
for base in bases:
@@ -85,7 +73,7 @@ def example_get_base_list():
base_id = base['id'][0] if base.get('id') and len(base['id']) > 0 else 'N/A'
print(f" - {base_name} (ID: {base_id})")
ssh_client.close()
client.close()
print("\n")
@@ -99,28 +87,27 @@ def example_get_base_info():
cfg = config.get_config()
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh'].get('host_keys', '~/.ssh/known_hosts'),
)
client.connect()
client.set_c1_config(
cfg['c1']['lxc_container_name'],
cfg['c1']['cluster_user'],
cfg['c1']['cluster_password'],
)
ssh_client.connect()
# Создаем экземпляр модуля 1С кластера с параметрами из конфига
lxc_container = cfg['c1']['lxc_container_name']
cluster_user = cfg['c1']['cluster_user']
cluster_password = cfg['c1']['cluster_password']
infobase_user = cfg['c1']['infobase_user']
infobase_password = cfg['c1']['infobase_password']
c1_cluster = C1ClusterOperations(ssh_client, lxc_container, cluster_user, cluster_password)
# Получаем список баз из конфигурации
bases_to_process = cfg['migration'].get('bases', [])
if not bases_to_process:
print("Список баз для обработки не указан в конфигурации (migration.bases)")
ssh_client.close()
client.close()
return
print(f"Обработка {len(bases_to_process)} баз данных из конфигурации:")
@@ -134,12 +121,12 @@ def example_get_base_info():
try:
# Получаем ID базы
base_id = c1_cluster.base_id(base_name)
base_id = client.base_id(base_name)
if base_id:
print(f"ID базы данных '{base_name}': {base_id}")
# Получаем полную информацию о базе
base_info = c1_cluster.base_info(base_name, infobase_user, infobase_password)
base_info = client.base_info(base_name, infobase_user, infobase_password)
if base_info:
print(f"\nИнформация о базе данных '{base_name}':")
@@ -154,7 +141,7 @@ def example_get_base_info():
print()
ssh_client.close()
client.close()
print("\n")
@@ -168,13 +155,14 @@ def example_update_base_info():
cfg = config.get_config()
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh'].get('host_keys', '~/.ssh/known_hosts'),
)
ssh_client.connect()
client.connect()
# Создаем экземпляр модуля 1С кластера с параметрами из конфига
lxc_container = cfg['c1']['lxc_container_name']
@@ -182,8 +170,8 @@ def example_update_base_info():
cluster_password = cfg['c1']['cluster_password']
infobase_user = cfg['c1']['infobase_user']
infobase_password = cfg['c1']['infobase_password']
c1_cluster = C1ClusterOperations(ssh_client, lxc_container, cluster_user, cluster_password)
client.set_c1_config(lxc_container, cluster_user, cluster_password)
# Параметры базы данных PostgreSQL
db_server = cfg['c1']['db_server']
db_name = cfg['c1'].get('db_name', '')
@@ -199,7 +187,7 @@ def example_update_base_info():
if not bases_to_process:
print("Список баз для обработки не указан в конфигурации (migration.bases)")
ssh_client.close()
client.close()
return
print(f"Обработка {len(bases_to_process)} баз данных из конфигурации:")
@@ -231,7 +219,7 @@ def example_update_base_info():
print(f" Запрет сеансов: {sessions_deny}")
# Обновляем информацию о базе
updated_base_id = c1_cluster.base_info_update(
updated_base_id = client.base_info_update(
base_name, db_server, actual_db_name, db_user, db_password,
infobase_user, infobase_password,
scheduled_jobs_deny, sessions_deny
@@ -246,7 +234,7 @@ def example_update_base_info():
print()
ssh_client.close()
client.close()
print("\n")
@@ -260,29 +248,30 @@ def example_workflow():
cfg = config.get_config()
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh'].get('host_keys', '~/.ssh/known_hosts'),
)
ssh_client.connect()
client.connect()
# Создаем экземпляр модуля 1С кластера с параметрами из конфига
lxc_container = cfg['c1']['lxc_container_name']
cluster_user = cfg['c1']['cluster_user']
cluster_password = cfg['c1']['cluster_password']
c1_cluster = C1ClusterOperations(ssh_client, lxc_container, cluster_user, cluster_password)
client.set_c1_config(lxc_container, cluster_user, cluster_password)
try:
# Шаг 1: Получаем версию кластера
print("Шаг 1: Получение версии кластера...")
version = c1_cluster.cluster_version()
version = client.cluster_version()
print(f" Версия: {version}")
# Шаг 2: Запускаем демон кластера
print("\nШаг 2: Запуск демона кластера...")
err = c1_cluster.cluster_daemon_start()
err = client.cluster_daemon_start()
if err:
print(f" Предупреждение: {err}")
else:
@@ -290,12 +279,12 @@ def example_workflow():
# Шаг 3: Получаем ID кластера
print("\nШаг 3: Получение ID кластера...")
cluster_id = c1_cluster.cluster_id()
cluster_id = client.cluster_id()
print(f" ID кластера: {cluster_id}")
# Шаг 4: Получаем список баз данных
print("\nШаг 4: Получение списка баз данных...")
bases = c1_cluster.base_list()
bases = client.base_list()
print(f" Найдено баз: {len(bases)}")
# Шаг 5: Для каждой базы получаем ID
@@ -303,13 +292,13 @@ def example_workflow():
for base in bases:
if base.get('name') and len(base['name']) > 0:
base_name = base['name'][0]
base_id = c1_cluster.base_id(base_name)
base_id = client.base_id(base_name)
print(f" {base_name}: {base_id}")
except Exception as e:
print(f"Ошибка: {e}")
finally:
ssh_client.close()
client.close()
print("\n")
@@ -323,28 +312,28 @@ def example_context_manager_style():
print("=" * 60)
cfg = config.get_config()
ssh_client = None
client = None
try:
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
)
ssh_client.connect()
client.connect()
# Создаем экземпляр модуля 1С кластера с параметрами из конфига
lxc_container = cfg['c1']['lxc_container_name']
cluster_user = cfg['c1']['cluster_user']
cluster_password = cfg['c1']['cluster_password']
c1_cluster = C1ClusterOperations(ssh_client, lxc_container, cluster_user, cluster_password)
client.set_c1_config(lxc_container, cluster_user, cluster_password)
# Получаем версию и список баз
version = c1_cluster.cluster_version()
version = client.cluster_version()
print(f"Версия кластера: {version}")
bases = c1_cluster.base_list()
bases = client.base_list()
print(f"Список баз данных ({len(bases)} шт.):")
for base in bases[:3]: # Показываем только первые 3
if base.get('name') and len(base['name']) > 0:
@@ -353,8 +342,8 @@ def example_context_manager_style():
except Exception as e:
print(f"Произошла ошибка: {e}")
finally:
if ssh_client:
ssh_client.close()
if client:
client.close()
print("Соединение закрыто")
print("\n")
@@ -362,7 +351,7 @@ def example_context_manager_style():
if __name__ == "__main__":
print("\n" + "=" * 60)
print("Примеры использования модуля c1_cluster.py")
print("Примеры использования модуля client.py")
print("=" * 60 + "\n")
# Раскомментируйте нужные примеры для запуска