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

Шаблоны экспорта

InfraVision позволяет пользователям определять пользовательские шаблоны, которые можно использовать при экспорте объектов. Чтобы создать шаблон экспорта, перейдите в раздел Кастомизация > Шаблоны экспорта.

Каждый шаблон экспорта связан с определённым типом объекта. Например, если вы создадите шаблон экспорта для VLAN, ваш пользовательский шаблон появится под кнопкой "Экспорт" в списке VLAN. Каждый шаблон экспорта должен иметь имя и может опционально обозначать конкретный MIME-тип экспорта и/или расширение файла.

Шаблоны экспорта должны быть написаны на Jinja2.

Примечание

Имя table зарезервировано для внутреннего использования.

Внимание

Шаблоны экспорта рендерятся с использованием кода, предоставленного пользователем, что может представлять риски безопасности при определённых условиях. Предоставляйте разрешение на создание или изменение шаблонов экспорта только доверенным пользователям.

Список объектов, возвращаемых из базы данных при рендеринге шаблона экспорта, хранится в переменной queryset, которую вы обычно захотите перебрать с помощью цикла for. К свойствам объекта можно обращаться по имени. Например:

{% for rack in queryset %}
Rack: {{ rack.name }}
Site: {{ rack.site.name }}
Height: {{ rack.u_height }}U
{% endfor %}

Чтобы получить доступ к пользовательским полям объекта в шаблоне, используйте атрибут cf. Например, {{ obj.cf.color }} вернёт значение (если есть) для пользовательского поля с именем color на obj.

Если вам нужно использовать данные контекста конфигурации в шаблоне экспорта, вы должны использовать функцию get_config_context для получения всех данных контекста конфигурации. Например:

{% for server in queryset %}
{% set data = server.get_config_context() %}
{{ data.syslog }}
{% endfor %}

Атрибут as_attachment шаблона экспорта контролирует его поведение при рендеринге. Если true, отрендеренный контент будет возвращён пользователю как загружаемый файл. Если false, он будет отображён в браузере. (Это может быть удобно, например, для генерации HTML-контента.)

MIME-тип и расширение файла могут быть опционально определены для каждого шаблона экспорта. MIME-тип по умолчанию — text/plain.

Интеграция с REST API

Когда необходимо предоставить учётные данные аутентификации (например, когда включён LOGIN_REQUIRED), рекомендуется рендерить шаблоны экспорта через REST API. Это позволяет клиенту указать токен аутентификации. Чтобы отрендерить шаблон экспорта через REST API, выполните GET-запрос к endpoint списка модели и добавьте параметр export, указывающий имя шаблона экспорта. Например:

GET /api/dcim/sites/?export=MyTemplateName

Обратите внимание, что тело ответа будет содержать только отрендеренный контент шаблона экспорта, в отличие от объекта или списка JSON.

Пример

Вот пример шаблона экспорта устройств, который сгенерирует простую конфигурацию Nagios из списка устройств.

{% for device in queryset %}{% if device.status and device.primary_ip %}define host{
        use                     generic-switch
        host_name               {{ device.name }}
        address                 {{ device.primary_ip.address.ip }}
}
{% endif %}{% endfor %}

Сгенерированный вывод будет выглядеть примерно так:

define host{
        use                     generic-switch
        host_name               switch1
        address                 192.0.2.1
}
define host{
        use                     generic-switch
        host_name               switch2
        address                 192.0.2.2
}
define host{
        use                     generic-switch
        host_name               switch3
        address                 192.0.2.3
}