Возвращение разделение выгрузки на файлы.
This commit is contained in:
86
download.py
86
download.py
@@ -160,11 +160,6 @@ if __name__ == "__main__":
|
|||||||
print(f"Ошибка: {e}", file=sys.stderr)
|
print(f"Ошибка: {e}", file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# если передан аргумент(ы) запуска,
|
|
||||||
# значит пытаемся обновить только указанные списки
|
|
||||||
if len(sys.argv) > 1:
|
|
||||||
ip_list = {k: v for k, v in ip_list.items() if k in sys.argv[1:]}
|
|
||||||
|
|
||||||
# проверяем на пустой список выгрузки
|
# проверяем на пустой список выгрузки
|
||||||
if (not ip_list):
|
if (not ip_list):
|
||||||
print(f"Список выгрузки пустой", file=sys.stderr)
|
print(f"Список выгрузки пустой", file=sys.stderr)
|
||||||
@@ -174,42 +169,53 @@ if __name__ == "__main__":
|
|||||||
outdir=os.path.join(os.path.dirname(os.path.realpath(__file__)), 'unloading')
|
outdir=os.path.join(os.path.dirname(os.path.realpath(__file__)), 'unloading')
|
||||||
if not os.path.exists(outdir):
|
if not os.path.exists(outdir):
|
||||||
os.makedirs(outdir,exist_ok=True)
|
os.makedirs(outdir,exist_ok=True)
|
||||||
# создаём временный файл, перед выгрузкой
|
# создаём временный файл экспортируемой конфигурации, перед выгрузкой
|
||||||
open(ipv4_out_file := f"{outdir}/bird2_v4.m4.tmp", "w").close()
|
open(ipv4_bird2_m4 := f"{outdir}/bird2_v4.m4.tmp", "w").close()
|
||||||
open(ipv6_out_file := f"{outdir}/bird2_v6.m4.tmp", "w").close()
|
open(ipv6_bird2_m4 := f"{outdir}/bird2_v6.m4.tmp", "w").close()
|
||||||
# обходим массив списков для выкрузки
|
# обходим массив списков для выкрузки
|
||||||
for clist in ip_list:
|
for clist in ip_list:
|
||||||
# выполняем выгрузку
|
# имена выходых файлов
|
||||||
print(f"Выгружаю список IP: {clist}")
|
ipv4_out_file=f"{outdir}/{clist.lower()}_v4.txt"
|
||||||
ipv4_list, ipv6_list=list_ip(ip_list[clist]['list'])
|
ipv6_out_file=f"{outdir}/{clist.lower()}_v6.txt"
|
||||||
# сохраняем ipv4
|
# если передан аргумент(ы) запуска,
|
||||||
if ipv4_list:
|
# значит пытаемся обновить только указанные списки
|
||||||
# собираем комьюнити маршрутов
|
if len(sys.argv)==1 or clist in sys.argv[1:]:
|
||||||
bgp_community=str()
|
print("")
|
||||||
for c in str(ip_list[clist]['community']).split(","):
|
# вычисляем кол-во записей прошлой выгрузки
|
||||||
bgp_community+=f"bgp_community.add(({str(c).replace(':',',')})); "
|
ipv4_count_old = sum(1 for line in open(ipv4_out_file)) if os.path.isfile(ipv4_out_file) else 0
|
||||||
# сохраняем в файл
|
ipv6_count_old = sum(1 for line in open(ipv6_out_file)) if os.path.isfile(ipv6_out_file) else 0
|
||||||
with open(ipv4_out_file, "a") as file:
|
# выполняем выгрузку
|
||||||
file.write(f"protocol static static_{clist.lower()} {{\n ipv4 {{ import filter {{ {bgp_community}accept; }}; }};\n{ipv4_list}}}\n")
|
print(f"Выгружаю список IP: {clist}")
|
||||||
print(f"Файл {ipv4_out_file} дополнен")
|
ipv4_list, ipv6_list=list_ip(ip_list[clist]['list'])
|
||||||
# сохраняем ipv6
|
# сохраняем ipv4
|
||||||
if ipv6_list:
|
if ipv4_list and len(ipv4_list.splitlines()) >= ipv4_count_old * 0.5:
|
||||||
# собираем комьюнити маршрутов
|
# сохраняем в файл
|
||||||
bgp_community=str()
|
with open(ipv4_out_file, "w") as file:
|
||||||
for c in str(ip_list[clist]['community']).split(","):
|
file.write(ipv4_list)
|
||||||
bgp_community+=f"bgp_community.add(({str(c).replace(':',',')})); "
|
print(f"Файл выгрузки {ipv4_out_file} сохранён")
|
||||||
# сохраняем в файл
|
# сохраняем ipv6
|
||||||
with open(ipv6_out_file, "a") as file:
|
if ipv6_list and len(ipv6_list.splitlines()) >= ipv6_count_old * 0.5:
|
||||||
file.write(f"protocol static static_{clist.lower()} {{\n ipv6 {{ import filter {{ {bgp_community}accept; }}; }};\n{ipv6_list}}}\n")
|
# сохраняем в файл
|
||||||
print(f"Файл {ipv6_out_file} дополнен")
|
with open(ipv6_out_file, "w") as file:
|
||||||
print("")
|
file.write(ipv6_list)
|
||||||
# проверяем, что временный файл ipv4 не пустой, сохраняем в постоянный
|
print(f"Файл выгрузки {ipv6_out_file} сохранён")
|
||||||
if os.path.exists(ipv4_out_file) and os.path.getsize(ipv4_out_file) != 0:
|
# собираем комьюнити маршрутов
|
||||||
os.replace(ipv4_out_file, ipv4_out_file.removesuffix(".tmp"))
|
bgp_community=str()
|
||||||
|
for c in str(ip_list[clist]['community']).split(","):
|
||||||
|
bgp_community+=f"bgp_community.add(({str(c).replace(':',',')})); "
|
||||||
|
# обновляем временный файл конфигурации ipv4
|
||||||
|
with open(ipv4_bird2_m4, "a") as file:
|
||||||
|
file.write(f"protocol static static_{clist.lower()} {{\n ipv4 {{ import filter {{ {bgp_community}accept; }}; }}; include \"{ipv4_out_file}\"; }}\n")
|
||||||
|
# обновляем временный файл конфигурации ipv6
|
||||||
|
with open(ipv6_bird2_m4, "a") as file:
|
||||||
|
file.write(f"protocol static static_{clist.lower()} {{\n ipv6 {{ import filter {{ {bgp_community}accept; }}; }}; include \"{ipv6_out_file}\"; }}\n")
|
||||||
|
# проверяем, что временный файл конфигурации ipv4 не пустой, сохраняем в постоянный
|
||||||
|
if os.path.exists(ipv4_bird2_m4) and os.path.getsize(ipv4_bird2_m4) != 0:
|
||||||
|
os.replace(ipv4_bird2_m4, ipv4_bird2_m4.removesuffix(".tmp"))
|
||||||
os.system("systemctl reload bird.service")
|
os.system("systemctl reload bird.service")
|
||||||
print(f"Новый файл выгрузки ipv4 применён")
|
print(f"Новый файл конфигурации ipv4 применён")
|
||||||
# проверяем, что временный файл ipv6 не пустой, сохраняем в постоянный
|
# проверяем, что временный файл конфигурации ipv6 не пустой, сохраняем в постоянный
|
||||||
if os.path.exists(ipv6_out_file) and os.path.getsize(ipv6_out_file) != 0:
|
if os.path.exists(ipv6_bird2_m4) and os.path.getsize(ipv6_bird2_m4) != 0:
|
||||||
print(f"Новый файл выгрузки ipv6 применён")
|
os.replace(ipv6_bird2_m4, ipv6_bird2_m4.removesuffix(".tmp"))
|
||||||
os.replace(ipv6_out_file, ipv6_out_file.removesuffix(".tmp"))
|
|
||||||
os.system("systemctl reload bird.service")
|
os.system("systemctl reload bird.service")
|
||||||
|
print(f"Новый файл конфигурации ipv6 применён")
|
||||||
|
|||||||
Reference in New Issue
Block a user