Добавляю уже существующий проект в репозиторий GIT

This commit is contained in:
2026-02-09 20:45:47 +03:00
commit 5bbb585d9f
11 changed files with 2198 additions and 0 deletions

385
example_c1_cluster.py Executable file
View File

@@ -0,0 +1,385 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
Примеры использования модуля c1_cluster.py новым способом
Демонстрирует прямое использование C1ClusterOperations без основного класса ssh
"""
import config
from ssh_base import SSHBase
from c1_cluster import C1ClusterOperations
def example_basic_usage():
"""
Пример базового использования модуля c1_cluster
"""
print("=" * 60)
print("Пример 1: Базовое использование модуля c1_cluster")
print("=" * 60)
# Загружаем конфигурацию
cfg = config.get_config()
# Создаем SSH подключение
ssh_client = SSHBase(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file'],
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()
print(f"Версия кластера 1С: {version}")
# Получаем ID кластера
cluster_id = c1_cluster.cluster_id()
print(f"ID кластера 1С: {cluster_id}")
# Закрываем соединение
ssh_client.close()
print("\n")
def example_get_base_list():
"""
Пример получения списка баз данных 1С
"""
print("=" * 60)
print("Пример 2: Получение списка баз данных 1С")
print("=" * 60)
cfg = config.get_config()
ssh_client = SSHBase(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
)
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()
print(f"Найдено баз данных: {len(bases)}")
for base in bases:
if base.get('name') and len(base['name']) > 0:
base_name = base['name'][0]
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()
print("\n")
def example_get_base_info():
"""
Пример получения информации о конкретных базах данных из списка в конфиге
"""
print("=" * 60)
print("Пример 3: Получение информации о базах данных 1С")
print("=" * 60)
cfg = config.get_config()
ssh_client = SSHBase(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
)
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()
return
print(f"Обработка {len(bases_to_process)} баз данных из конфигурации:")
print(f" Список баз: {', '.join(bases_to_process)}\n")
# Обрабатываем каждую базу из списка
for base_name in bases_to_process:
print(f"{'=' * 60}")
print(f"База данных: {base_name}")
print(f"{'=' * 60}")
try:
# Получаем ID базы
base_id = c1_cluster.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)
if base_info:
print(f"\nИнформация о базе данных '{base_name}':")
for key, value in base_info.items():
print(f" {key}: {value}")
else:
print(f"Не удалось получить информацию о базе '{base_name}'")
else:
print(f"База данных '{base_name}' не найдена в кластере")
except Exception as e:
print(f"Ошибка при обработке базы '{base_name}': {e}")
print()
ssh_client.close()
print("\n")
def example_update_base_info():
"""
Пример обновления информации о базах данных 1С из списка в конфиге
"""
print("=" * 60)
print("Пример 4: Обновление информации о базах данных 1С")
print("=" * 60)
cfg = config.get_config()
ssh_client = SSHBase(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
)
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)
# Параметры базы данных PostgreSQL
db_server = cfg['c1']['db_server']
db_name = cfg['c1'].get('db_name', '')
db_user = cfg['c1']['db_user']
db_password = cfg['c1']['db_password']
# Параметры управления доступом из конфигурации миграции
scheduled_jobs_deny = cfg['migration'].get('scheduled_jobs_deny', 'off')
sessions_deny = cfg['migration'].get('sessions_deny', 'off')
# Получаем список баз из конфигурации
bases_to_process = cfg['migration'].get('bases', [])
if not bases_to_process:
print("Список баз для обработки не указан в конфигурации (migration.bases)")
ssh_client.close()
return
print(f"Обработка {len(bases_to_process)} баз данных из конфигурации:")
print(f" Список баз: {', '.join(bases_to_process)}")
print(f" Параметры подключения:")
print(f" Сервер БД: {db_server}")
print(f" Пользователь БД: {db_user}")
print(f" db_name из конфига: {db_name if db_name else '(будет использовано имя базы 1С)'}")
print(f" Параметры управления доступом:")
print(f" Запрет запланированных заданий (scheduled_jobs_deny): {scheduled_jobs_deny}")
print(f" Запрет сеансов (sessions_deny): {sessions_deny}")
print()
# Обрабатываем каждую базу из списка
for base_name in bases_to_process:
print(f"{'=' * 60}")
print(f"База данных: {base_name}")
print(f"{'=' * 60}")
try:
# Если db_name не указан, используем имя базы 1С
actual_db_name = db_name if db_name else base_name
print(f" Обновление параметров:")
print(f" Сервер БД: {db_server}")
print(f" Имя БД: {actual_db_name}")
print(f" Пользователь БД: {db_user}")
print(f" Запрет запланированных заданий: {scheduled_jobs_deny}")
print(f" Запрет сеансов: {sessions_deny}")
# Обновляем информацию о базе
updated_base_id = c1_cluster.base_info_update(
base_name, db_server, actual_db_name, db_user, db_password,
infobase_user, infobase_password,
scheduled_jobs_deny, sessions_deny
)
if updated_base_id:
print(f" ✓ База данных успешно обновлена. ID: {updated_base_id}")
else:
print(f"Не удалось обновить базу данных '{base_name}'")
except Exception as e:
print(f" ✗ Ошибка при обновлении базы '{base_name}': {e}")
print()
ssh_client.close()
print("\n")
def example_workflow():
"""
Пример полного рабочего процесса: получение версии, запуск демона, получение списка баз
"""
print("=" * 60)
print("Пример 5: Полный рабочий процесс")
print("=" * 60)
cfg = config.get_config()
ssh_client = SSHBase(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
)
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)
try:
# Шаг 1: Получаем версию кластера
print("Шаг 1: Получение версии кластера...")
version = c1_cluster.cluster_version()
print(f" Версия: {version}")
# Шаг 2: Запускаем демон кластера
print("\nШаг 2: Запуск демона кластера...")
err = c1_cluster.cluster_daemon_start()
if err:
print(f" Предупреждение: {err}")
else:
print(" Демон запущен успешно")
# Шаг 3: Получаем ID кластера
print("\nШаг 3: Получение ID кластера...")
cluster_id = c1_cluster.cluster_id()
print(f" ID кластера: {cluster_id}")
# Шаг 4: Получаем список баз данных
print("\nШаг 4: Получение списка баз данных...")
bases = c1_cluster.base_list()
print(f" Найдено баз: {len(bases)}")
# Шаг 5: Для каждой базы получаем ID
print("\nШаг 5: Получение ID для каждой базы...")
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)
print(f" {base_name}: {base_id}")
except Exception as e:
print(f"Ошибка: {e}")
finally:
ssh_client.close()
print("\n")
def example_context_manager_style():
"""
Пример использования в стиле context manager (с try/finally)
"""
print("=" * 60)
print("Пример 6: Использование с обработкой ошибок")
print("=" * 60)
cfg = config.get_config()
ssh_client = None
try:
ssh_client = SSHBase(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
)
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()
print(f"Версия кластера: {version}")
bases = c1_cluster.base_list()
print(f"Список баз данных ({len(bases)} шт.):")
for base in bases[:3]: # Показываем только первые 3
if base.get('name') and len(base['name']) > 0:
print(f" - {base['name'][0]}")
except Exception as e:
print(f"Произошла ошибка: {e}")
finally:
if ssh_client:
ssh_client.close()
print("Соединение закрыто")
print("\n")
if __name__ == "__main__":
print("\n" + "=" * 60)
print("Примеры использования модуля c1_cluster.py")
print("=" * 60 + "\n")
# Раскомментируйте нужные примеры для запуска
# example_basic_usage()
# example_get_base_list()
# example_get_base_info()
example_update_base_info()
# example_workflow()
# example_context_manager_style()
print("Для запуска примеров раскомментируйте соответствующие функции в конце файла")
print("\nПримеры демонстрируют:")
print(" 1. Базовое использование модуля")
print(" 2. Получение списка баз данных")
print(" 3. Получение информации о базе данных")
print(" 4. Обновление информации о базе данных")
print(" 5. Полный рабочий процесс")
print(" 6. Использование с обработкой ошибок")