85 lines
2.5 KiB
Python
85 lines
2.5 KiB
Python
#!/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() |