Выполнение скриптов при создании и удалении объектов
Система может выполнять скрипты при создании или удалении объектов того или иного класса. Этим скриптам можно передавать аргументы, настраиваемые через web-интерфейс.
Каждый такой скрипт состоит из двух файлов:
-
исполняемый файл;
-
файл конфигурации, описывающий web-интерфейс вкладки Триггеры для передачи аргументов исполняемому файлу.
Файл конфигурации должен:
-
находиться в одной папке с исполняемым файлом;
-
иметь название исполняемого файла с дополнительным расширением .conf:
/opt/saymon-extensions/entity-triggers-path/myscript.sh
/opt/saymon-extensions/entity-triggers-path/myscript.sh.conf
Исполняемые файлы скриптов можно группировать в подкаталогах с любым уровнем вложенности:
/opt/saymon-extensions/entity-triggers-path/for_host/script_1.sh
/opt/saymon-extensions/entity-triggers-path/for_host/script_1.sh.conf
/opt/saymon-extensions/entity-triggers-path/for_memory/script_1.sh
/opt/saymon-extensions/entity-triggers-path/for_memory/script_1.sh.conf
/opt/saymon-extensions/entity-triggers-path/for_router/script_1.sh
/opt/saymon-extensions/entity-triggers-path/for_router/script_1.sh.conf
При добавлении или модификации скриптов все изменения применяются автоматически - достаточно обновить страницу в браузере.
Каталог для скриптов
Каталог скриптов задается в конфигурационном файле сервера /etc/saymon/saymon-server.conf
.
Необходимо:
-
Добавить в файл секцию custom_scripts.
-
В параметре entity_triggers_path задать полный путь до папки со скриптами.
... "custom_scripts": { "entity_triggers_path": "/opt/saymon-extensions/entity-triggers-path" }, ...
-
Перезапустить сервер:
$ sudo service saymon-server restart
Параметры скриптов
Параметры скрипта задаются в JSON-файле, именуемом как имя_исполняемого_файла.conf. Например, для скрипта myScript.sh файл настроек параметров должен называться myScript.sh.conf.
Конфигурационный файл должен располагаться в одном каталоге с исполняемым файлом.
Скрипты без конфигурационного файла игнорируются. |
Файл настроек параметров может содержать следующий набор полей:
Поле | Описание | ||
---|---|---|---|
title |
Имя скрипта, отображаемое в web-интерфейсе в списках скриптов. Опциональное поле. По умолчанию в качестве имени отображается идентификатор скрипта, генерируемый сервером из пути и имени скрипта:
|
||
args |
Настройки аргументов, которые задаются пользователем через web-интерфейс и передаются исполняемому файлу. |
||
Имя аргумента, передаваемое исполняемому файлу. Опциональное поле. |
|||
Значение аргумента по умолчанию, подставляемое в соответствующее поле. Опциональное поле. |
|||
Описание аргумента, отображаемое в web-интерфейсе. Опциональное поле. |
|||
Название аргумента, отображаемое в web-интерфейсе. |
|||
Применимо только для типа select (args.type.select). Определяет набор значений, отображаемых в выпадающем списке. По умолчанию при создании проверки выбирается первая опция. Чтобы установить иную опцию значением по умолчанию, необходимо указать значение поля args.options.value в поле args.default. Исполняемому файлу передаются:
Если args.id не задано, то исполняемому файлу передаётся только значение выбранного аргумента (args.options.value). Если значение аргумента не задано (args.options.value), то исполняемому файлу также не передаётся имя аргумента (args.id).
|
|||
Описание значения аргумента, отображаемое в выпадающем списке. Опциональное поле. По умолчанию отображается значение аргумента (args.options.value). |
|||
Значение аргумента. Опциональное поле. При отсутствии значения исполняемому файлу также не передаётся имя аргумента. Такие опции можно использовать для реализации пункта "Не выбрано" и разделителей в выпадающем списке. |
|||
Признак обязательности заполнения значения аргумента.
По умолчанию - false. |
|||
Тип значения аргумента. Опциональное поле. По умолчанию - text. |
|||
Переключатель. По умолчанию выключен. При включении исполняемому файлу передаётся значение, указанное в поле args.id (имя аргумента). Если это поле отсутствует, то исполняемому файлу передаётся порядковый номер аргумента (отсчёт начинается с 0). |
|||
Отображает текстовое поле для ввода значения аргумента с маскировкой введённых символов. |
|||
Отображает выпадающий список с предопределёнными значениями аргумента. Список значений задается в поле args.options. Для данного типа не отображается описание аргумента (поле args.description). Вместо этого необходимо использовать соответствующее поле для каждого значения аргумента (args.options.description). |
|||
Отображает текстовое поле для ввода значения аргумента. |
|||
Отображает текстовое поле для ввода значения аргумента. Позволяет вводить многострочный текст. |
Пример скрипта
Для демонстрации работы функционала скриптов и различных типов аргументов мы подготовили два файла.
-
Разместите их в каталоге скриптов.
-
Настройте выполнение скрипта "Custom script example" при создании или удалении объекта любого класса во вкладке Триггеры.
-
Задайте значения аргументов.
-
Создайте или удалите объект выбранного класса.
Исполняемый файл скрипта записывает все переданные в него аргументы в файл output:
#!/bin/bash
#
# Use this script as the custom one
# to check or test arguments configuration file.
i=0
echo "Script got the following args:"
for arg in $*
do
i=$((i + 1))
echo -ne $arg >> /opt/saymon-extensions/entity-triggers-path/myselect/output; echo -ne " " >> /opt/saymon-extensions/entity-triggers-path/myselect/output
done
if [ $i = 0 ]
then
echo "(no args)" >> /opt/saymon-extensions/entity-triggers-path/myselect/output
exit 2
fi
В этом конфигурационном файле приведены примеры для всех типов аргументов:
{
"title": "Custom script example",
"args": [
{
"name": "Unnamed (positional) arg"
},
{
"name": "Named arg",
"id": "--name"
},
{
"name": "Behold the description on the right",
"description": "Here I am!",
"id": "--description"
},
{
"name": "Arg with default value",
"description": "and description",
"id": "--defval",
"default": "default_value"
},
{
"name": "Required arg",
"description": "This field is required to fill in",
"id": "--required",
"required": true
},
{
"name": "Type - Text",
"description": "This and all above fields have got text type",
"id": "--text",
"type": "text"
},
{
"name": "Type - Text Area",
"description": "This field is text area. \nIt is resizable in most browsers. \nAnd allows to enter multiline texts.",
"id": "--textarea",
"type": "textarea"
},
{
"name": "Type - Checkbox",
"description": "This is the checkbox type",
"id": "--checkbox",
"type": "checkbox"
},
{
"name": "Type - Password",
"description": "This is the password field",
"id": "--pass",
"default": "qwerty",
"type": "password"
},
{
"name": "Type - Select",
"description": "This is the select type. This description is not displayed in the web interface. Use description for each option instead.",
"id": "--select",
"default": "option2",
"type": "select",
"options": [
{
"description": "== Not selected =="
},
{
"value": "option1", "description": "OK"
},
{
"description": "== Divider =="
},
{
"value": "option2", "description": "Warning"
},
{
"value": "option3", "description": "Error"
}
]
}
]
}