Выполнение скриптов при создании и удалении объектов

Выполнение скриптов при создании и удалении объектов

Выполнение скриптов при создании и удалении объектов ​

Система может выполнять скрипты при создании или удалении объектов того или иного класса. Этим скриптам можно передавать аргументы, настраиваемые через web-интерфейс.

Каждый такой скрипт состоит из двух файлов:

  • исполняемый файл;
  • файл конфигурации, описывающий web-интерфейс вкладки Триггеры для передачи аргументов исполняемому файлу.

Файл конфигурации должен:

  • находиться в одной папке с исполняемым файлом;
  • иметь название исполняемого файла с дополнительным расширением .conf:
ini
/opt/saymon-extensions/entity-triggers-path/myscript.sh
/opt/saymon-extensions/entity-triggers-path/myscript.sh.conf

Исполняемые файлы скриптов можно группировать в подкаталогах с любым уровнем вложенности:

ini
/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.

Необходимо:

  1. Добавить в файл секцию custom_scripts.
  2. В параметре entity_triggers_path задать полный путь до папки со скриптами.

... "custom_scripts": { "entity_triggers_path": "/opt/saymon-extensions/entity-triggers-path" }, ... 3. Перезапустить сервер:

$ sudo service saymon-server restart

Параметры скриптов ​

Параметры скрипта задаются в JSON-файле, именуемом как имя_исполняемого_файла.conf. Например, для скрипта myScript.sh файл настроек параметров должен называться myScript.sh.conf.

Конфигурационный файл должен располагаться в одном каталоге с исполняемым файлом.

NOTE

Скрипты без конфигурационного файла игнорируются.

Файл настроек параметров может содержать следующий набор полей:

ПолеОписание
title
Имя скрипта, отображаемое в web-интерфейсе в списках скриптов.

Опциональное поле.

По умолчанию в качестве имени отображается идентификатор скрипта, генерируемый сервером из пути и имени скрипта:

путь к файлу: <путь до папки со скриптами>/cpu/script_1.sh

отображаемое имя: cpu - script_1

| | | | args | Настройки аргументов, которые задаются пользователем через web-интерфейс и передаются исполняемому файлу. | | | | args.id | Имя аргумента, передаваемое исполняемому файлу.

Опциональное поле. | | | | args.default | Значение аргумента по умолчанию, подставляемое в соответствующее поле.

Опциональное поле. | | | | args.description | Описание аргумента, отображаемое в web-интерфейсе.

Опциональное поле. | | | | args.name | Название аргумента, отображаемое в web-интерфейсе. | | | | args.options | Применимо только для типа select (args.type.select).

Определяет набор значений, отображаемых в выпадающем списке.

По умолчанию при создании проверки выбирается первая опция. Чтобы установить иную опцию значением по умолчанию, необходимо указать значение поля args.options.value в поле args.default.

Исполняемому файлу передаются:

имя аргумента (args.id),

значение аргумента (args.options.value).

Если args.id не задано, то исполняемому файлу передаётся только значение выбранного аргумента (args.options.value).

Если значение аргумента не задано (args.options.value), то исполняемому файлу также не передаётся имя аргумента (args.id).

Данную логику можно использовать для реализации пункта "Не выбрано" и разделителей в выпадающем списке.

| | Данную логику можно использовать для реализации пункта "Не выбрано" и разделителей в выпадающем списке. | | | Данную логику можно использовать для реализации пункта "Не выбрано" и разделителей в выпадающем списке. | | | | args.options.description | Описание значения аргумента, отображаемое в выпадающем списке.

Опциональное поле.

По умолчанию отображается значение аргумента (args.options.value). | | | | args.options.value | Значение аргумента.

Опциональное поле.

При отсутствии значения исполняемому файлу также не передаётся имя аргумента. Такие опции можно использовать для реализации пункта "Не выбрано" и разделителей в выпадающем списке. | | | | args.required | Признак обязательности заполнения значения аргумента.

true - значение обязательно,

false - значение опционально.

Опциональное поле.

По умолчанию - false. | | | | args.type | Тип значения аргумента.

Опциональное поле.

По умолчанию - text. | | | | args.type.checkbox | Переключатель.

По умолчанию выключен.

При включении исполняемому файлу передаётся значение, указанное в поле args.id (имя аргумента). Если это поле отсутствует, то исполняемому файлу передаётся порядковый номер аргумента (отсчёт начинается с 0). | | | | args.type.password | Отображает текстовое поле для ввода значения аргумента с маскировкой введённых символов. | | | | args.type.select | Отображает выпадающий список с предопределёнными значениями аргумента.

Список значений задается в поле args.options.

Для данного типа не отображается описание аргумента (поле args.description). Вместо этого необходимо использовать соответствующее поле для каждого значения аргумента (args.options.description). | | | | args.type.text | Отображает текстовое поле для ввода значения аргумента. | | | | args.type.textarea | Отображает текстовое поле для ввода значения аргумента.

Позволяет вводить многострочный текст. | | |

Пример скрипта ​

Для демонстрации работы функционала скриптов и различных типов аргументов мы подготовили два файла.

  1. Разместите их в каталоге скриптов.
  2. Настройте выполнение скрипта "Custom script example" при создании или удалении объекта любого класса во вкладке Триггеры.
  3. Задайте значения аргументов.
  4. Создайте или удалите объект выбранного класса.

Исполняемый файл скрипта записывает все переданные в него аргументы в файл output:

bash
#!/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

В этом конфигурационном файле приведены примеры для всех типов аргументов:

json
{
    "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"
                }
            ]
        }
    ]
}