- vis.js
- nornir
- flask
Небольшое приложение на flask (javascript оказался проще всего).
- в коде есть проверка на существование обнаруженного соседа в инвентори и в случае, если сосед обнаружен в выводе команды, но в инвентори его нет, то такой узел не попадает в результирующий файл;
- для упрощения логики подразумевается, что портовые tlv отправляются и выводе команд все присутствует;
- тип устройства (роутер или свитчо) определяется по наличию включенной Router capability, естественно если это отключить, то все сломается (все устройства будут свитчами);
- поддерживается только ios xe / ios
На ходе ожидается заполненное инвентори в фармате SimpleInventory Nornir На выходе перед отрисовской получается json вида { links: [], nodes: [] }
Перед началом создаем новый venv (все проверялось на MacOS)
- Создаем окружение python3 -m venv ~/env2
- Активируем его source ~/env2/bin/activate
- Переходим в папку с проектом cd git/devnet-marathon3
- Установим зависимости pip install -r requirements.txt
- Отредактируем inventory
- Теперь можно запустить python3 topology.py. В результате мы должны получить сообщение "topology data has written to file"
- Теперь можно запустить python3 web_app.py
- Открываем в браузере http://127.0.0.1:5000/ в результате видим нашу топологию.
На страничке также есть кнопка RefreshData, которая тригерит запуск сборщика файла топологии, по завершению страничка будет перезагружена.
Каждый раз при запуске рассчитывается разница между topology.json и topology_prev.json (если его нет, то считается, что есть пустой { links: [], nodes: [] } )
Для устройств:
- лейбл красный - устройство было удалено
- лейбл зеленый - устройство было добавлено
- лейбл черный - ничего не менялось с устройством
Для линков:
- красный линк - линк не дискаверится
- зеленый линк - линк добавился
- черный - ничего не изменилось с линком
Историю topology.json можно посмотреть в папке data/archive
Если что-то пошло не так, то можно открыть файл data/topology.json. Там должно быть что-то похожее на samples/topology.json.
Также стоит обратить внимание на hostname в hosts.yaml (скрипт динамически не получает hostname устройства).
чтобы отрисовать тестовые данные достаточно просто положить файл с топологией в папку data.