Задачи
Задача — это сценарий, управляющий применением состояния (SLS) на одном или нескольких миньонах.
Для создания задач в Salt.Box используются шаблоны задач, загружаемые из репозиториев SLS.
О подключении репозиториев и перечне доступных шаблонов см. разделы онлайн-документации:
Шаблоны задач
Репозитории SLS
Создание задачи
Выбор адресатов задачи
Создание задач в Salt.Box осуществляется со страницы миньонов (переход на страницу — через пункт Minions
главного меню).
В Salt.Box действует алгоритм, по которому при создании задачи определяются целевые миньоны (т.е. миньоны, на которых будет выполняться задача):
-
Все миньоны текущей активной (выбранной пользователем из числа доступных ему) коллекции
(этот вариант применяется по умолчанию)
-
Все миньоны, отобранные фильтром, применённым к исходной коллекции
-
Миньоны, выбранные пользователем из результата применения фильтра к исходной коллекции
На Рис. 1 показан пример, в котором пользователем выбрана корневая коллекция миньонов root collection
, к этой коллекции применён фильтр по полю Minion ID
, а из результата применения фильтра выбрана группа миньонов (миньоны отмечены пользователем флажками).
![]() |
---|
Выбор шаблона задачи и ввод общих параметров задачи
Выберите нужный шаблон.
Если список шаблонов пуст, синхронизируйте шаблоны, как указано в разделе Шаблоны задач.
Укажите общие параметры задачи, как показано на Рис. 2.
В таблице 1 приведено описание общих параметров задачи.
Все параметры, кроме Salt Masters
, являются обязательными.
![]() |
---|
Таблица 1. Перечень общих параметров задачи
Параметр | Описание |
---|---|
Task Template | Используемый шаблон задачи |
Salt Masters | Ограничение на исполняющие мастер-серверы:
|
Batch Size | Размер «окна» выполнения (максимальное количество одновременно выполняемых задач). Значение 0 — без ограничений |
Max Retries | Количество попыток выполнения задачи в случае недачного завершения |
Ввод параметров, определённых в шаблоне
Состав параметров, определённых в шаблоне, зависит от соответствующего ему файла SLS.
На Рис. 3 показан пример набора параметров, определённых в выбранном пользователем шаблоне Package Install
.
![]() |
---|
Подтверждение создания задачи
После ввода параметров нажмите кнопку Create Task
.
Будет создана задача, откроется карточка задачи Рис. 4.
Первоначальный статус новой задачи — “created”.
Карточка задачи
![]() |
---|
Карточка задачи состоит из двух блоков:
- блок атрибутов задачи Рис. 4 [1]
перечень атрибутов задачи приведён в таблице 2
- блок выполнения задачи
- вкладка
Minions
Рис. 4 [2]на вкладке отображается список обработанных адресатов (миньонов, на которых запущена задача)
- вкладка
Jobs
Рис. 4 [3]на вкладке отображается список команд, выполненных в составе задачи
- вкладка
Job Returns
Рис. 4 [4]на вкладке отображается список JSON-выражений — результатов выполнения команд на миньонах
- вкладка
Атрибут | Описание |
---|---|
Status | Статус задачи |
Created | Время создания задачи |
Pending Jobs | Количество команд, ожидающих выполнения |
Processed Jobs | Количество команд, выполненных в составе задачи |
Processed Minions | Количество миньонов, на которых выполнялась задача |
Failed Minions | Количество миньонов, на которых задача завершилась с ошибкой |
Порядок выполнения и статусы задачи
Граф выполнения задачи
На Рис. 5 показан граф выполнения задачи.
Условия переходов между статусами задачи, выполняемых автоматически либо при определённых действиях пользователя, приведены в таблице 3.
Таблица 3. Таблица переходов графа выполнения задачи
Метка дуги | Условие перехода |
---|---|
1 | Пользователь нажал кнопку Run |
2 | Пользователь нажал кнопку Stop |
3 | Система выполнила все необходимые операции для остановки |
4 | Пользователь нажал кнопку Run |
5 | Задача выполнена успешно. Для текущей задачи созданы задачи пост-обработки |
6 | Пользователь нажал кнопку Stop в дочерней задаче, запущенной при пост-обработке текущей задачи |
7 | Пользователь нажал кнопку Run (возобновил выполнение) в дочерней задаче, запущенной при пост-обработке текущей задачи |
8 | Пост-обработка текущей задачи завершена успешно |
9 | Задача выполнена успешно. Для текущей задачи не созданы задачи пост-обработки |
Граф выполнения команды в составе задачи
Под командой в составе задачи подразумевается объект Salt.Box, объединяющий и управляющий выполнением множества единичных команд — SaltStak Job, отправляемых на отдельные миньоны, попавшие в нацеливание.
Каждый отдельный миньон формирует собственный ответ Job Return с результатом выполнения SaltStak Job.
Результирующий статус команды в составе задачи зависит, таким образом, от того, выполнены ли все команды на отдельных миньонах успешно.
На Рис. 6 показан граф выполнения команды в составе задачи.
Условия переходов между статусами команды приведены в таблице 4.
Таблица 4. Таблица переходов графа выполнения команды в составе задачи
Метка дуги | Условие перехода |
---|---|
1 | Получено подтверждение от salt-master о создании SaltStack Job. Ожидаются ответы Job Return |
2 | Получены все Job Return, все успешны |
3 | Получены все Job Return, есть ответы с ошибками |
Граф выполнения команды на отдельном миньоне
На Рис. 7 показан граф выполнения команды при её выполнении на отдельном миньоне.
Условия переходов между статусами команды приведены в таблице 5.
Таблица 5. Таблица переходов графа выполнения команды на отдельном миньоне
Метка дуги | Условие перехода |
---|---|
1 | От salt-master получено подтверждение о создании SaltStack Job, миньон попал в нацеливание.Ожидается ответ Job Return по миньону |
2 | Получен успешный Job Return по миньону |
3 | Получен отрицательный Job Return по миньону |
4 | От salt-master получено подтверждение о создании SaltStack Job, но миньон по какой-то причине не попал в нацеливание |
Диаграмма выполнения задачи
...
Таблица 6. Переходы (взаимодействия) на диаграмме выполнения задачи№ взаимодействия | Описание |
---|---|
1 | Если множество миньонов-адресатов задачи задано с помощью compound-нацеливания, и в то же время указан хотя бы один из параметров: Batch size или max. jobs — максимальное количество команд, которые могут выполняться одновременно, то перед созданием команд будет выполнено преобразование цели в набор списков миньонов, по Batch size миньонов в каждом. |
2 | Создание команд Salt.Box. Сначала будет создано max. jobs команд, последующие команды будут создаваться по мере выполнения созданных ранее команд. |
3 | Каждая созданная команда Salt.Box выполняет вызов службы salt-master , которая генерирует событие типа job : salt/job/<JID>/new . |
4 | Созданные события salt/job/<JID>/new публикуется на встроенной шине ZeroMQ. |
5, 6, 7, 8 | На диаграмме меткой "Minions of some Job #X" обозначена группа миньонов, являющихся целями одной (взятой произвольно) команды (Job #X), созданной на шаге №2. Аналогично, меткой "Minions of some Job #Y" обозначена группа миньонов-целей некоей другой команды (Job #Y). Обе группы содержат Batch size миньонов.Меткой "SaltStak job delivered" на диаграмме обозначены моменты получения миньонами команды, опубликованной на шине ZeroMQ. Моменты получения команды асинхронны вследствие разного времени реакции миньонов. На диаграмме в качестве примера показано, что миньоны группы "Minions of some Job #Y" получают команды позже миньонов группы "Minions of some Job #X", и существенно позже публикуют ответы (не показаны в пределах диаграммы). |
9, 10 | После выполнения команды каждый миньон отправляет на шину ZeroMQ ответ ("Job Return") |
11 | Ответ последнего миньона группы "Minions of some Job #X" (т.е. ответ, опубликованный на шине последним). |
12, 13 | Обратная цепочка передачи ответов миньонов от SaltStack к Salt.Box |
14 | Обработчик событий задачи получает сигнал о том, что все миньоны команды Job #X отправили ответы (либо не ответили по таймауту). |
15 | Сигнал об окончании выполнения команды Job #X инициирует создание очередной команды со следующей группой из Batch size миньонов-адресатов.Таким образом обеспечивается одновременное выполнение не более max. jobs команд. |
16 | Вновь созданная команда Salt.Box выполняет вызов службы salt-master , которая генерирует событие типа job : salt/job/<JID>/new . |
17 | Событие salt/job/<JID>/new публикуется на встроенной шине ZeroMQ. |