Раздел для создания шаблонов конфигурации на группу устройств. Шаблоны — последовательность CLI-команд для внесения изменений в конфигурацию оборудования. Эти команды будут применяться к оборудованию в том виде и в той последовательности, в которой они записаны в шаблоне.

Для оборудования некоторых линеек ESR и MES перед выполнением шаблона автоматически происходит переход в режим конфигурирования с последующим сохранением и подтверждением конфигурации.

В шаблонах имеется поддержка шаблонизатора Jinja2 с возможностью использования системных и пользовательских переменных и различных управляющих конструкций (операторы ветвления, циклы, фильтры и т. д.).


Повторное применение одного и того же шаблона к оборудованию может внести нежелательные изменения в конфигурацию.

На странице отображаются:

  1. Кнопки фильтрации и обновления таблицы с шаблонами;
  2. Кнопки создания и удаления шаблонов;
  3. Таблица шаблонов;
  4. Область просмотра шаблона, выбранного в таблице;
  5. Кнопка редактирования шаблона, открытого для просмотра;
  6. Кнопка включения/выключения подсветки синтаксиса;
  7. Кнопка открытия краткого руководства по синтаксису шаблонов.

Создание шаблона

Для создания шаблона нажмите кнопку "Создать": откроется форма создания шаблона:


Введите название шаблона, необходимые команды конфигурирования и нажмите "Создать". Новый шаблон появится в списке шаблонов.

Для просмотра шаблона нажмите на его название в таблице шаблонов. Его содержимое будет отображено в области просмотра:

Для редактирования шаблона выберите его в списке шаблонов и нажмите кнопку "Редактировать". Откроется форма редактирования шаблона:

Для сохранения изменений нажмите на кнопку "Сохранить". Для отмены изменений и возврата к последнему сохраненному состоянию нажмите на кнопку "Отменить".

Шаблонизатор

Переменные

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

Синтаксис определения пользовательской переменной в тексте шаблона:

{{ variable }}


Название переменной может содержать только буквы латинского алфавита, цифры и знаки подчеркивания. Название переменной обязательно должно начинаться с буквы. Также имя переменной чувствительно к регистру, поэтому variable и VARIable — это разные переменные.


Следует отличать синтаксис определения/использования пользовательской переменной {{ variable }} от синтаксиса статического присвоения переменной
{% set variable = "123" %}.

В первом случае внутри шаблона переменная не имеет никакого значения и поэтому будет проинтерпретирована как пользовательская. Для неё нужно будет задать значение в интерфейсе ЕССМ перед применением шаблона для группы устройств.

Во втором случае значение переменной статически задаётся прямо внутри шаблона и не может быть изменено извне, поэтому такая переменная не будет считаться пользовательской, и для неё нельзя будет задать значение в интерфейсе ЕССМ.

Переменные в шаблоне могут быть как отдельностоящими (как в примере выше), так и вложенными в другие переменные. В примере ниже переменная ip вложена в переменную device. В таком случае device является scope-переменной (скоупом). Скоуп device не содержит собственное значение, а только агрегирует в себе другие переменные и аналогичные вложенные скоупы.

{{ device.ip }}


Все пользовательские переменные находятся в корневом скоупе, который не имеет имени, и поэтому доступ к переменным внутри него осуществляется без указания скоупа.

Также внутри шаблона доступен ряд предопределённых системных переменных. Значения для системных переменных подставятся при рендеринге шаблона (формировании по нему готовой конфигурации перед отправкой на устройство) автоматически. Переменные и их значения находятся в специальных агрегирующих скоупах:

Таким образом, переменные из скоупа group и device внутри шаблона будут принимать разные значения в зависимости от конкретного устройства, на которое применяется данный шаблон.

Типы пользовательских переменных

Шаблонизатор ЕССМ дает возможность гибко настраивать значения для пользовательских переменных.

Тип STATIC

Обычные переменные имеют тип по умолчанию STATIC, и их значения интерпретируются в шаблоне as-is. Задание типа переменных рассмотрено в разделе "Устройства" → "Заполнение переменных".

Тип SEQUENCE

В связи с тем, что при групповом конфигурировании большого количества устройств может возникнуть потребность динамически генерировать значения для определённых переменных, шаблонизатор ЕССМ предоставляет возможность настраивать для пользовательских переменных генерируемые последовательности. Такие переменные имеют явно задаваемый тип SEQUENCE (последовательность), и значения для них задаются в определённых форматах (будут рассмотрены ниже). 

