#!/usr/bin/env python3 """ Скрипт для генерации конфигурации ExaBGP из переменных окружения """ import os import sys def get_env_var(name: str, default: str) -> str: """Получение переменной окружения с значением по умолчанию""" return os.environ.get(name, default) def generate_exabgp_config(): """Генерация конфигурации ExaBGP""" # Получение переменных окружения local_as = get_env_var('BGP_LOCAL_AS', '65000') router_id = get_env_var('BGP_ROUTER_ID', '192.168.1.100') neighbor_ip = get_env_var('BGP_NEIGHBOR_IP', '192.168.1.1') neighbor_as = get_env_var('BGP_NEIGHBOR_AS', '65001') hold_time = get_env_var('BGP_HOLD_TIME', '90') keepalive = get_env_var('BGP_KEEPALIVE', '30') md5_password = get_env_var('BGP_MD5_PASSWORD', '') log_level = get_env_var('BGP_LOG_LEVEL', 'INFO') # Генерация конфигурации config = f"""# Автоматически сгенерированная конфигурация ExaBGP process load-prefixes {{ run /app/scripts/load_prefixes.py; encoder json; }} # Настройки BGP neighbor {neighbor_ip} {{ router-id {router_id}; local-address {router_id}; local-as {local_as}; peer-as {neighbor_as}; # Только исходящие анонсы (не принимаем префиксы) capability {{ graceful-restart; }} # Настройки сессии hold-time {hold_time}; """ # Добавление MD5 пароля если указан if md5_password: config += f" md5-password \"{md5_password}\";\n" config += f""" # Логирование api {{ processes [load-prefixes]; neighbor-changes; receive {{ parsed; update; }} send {{ parsed; update; }} }} }} """ return config def main(): """Основная функция""" if len(sys.argv) > 1 and sys.argv[1] == '--print': # Вывод конфигурации в stdout print(generate_exabgp_config()) else: # Запись конфигурации в файл config = generate_exabgp_config() with open('/app/exabgp.conf', 'w') as f: f.write(config) print("Configuration generated successfully") if __name__ == "__main__": main()