Топологии на основе YAML¶
Обычно Topolograph строит граф из LSDB OSPF/IS-IS - но начиная с v2.32 он может строить его и из описания в YAML. Это значит, что вы можете спроектировать произвольную топологию с нуля (это даже не обязательно должен быть домен IGP), поддерживать её актуальной через REST API и запускать на ней весь тот же анализ.
Network Diagram as a Service
LSDB ⇄ YAML взаимозаменяемы в обе стороны. Вы можете спроектировать домен IGP с нуля или экспортировать загруженную LSDB в YAML, затем добавить линки, изменить метрики и заново проверить реакцию сети на ваши правки.
Базовая диаграмма¶
Диаграмма в YAML - это просто nodes и edges:
nodes:
10.10.10.1:
label: Router1
10.10.10.2:
label: Router2
edges:
- src: 10.10.10.1
dst: 10.10.10.2
cost: 10
Загрузите её через REST API:
import requests
yaml_diagram = """
nodes:
10.10.10.1:
label: Router1
10.10.10.2:
label: Router2
edges:
- src: 10.10.10.1
dst: 10.10.10.2
cost: 10
"""
requests.post(
'http://<topolograph-host>/api/diagram',
auth=('', ''),
json={'yaml_diagram_str': yaml_diagram},
)
…или с помощью Python SDK:
from topolograph import Topolograph
topo = Topolograph(url="topolograph-url", token="your-token")
graph = topo.graphs.upload_diagram(yaml_diagram)
print(f"Diagram uploaded: {graph.graph_time}")
Атрибуты и теги узлов¶
- Имя узла обязательно и должно быть в формате IP-адреса. Чтобы показать
что-то более понятное, задайте
label. - Теги необязательны. Прикрепляйте любые пары
key: value(значения могут быть строками, числами, словарями или списками) - например,location,ha_roleили что угодно, значимое для вас.
Теги делают узлы доступными для запросов. На графе из 6 узлов вы можете выбрать, скажем, все первичные узлы в DC1:
query_params = {'location': 'dc1', 'ha_role': 'primary'}
r = requests.get(
f'http://{HOST}:{PORT}/api/diagram/{graph_time}/nodes',
auth=('', ''),
params=query_params,
)
# -> [{'ha_role': 'primary', 'id': 1, 'label': '10.10.10.2',
# 'location': 'dc1', 'name': '10.10.10.2', 'size': 15}]
Атрибуты линков¶
У каждого линка есть как минимум src, dst и cost. Линки также могут
нести атрибуты Traffic Engineering (пропускная
способность, TE-метрика, административная группа), по которым затем можно
фильтровать через API линков диаграммы.
Атрибуты сетей¶
Подсети, терминируемые на узле, находятся в секции верхнего уровня
stub_networks:. Это метаданные терминации - точно так же, как когда
подсеть разбирается из реальной LSDB - для них не создаётся узел графа,
поэтому они учитываются в покрытии резервированием и в оценке сети, а не в
счётчике узлов. Подсеть, анонсируемая двумя или более узлами, считается
зарезервированной.
stub_networks:
192.168.1.0/24:
- node: 10.10.10.1
cost: 10
area: 0
- node: 10.10.10.2
cost: 20
area: 0
| ключ | значения/формат | значение |
|---|---|---|
| subnet | CIDR, например 192.168.1.0/24 |
ключ каждой записи; его значение - список анонсирующих узлов |
node |
имя узла, должно существовать в nodes |
узел, анонсирующий подсеть |
cost |
int | метрика от этого узла до подсети |
area |
int | область, в которой анонсируется подсеть |
metric_type |
int | стиль метрики IS-IS |
isnarrow, isextended |
bool | кодировка метрики IS-IS |
Экспорт топологии обратно в YAML сохраняет эту секцию, так что круговой путь LSDB → YAML → LSDB не теряет подсети.
Туннели MPLS TE¶
Диаграмма также может объявлять туннели RSVP-TE/SR-TE в секции верхнего
уровня lsps:, рядом с nodes/edges. Topolograph выполняет для них
размещение CSPF (пропускная способность, affinity, SRLG) и позволяет
запрашивать результат или проверять, поместился бы гипотетический новый
туннель, не затрагивая граф.
Зачем это использовать¶
- Проверка гипотезы до постройки - запланируйте новый линк или LSP, смоделируйте его в YAML-диаграмме и проверьте, как перестроится сеть.
- Отображение сетевой диаграммы - постройте граф из узлов и линков, в том числе с метаданными: наличие провайдера, роль провайдера, роль узла и т. д. Это Network Diagram as a Service.