Перейти к содержанию

Рендеринг конфигурации

Один из критически важных аспектов эксплуатации сети — обеспечение правильной настройки каждого сетевого узла. Используя шаблоны конфигурации и контекстные данные, InfraVision может генерировать полные файлы конфигурации для каждого устройства в вашей сети.

flowchart TD
    ConfigContext & ConfigTemplate --> Config{{Rendered configuration}}

click ConfigContext "../../models/extras/configcontext/"
click ConfigTemplate "../../models/extras/configtemplate/"

Шаблоны конфигурации

Шаблоны конфигурации написаны на языке шаблонов Jinja2 и могут автоматически заполняться из удалённых источников данных. Контекстные данные применяются к шаблону во время рендеринга для вывода полного файла конфигурации. Ниже приведён пример шаблона Jinja2, который рендерит простой файл конфигурации сетевого коммутатора.

{% extends 'base.j2' %}

{% block content %}
    system {
        host-name {{ device.name }};
        domain-name example.com;
        time-zone UTC;
        authentication-order [ password radius ];
        ntp {
            {% for server in ntp_servers %}
                server {{ server }};
            {% endfor %}
        }
    }
    {% for interface in device.interfaces.all() %}
        {% include 'common/interface.j2' %}
    {% endfor %}
{% endblock %}

При рендеринге для конкретного устройства InfraVision переменная device шаблона будет заполнена экземпляром устройства, а ntp_servers будет взят из доступных контекстных данных устройства. Результирующий вывод будет валидным сегментом конфигурации, который можно применить непосредственно к совместимому сетевому устройству.

Контекстные данные

Объект, для которого рендерится конфигурация, становится доступен в контексте шаблона как device или virtualmachine для устройств и виртуальных машин соответственно. Кроме того, классы моделей InfraVision доступны по приложению или плагину, в котором они находятся. Например:

There are {{ dcim.Site.objects.count() }} sites.

Рендеринг шаблонов

Конфигурации устройств

InfraVision предоставляет endpoint REST API специально для рендеринга шаблона конфигурации по умолчанию для конкретного устройства. Это выполняется отправкой POST-запроса на уникальный URL устройства с опциональным включением дополнительных контекстных данных.

curl -X POST \
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json; indent=4" \
http://netbox:8000/api/dcim/devices/123/render-config/ \
--data '{
  "extra_data": "abc123"
}'

Этот запрос запустит разрешение предпочтительного шаблона конфигурации устройства в следующем порядке:

  • Шаблон конфигурации, назначенный отдельному устройству
  • Шаблон конфигурации, назначенный роли устройства
  • Шаблон конфигурации, назначенный платформе устройства

Если шаблон конфигурации не был назначен ни одному из этих трёх объектов, запрос завершится неудачей.

Конфигурация может быть отрендерена как JSON или как обычный текст путём установки HTTP-заголовка Accept:. Например:

  • Accept: application/json
  • Accept: text/plain

Общее использование

Шаблоны конфигурации InfraVision также могут рендериться без привязки к какому-либо конкретному устройству, используя отдельный endpoint REST API общего назначения. Любые данные, включённые в POST-запрос к этому endpoint, будут переданы как контекстные данные для шаблона.

curl -X POST \
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json; indent=4" \
http://netbox:8000/api/extras/config-templates/123/render/ \
--data '{
  "foo": "abc",
  "bar": 123
}'