#!/usr/bin/env python3 """ Скрипт для перезагрузки префиксов без перезапуска BGP сервера """ import subprocess import sys import time from pathlib import Path def run_command(cmd): """Выполнение команды""" try: result = subprocess.run(cmd, shell=True, capture_output=True, text=True) return result.returncode == 0, result.stdout, result.stderr except Exception as e: return False, "", str(e) def reload_prefixes(): """Перезагрузка префиксов""" print("Reloading prefixes...") # Остановка процесса загрузки префиксов print("Stopping prefix loader process...") success, output, error = run_command("docker exec bgp-server pkill -f load_prefixes.py") if not success: print("Warning: Could not stop prefix loader process") # Ожидание завершения процесса time.sleep(2) # Проверка что процесс остановлен success, output, error = run_command("docker exec bgp-server pgrep -f load_prefixes.py") if success: print("Error: Prefix loader process is still running") return False print("Prefix loader process stopped successfully") # Запуск нового процесса загрузки префиксов print("Starting new prefix loader process...") success, output, error = run_command("docker exec bgp-server /app/scripts/load_prefixes.py &") if success: print("Prefix loader process started successfully") return True else: print(f"Error starting prefix loader: {error}") return False def check_status(): """Проверка статуса после перезагрузки""" print("Checking status...") time.sleep(5) # Проверка процесса success, output, error = run_command("docker exec bgp-server pgrep -f load_prefixes.py") if success: print("✓ Prefix loader process is running") else: print("✗ Prefix loader process is not running") return False # Проверка логов success, output, error = run_command("docker exec bgp-server tail -n 5 /app/logs/prefixes.log") if success: print("Recent log entries:") print(output) else: print("No recent log entries found") return True def main(): """Основная функция""" print("=== BGP Prefix Reloader ===") # Проверка что контейнер запущен success, output, error = run_command("docker ps --filter name=bgp-server --format '{{.Status}}'") if not success or not output.strip(): print("Error: BGP server container is not running") print("Please start the container first: docker-compose up -d") return 1 print("BGP server container is running") # Перезагрузка префиксов if reload_prefixes(): print("Prefix reload completed successfully") # Проверка статуса if check_status(): print("✓ All checks passed") return 0 else: print("✗ Some checks failed") return 1 else: print("✗ Prefix reload failed") return 1 if __name__ == "__main__": sys.exit(main())