Плейбуки
В данном разделе представлен обзор структуры, принципов работы, процесса создания и выполнения плейбуков в системе. Управление плейбуками в системе осуществляется в разделе Экспертиза.
О плейбуках
Плейбуки — это наборы связанных сценариев, определяющих последовательность выполнения различных действий в системе.
Работа с плейбуком
Доступные операции над плейбуком:
Создание плейбука
Плейбук можно создать самостоятельно или импортировать в систему.
Чтобы создать плейбук:
-
Перейдите в раздел Экспертиза. Система отобразит список элементов экспертизы.
-
На панели инструментов нажмите на кнопку Создать и выберите из выпадающего списка пункт Плейбук.
-
Создайте плейбук, определив логику его работы.
Плейбук создается в файле формата YAML. Система отображает шаблон с полями, которые нужно заполнить для описания работы плейбука.
-
Нажмите на кнопку Опубликовать версию, чтобы сохранить изменения и опубликовать созданный плейбук. Система отобразит соответствующее уведомление. Новый плейбук появится в таблице раздела Экспертиза.
Чтобы плейбук стал доступен для запуска, его необходимо включить. Вы можете создать плейбук в виде черновика без публикации с помощью кнопки Сохранить черновик. Система отобразит соответствующее уведомление. Черновик появится в таблице раздела Экспертиза.
Запуск плейбука
После того как плейбук протестирован и сохранен, он готов к запуску.
Чтобы запустить плейбук:
-
Перейдите в раздел Экспертиза. Система отобразит список элементов экспертизы.
-
Нажмите на строку плейбука в списке. Система отобразит в правой части экрана карточку этого плейбука с подробной информацией о нем.
-
Убедитесь, что плейбук включен. Переключатель в карточке плейбука должен быть переведен в активное положение.
-
Нажмите на кнопку Запустить в карточке плейбука. Плейбук будет запущен.
| Плейбук можно также запустить из раздела Автоматизация → Запуски. |
Процесс выполнения плейбука в системе
-
Если у плейбука есть аргументы, после запуска плейбука отображается окно для ввода аргументов. Типы аргументов совпадают с типами переменных и зависят от языка плейбука.
-
После задания аргументов система преобразует их в формат JSON и передает плейбук на выполнение в воркер. При запуске плейбука система назначает ему специальный тег воркера. Нельзя смешивать этот тег с тегами, используемыми в Экспертизе для группировки плейбуков по бизнес-модели. Тег воркера, назначаемый плейбуку системой, указывает, какой конкретный воркер будет выполнять этот плейбук.
С помощью менеджера воркеров можно назначать определенным воркерам плейбуки для выполнения, например, по языкам, на которых они написаны, или по компонентам системы.
-
После получения плейбука воркер находит исходный код плейбука в сервисе экспертизы по идентификатору плейбука, анализирует его и преобразует в готовую для выполнения структуру.
Плейбук может включать различные виды модулей.
-
Для каждого отдельного модуля плейбука воркер создает отдельную задачу и выполняет следующие шаги:
-
Если необходимо отдельно установить определенные зависимости модуля, воркер производит установку зависимостей в рамках отдельной задачи. Установленные зависимости в дальнейшем хранятся на этом воркере. Они используются при последующих выполнениях модуля на этом воркере, что сокращает время работы.
-
После проверки наличия и установки зависимостей воркер проверяет, запускался ли этот модуль ранее с такими же параметрами и сохранились ли результаты этого запуска в кэше.
Если такие данные сохранены в кэше, воркер предоставит их, что ускорит выполнение процесса.
Пример
Модуль производит следующую трансформацию входных данных в выходные данные: принимает объемные входные данные, преобразует их в JSON-файл, ищет определенное поле и передает его на выход. Если такой модуль с такими параметрами уже ранее запускался, воркер попытается найти кэшированные данные и предоставить их, не тратя времени на запуск скрипта.
-
Если готовый результат не найден, задача передается на выполнение. Каждый воркер в отдельный момент времени выполняет только одну задачу.
-
Воркер запускает процесс с интерпретатором требуемого языка. В файловой системе в отдельной директории сохраняются все необходимые данные. Например, аргументы, ссылки на зависимости, необходимые для запуска и указанные пользователем переменные окружения.
-
Система помещает модуль в специальную оболочку, позволяющую через библиотеку playbooks_sdk бесшовно получать доступ к переменным, элементам экспертизы, запускам и интеграциям с другими сервисами.
-
Модуль выполняется.
-
-
После выполнения всех модулей воркер завершает процесс, кэширует результаты и удаляет директорию с артефактами работы, так как все необходимые данные уже сохранены. После этого воркер переходит в режим ожидания следующей задачи.
Становятся доступными результат выполнения плейбука и логи. В зависимости от результата выполнения плейбука статус его запуска изменяется на Выполнен или Ошибка.
Изменение плейбука
Чтобы изменить плейбук:
-
Перейдите в раздел Экспертиза. Система отобразит сведения об имеющихся элементах экспертизы.
-
Нажмите на строку плейбука в списке. Система отобразит в правой части экрана карточку с подробной информацией о плейбуке.
-
Нажмите на кнопку действий (
) в верхнем правом углу карточки и выберите опцию Изменить. Отобразится окно настроек плейбука.
Вы также можете открыть окно настроек с помощью кнопки в нижней части карточки:
-
Для опубликованной версии: нажмите на кнопку Просмотр в нижней части карточки. Система отобразит окно просмотра настроек элемента экспертизы. Нажмите на кнопку Изменить в правом нижнем углу окна.
-
Для черновика: нажмите на кнопку Изменить в нижней части карточки.
-
-
Внесите требуемые изменения в конфигурацию плейбука.
-
Нажмите на кнопку Обновить версию. Новая версия плейбука с измененной конфигурацией будет опубликована. Система отобразит соответствующее уведомление.
При публикации новой версии элемента экспертизы требуется увеличить его текущую версию в поле version.Вы можете сохранить измененную конфигурацию плейбука в виде черновика без публикации помощью кнопки Сохранить черновик. Конфигурация будет сохранена для дальнейшего редактирования. В этом случае в верхней части карточки плейбука будет отображаться предупреждение о наличии неопубликованных изменений.
Удаление плейбука
Чтобы удалить плейбук:
-
Перейдите в раздел Экспертиза. Система отобразит сведения об имеющихся элементах экспертизы.
-
Нажмите на строку плейбука в списке. Система отобразит в правой части экрана карточку с подробной информацией о плейбуке.
-
Нажмите на кнопку действий (
) в верхнем правом углу карточки и выберите опцию Удалить. Отобразится окно подтверждения удаления плейбука.
-
Нажмите на кнопку Удалить. Система удалит плейбук и отобразит соответствующее уведомление. Удаленный плейбук будет исключен из списка элементов экспертизы.
|
Вы также можете удалить группу элементов экспертизы. Для этого:
|
Структура RObject-схемы плейбука
Описание плейбука начинается с блока метаданных плейбука.
Блок настроек выполнения плейбука является необязательным.
Если поля, указанные в нем, заполнены, они являются значениями по умолчанию для соответствующих параметров самой задачи.
Поля метаданных
Запись метаданных включает следующие обязательные поля:
| Поле | Описание | Тип данных |
|---|---|---|
|
Уникальный идентификатор плейбука |
строка |
|
Тип элемента экспертизы. Для плейбука здесь всегда устанавливается значение |
перечисление |
|
Название. Допустимы строчные и прописные буквы латинского алфавита ( |
строка |
|
Версия плейбука в формате Semantic Versioning. |
строка |
Вы также можете добавить в метаданные любые другие поля, содержащие дополнительные сведения о плейбуке (например, поле author).
Поле input
Входные аргументы плейбука задаются в поле input. После запуска плейбука система отобразит поля, описанные в поле input и заполненные значениями по умолчанию.
Допустимые типы данных аргументов:
-
строка;
-
целое число;
-
объект. Аргумент этого типа содержит фиксированное число элементов. Каждый элемент является либо полем, содержащим данные строго определенного типа, либо методом, выполняющим операции над объектом. В аргументе можно ссылаться на ID конфигурации.
Структура поля input включает следующие поля:
| Поле | Описание | Тип данных |
|---|---|---|
|
Записи с описанием входных аргументов |
объект |
Поле properties
Структура поля properties включает описание полей входных аргументов:
| Поле | Описание | Тип данных |
|---|---|---|
|
ID схемы конфигурации, которая будет использоваться плейбуком. Указывается ID существующей схемы конфигурации в Экспертизе. Доступно только для типа данных "объект". |
объект |
|
Тип поля. В аргументе типа "объект" необходимо создать пользовательское описание массива аргументов. Допустимые типы данных аргументов:
|
перечисление |
|
Значение в поле, отображаемое по умолчанию. |
Зависит от типа поля, недоступно при типе |
|
Описание поля (отображается рядом с полем). |
строка |
|
Поле обязательно для заполнения. Значение обязательно должно быть передано. |
логическое |
|
Если в поле
|
Поле modules
Поле modules содержит массив модулей. Общая структура каждого модуля включает следующие поля:
| Поле | Описание | Тип данных | Обязательное поле |
|---|---|---|---|
|
Идентификатор модуля |
строка |
да |
|
Описание всех модулей, включенных в этот модуль, в заданной последовательности выполнения. Модуль может включать любое количество модулей разных типов. Поля модулей подробно описаны в статье Модули плейбуков. |
массив |
да |
|
Описание модуля сбоя, запускаемого в случае ошибки при выполнении модулей, описанных в поле |
объект |
нет |
|
Описание модуля. Может содержать необходимую пользователю информацию о работе и назначении модуля. |
строка |
нет |
|
Время ожидания перед началом выполнения модуля в секундах. Может использоваться, если по результатам выполнения предыдущего модуля система должна выполнить определенные действия (например, обновления). Позволяет задать время ожидания этого выполнения. Ознакомьтесь с описанием поля. |
объект |
нет |
|
Продолжение выполнения модуля при ошибке. Позволяет определить, будет ли продолжено выполнение модуля при возникновении ошибки. Доступные значения:
|
логическое |
нет |
|
Повторы выполнения модуля при его неуспешном выполнении. Позволяет настроить жестко или гибко заданное количество повторов выполнения модуля. |
объект |
нет |
|
Приоритетность выполнения модуля. В зависимости от важности задачи, выполняемой модулем, можно определить его приоритетность по сравнению с обработкой других элементов экспертизы. Возможные значения: от |
целое число |
нет |
|
Максимальное время выполнения модуля в секундах. Если время выполнения модуля превышает максимальное, модуль будет принудительно остановлен с ошибкой выполнения. |
целое число |
нет |
|
Остановка выполнения всех последующих модулей, если выражение, заданное в поле, возвращает значение |
логическое |
нет |
Поле sleep_secs
Структура поля sleep_secs включает следующие поля:
| Поле | Описание |
|---|---|
|
Формат времени ожидания. Может иметь одно из следующих значений:
|
|
Значение времени ожидания.
|
Пример настройки в статическом формате, задающей 10-секундное ожидание перед началом выполнения модуля.
# Настройка времени ожидания перед началом выполнения модуля.
sleep_secs:
# Статический формат.
type: static
# Количество секунд ожидания.
value: 10
Пример настройки в формате выражения JavaScript. Указанное выражение возвращает время ожидания перед началом выполнения плейбука.
# Настройка времени ожидания перед началом выполнения модуля.
sleep_secs:
# Формат выражения JS.
type: js
# Выражение JS.
value: flow_input.sleep + 100
Поле retry
Структура поля retry включает поля constant и exponential, определяющие условия повтора выполнения модуля в различных форматах.
Можно определить одно или оба условия. Если определены оба условия, сначала будет выполнено условие, заданное в поле constant.
| Поле | Описание | Тип данных |
|---|---|---|
|
Жестко заданный формат. Может использоваться, если внешние сервисы, к которым обращается модуль, доступны, но могут иногда возвращать ошибки в ответ на запросы. В таких случаях лучше задавать настройку повторных запросов через определенный фиксированный интервал. Если выбран этот формат, необходимо заполнить следующие поля:
|
объект |
|
Экспоненциальный формат. Может использоваться, если внешние сервисы, к которым обращается модуль, зависят от сетевого соединения. В таких случаях лучше выполнять повторные запросы через постоянно увеличивающийся интервал времени, ожидая появления сервиса в сети. Если выбран этот формат, необходимо заполнить следующие поля:
|
целое число или выражение |
Пример настройки в жестко заданном формате
Настройка задает 45 попыток повторного запуска и 67-секундный интервал между попытками повторного запуска.
# Настройка повторов выполнения модуля при его неуспешном выполнении.
retry:
# Жестко заданный формат.
constant:
# Количество попыток повторного запуска.
attempts: 45
# Интервал между попытками.
delay_secs: 67
Пример настройки в экспоненциальном формате
Согласно этой настройке первая повторная попытка будет выполнена через 12 сек. (3*4), вторая — через 48 сек. (3*4*4), а третья — через 192 сек. (3*4*4*4).
# Настройка повторов выполнения модуля при его неуспешном выполнении.
retry:
# Экспоненциальный формат.
exponential:
# Количество попыток повторного запуска.
attempts: 3
# Множитель, определяющий фактический интервал между попытками выполнения.
multiplier: 3
# Базовый интервал между попытками выполнения (сек.).
delay_secs: 4
Поле stop_after_if
Структура поля stop_after_if включает действия, определяющие, будет ли плейбук выполняться дальше.
Необходимо выбрать одно из действий.
| Поле | Описание | Тип данных |
|---|---|---|
|
Выражение на JavaScript, возвращающее логическое значение. Поддерживаются переменные и однострочные выражения. Возвращаемое значение определяет, будет ли остановлено выполнение будет ли остановлено выполнение модуля или плейбука:
|
логическое |
|
Возможные значения:
|
логическое |
Блок настроек выполнения плейбука
Блок включает следующие поля:
| Поле | Описание | Тип данных |
|---|---|---|
|
Необходимость выполнения родительского плейбука и текущего плейбука на одном и том же воркере. Используется, если текущий плейбук запускается в ходе выполнения определенного (родительского) плейбука. Если в родительском плейбуке не заполнено поле Возможные значения:
|
логическое |
|
Количество параллельных выполнений плейбука. Используется, если для корректной работы плейбука необходимо ввести это ограничение. Например, у сервера, к которому обращается задача при выполнении плейбука, может быть ограниченное количество входных соединений. Этот параметр позволяет ограничить количество выполняющихся экземпляров плейбука количеством входных соединений. В результате будет установлено разрешенное количество соединений для выполнений плейбука, а лимит превышен не будет. |
целое число |
|
Максимально допустимое время выполнения задачи в секундах при параллельном выполнении. Если оно превысит значение, указанное в этом поле, задача будет отменена. |
целое число |
|
Необходимость выполнения плейбука по результатам проверки определенного условия. Поле представлено выражением на языке JavaScript, которое выполняется до запуска плейбука, проверяет определенные условия и по результатам проверки возвращает логическое значение:
Поддерживаются переменные и однострочные выражения. Пример. В ходе выполнения плейбука предполагается его обращение к определенному сервису. Выражение может проверить доступность порта сервиса через утилиту |
логическое |
|
Немедленная отправка пользователю подтверждения о начале выполнения определенного модуля плейбука. Подтверждение содержит сообщение об успешном принятии запроса на выполнение модуля. Если у пользователя есть разрешение на просмотр запусков, в подтверждении отображается кнопка, позволяющая просмотреть статус обработки плейбука на странице запусков. Возможные значения: id модуля в плейбуке, о начале выполнения которого пользователь должен быть проинформирован. |
строка |
Поле failure_module
Структура поля failure_module содержит описание модуля обработки ошибок. Это скрипт, который запускается в случае ошибки выполнения плейбука.
В качестве входных данных скрипт принимает результат модуля, выполнение которого завершилось с ошибкой.
Система выводит результат обработки ошибки в логах запуска плейбука.
Из параметров, описанных в структуре модулей плейбука, в модуле обработки ошибок допустимо использование параметра retry.
Модуль failure_module имеет такую же структуру, как и другие модули, задаваемые в поле modules плейбука.
|
| Поле | Описание | Тип данных |
|---|---|---|
|
Позволяет пометить остановленный плейбук как пропущенный. Возможные значения:
|
логическое |
Создание плейбука
Для создания плейбука:
-
Опишите метаданные плейбука (
id,type,name,version).Пример заполненной структуры метаданных
id: playbook_new_version type: playbook name: playbook_new_version_name version: 1.0.0 -
Опишите содержимое плейбука в поле
body:-
Опишите блок входных аргументов в поле
input.Пример записей в поле
inputinput: # Блок, в котором перечисляются входные аргументы. properties: # Первый входной аргумент. employeename: # Тип первого входного аргумента. type: string # Описание первого входного аргумента. description: "Employee first name" # Значение первого входного аргумента по умолчанию. default: "default_employeename" # Аргумент является обяязательным. required: true # Второй входной аргумент. age: type: number default: 35 description: "Age description" -
Опишите в поле
modulesмодули требуемых типов. При запуске плейбука все описанные модули выполняются последовательно.Структура поля
modulesплейбука:modules: # Идентификатор первого модуля плейбука. - id: # Поле, содержащее описание первого модуля (скрипты, плейбуки, циклы со своими модулями и т.д.). body: # Тип первого модуля. type: # Под полем type располагаются записи полей, описывающие модуль выбранного типа. Набоор полей зависит от типа модуля. # Идентификатор второго модуля плейбука. - id: # Поле, содержащее описание второго модуля. body: # Тип второго модуля type: # И так далее. ...
-
-
При необходимости добавьте описания:
-
модуля сбоя
failure_moduleдля плейбука; -
блока настроек выполнения плейбука.
-
Пример плейбука
id: playbook_with_rawscript
name: Playbook with rawscript
description: Плейбук с модулем rawscript
version: 0.0.1
type: playbook
body:
input:
properties:
name_string:
type: string
description: ""
default: "1se"
modules:
- id: rawscript_module_x
body:
type: rawscript
input:
x: # Значение аргумента берется из name_string в переменной playbook_args.
type: js
expr: playbook_args.name_string
source: !py |
def main(x: str):
new_text = 'Текст для вывода ' + x
return(new_text)
retry:
constant:
attempts: 2
delay_secs: 5
- id: rawscript_module_y
body:
type: rawscript
input:
y: # Значение аргумента берется из name_string в переменной playbook_args.
type: js
expr: playbook_args.name_string
source: !bun |
function main(y: string): void {
const newText = 'Текст для вывода ' + y;
console.log(newText);
}
retry:
constant:
attempts: 2
delay_secs: 5
Специальные переменные
При работе с плейбуками можно использовать специальные переменные.
Цикл (forloop и whileloop)
Модуль цикла содержит другие модули и настройки, определяющие количество повторов их выполнения в определенном порядке. Воркер выполняет все модули, содержащиеся в цикле в соответствии с настройками цикла. На каждое повторное выполнение модуля в рамках цикла создается по крайней мере одна отдельная задача. Количество задач может быть больше, так как установка зависимостей требует создания отдельной задачи.
Ветвления (case)
Модуль ветвлений содержит другие модули и настройки, определяющие, при каких условиях модули будут выполняться. На каждое ветвление в рамках модуля создается по крайней мере одна отдельная задача. Количество задач может быть больше, так как установка зависимостей требует создания отдельной задачи.
Повторы запуска модулей и обработка ошибок
Если какой-либо модуль в составе плейбука выполняется с ошибкой, его можно перезапустить указанное количество раз с указанным интервалом, используя настройки расписания в параметрах запуска.
Если модуль запустить все же не удалось, плейбук попытается обработать ошибку с помощью специального модуля обработки ошибок.
Доступ к хранилищу данных
Когда плейбук запускается, система создает в специальном хранилище данных запись о запуске. Эти записи можно использовать в плейбуках, например, как условие срабатывания определенного правила. Каждая запись в хранилище имеет свой идентификатор (ID интеграции), на который пользователь может ссылаться в плейбуках.
Была ли полезна эта страница?