Принцип работы и использования SEQUENCE-переменных

Генерируемая последовательность распределяет значения для переменной между шаблонами, применяемыми на разные устройства в рамках одной задачи на групповое конфигурирование. Переменная, имеющая тип SEQUENCE, в тексте шаблона интерполируется в единственное значение, которое будет варьироваться для разных устройств в конфигурируемой выборке.

Если для переменной указан тип SEQUENCE, то значение переменной должно быть задано в одном из следующих форматов (тип последовательности определится автоматически, исходя из формата):

1. <число> - <число> — числовая последовательность. Задаётся двумя целыми числами, разделёнными дефисом. Генерирует последовательность целых чисел в указанном диапазоне.

     Пример 1: 1 - 5 

     Будет создана последовательность из чисел 1, 2, 3, 4, 5

     Пример: 2 10 - 20 

     Будет создана последовательность из чисел 10, 11... 19

Значение 20 из последовательности осталось неиспользованным, так как длина последовательности больше, чем количество конфигурируемых устройств, и в ней остаются лишние значения.

2. <item1>, <item2>, ..., <itemN> — массив-последовательность. Задаётся произвольными значениями, разделёнными запятыми. Генерирует соответствующую последовательность из перечисленных элементов.

     Пример: value1, value2, 3, value4, abc

     Будет создана последовательность из значений value1, value2, 3, value4, abc

3. <ip> - <ip> — последовательность IP-адресов. Задаётся двумя IP-адресами, разделёнными дефисом. Генерирует последовательность IP-адресов из указанного замкнутого диапазона адресов.

     Пример: 192.168.0.1 - 192.168.0.4

     Будет создана последовательность из адресов 192.168.0.1, 192.168.0.2, 192.168.0.3, 192.168.0.4

4. <ip/prefix> или <ip/mask> — последовательность IP-адресов из указанной подсети. Задаётся IP-адресом и префиксом подсети либо IP-адресом и маской. Генерирует последовательность IP-адресов из указанной подсети., не включая broadcast и сам адрес подсети. Исключение — подсети /31 и /32, где в последовательность включаются все адреса.

В последовательность не будут включены broadcast и сам адрес подсети. Исключение — подсети /31 и /32, где в последовательность включаются все адреса.


     Пример 1: 192.168.1.0/24

     Будет создана последовательность из адресов 192.168.1.1, 192.168.1.2, ..., 192.168.1.254 (итого 254 адреса).

     Пример 2: 192.168.1.10/31

     Будет создана последовательность из адресов 192.168.1.10, 192.168.1.11 (итого 2 адреса).

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

Управляющие конструкции

Шаблонизатор Jinja2 поддерживает ряд стандартных управляющих конструкций: операторы ветвлений (if ... else), циклы (for), макросы, неблочные фильтры, функции, присвоения, математические и логические операторы. 

• Оператор ветвления if ... else:

{% if device.model = "ESR-10" %}
    hostname ESR-10
{% endif %}

• Оператор цикла for:

{% for snmp_community in device.snmp_communities %}
    snmp-server community "{{ snmp_community }}" ro
{% endfor %}

• Макрос:

{% macro network(name, ip_prefix) -%}
    object-group network {{ name }}
        ip prefix {{ ip_prefix }}
    exit
{%- endmacro %}

{{ network("LAN", "10.10.99.32/27") }}

• Прочие операторы и конструкции:

Пример задания внутришаблонной переменной:
{% set var = 'example' %}

Пример фильтра upper:
{{ var|upper }} -> EXAMPLE

Пример применения фильтра join на массиве:
{{ [1, 2, 3]|join('|') }} -> 1|2|3

Пример форматирования строки при помощи фильтра format:
{{ "%s, %s!"|format("Hello", "World") }} -> Hello, World!

Пример арифметических операций:
{{ (1 + 2) * 10 / 5 }} -> 6.0

Более подробно возможности и функции шаблонизатора Jinja2 рассмотрены на официальном сайте Jinja.

В силу технических особенностей реализации шаблонизатора в ECCM, некоторые более сложные конструкции, не приведенные в данном Руководстве, но доступные в нативной реализации Jinja2, могут не поддерживаться.