Перейти к основному содержимому

Задачи

Задача — это сценарий, управляющий применением состояния (SLS) на одном или нескольких миньонах.
Для создания задач в Salt.Box используются шаблоны задач, загружаемые из репозиториев SLS.

к сведению

О подключении репозиториев и перечне доступных шаблонов см. разделы онлайн-документации:
Шаблоны задач
Репозитории SLS

Создание задачи

Выбор адресатов задачи

Создание задач в Salt.Box осуществляется со страницы миньонов (переход на страницу — через пункт Minions главного меню).

В Salt.Box действует алгоритм, по которому при создании задачи определяются целевые миньоны (т.е. миньоны, на которых будет выполняться задача):

  1. Все миньоны текущей активной (выбранной пользователем из числа доступных ему) коллекции

    (этот вариант применяется по умолчанию)

  2. Все миньоны, отобранные фильтром, применённым к исходной коллекции

  3. Миньоны, выбранные пользователем из результата применения фильтра к исходной коллекции

На Рис. 1 показан пример, в котором пользователем выбрана корневая коллекция миньонов root collection, к этой коллекции применён фильтр по полю Minion ID, а из результата применения фильтра выбрана группа миньонов (миньоны отмечены пользователем флажками).

Выбор адресатов новой задачи
Рисунок 1. Выбор адресатов новой задачи

Выбор шаблона задачи и ввод общих параметров задачи

Выберите нужный шаблон.
Если список шаблонов пуст, синхронизируйте шаблоны, как указано в разделе Шаблоны задач.

Укажите общие параметры задачи, как показано на Рис. 2.
В таблице 1 приведено описание общих параметров задачи.
Все параметры, кроме Salt Masters, являются обязательными.

Диалоговое окно создания задачи
Рисунок 2. Диалоговое окно создания задачи


Таблица 1. Перечень общих параметров задачи
ПараметрОписание
Task TemplateИспользуемый шаблон задачи
Salt MastersОграничение на исполняющие мастер-серверы:
  • если параметр указан, то задача будет выполняться только на целевых миньонах, зарегистрированных на указанном мастере
  • если параметр не указан, то задача будет выполняться на целевых миньонах вне зависимости от того, на каком мастере они зарегистрированы
Batch SizeРазмер «окна» выполнения (максимальное количество одновременно выполняемых задач).
Значение 0 — без ограничений
Max RetriesКоличество попыток выполнения задачи в случае недачного завершения

Ввод параметров, определённых в шаблоне

Состав параметров, определённых в шаблоне, зависит от соответствующего ему файла SLS.
На Рис. 3 показан пример набора параметров, определённых в выбранном пользователем шаблоне Package Install.

Ввод параметров, определённых в шаблоне
Рисунок 3. Ввод параметров, определённых в шаблоне

Подтверждение создания задачи

После ввода параметров нажмите кнопку Create Task.
Будет создана задача, откроется карточка задачи Рис. 4.
Первоначальный статус новой задачи — “created”.

Карточка задачи

Карточка задачи
Рисунок 4. Карточка задачи


Карточка задачи состоит из двух блоков:

  • блок атрибутов задачи Рис. 4 [1]

    перечень атрибутов задачи приведён в таблице 2

  • блок выполнения задачи
    • вкладка Minions Рис. 4 [2]

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

    • вкладка Jobs Рис. 4 [3]

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

    • вкладка Job Returns Рис. 4 [4]

      на вкладке отображается список JSON-выражений — результатов выполнения команд на миньонах

Таблица 2. Перечень атрибутов задачи
АтрибутОписание
StatusСтатус задачи
CreatedВремя создания задачи
Pending JobsКоличество команд, ожидающих выполнения
Processed JobsКоличество команд, выполненных в составе задачи
Processed MinionsКоличество миньонов, на которых выполнялась задача
Failed MinionsКоличество миньонов, на которых задача завершилась с ошибкой

Порядок выполнения и статусы задачи

Граф выполнения задачи

На Рис. 5 показан граф выполнения задачи.

Условия переходов между статусами задачи, выполняемых автоматически либо при определённых действиях пользователя, приведены в таблице 3.

Рисунок 5. Граф выполнения задачи

Таблица 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.

Рисунок 6. Граф выполнения команды в составе задачи

Таблица 4. Таблица переходов графа выполнения команды в составе задачи
Метка
дуги
Условие перехода
1Получено подтверждение от salt-master о создании SaltStack Job. Ожидаются ответы Job Return
2Получены все Job Return, все успешны
3Получены все Job Return, есть ответы с ошибками

Граф выполнения команды на отдельном миньоне

На Рис. 7 показан граф выполнения команды при её выполнении на отдельном миньоне.

Условия переходов между статусами команды приведены в таблице 5.

Рисунок 7. Граф выполнения команды на отдельном миньоне

Таблица 5. Таблица переходов графа выполнения команды на отдельном миньоне
Метка
дуги
Условие перехода
1От salt-master получено подтверждение о создании SaltStack Job, миньон попал в нацеливание.
Ожидается ответ Job Return по миньону
2Получен успешный Job Return по миньону
3Получен отрицательный Job Return по миньону
4От salt-master получено подтверждение о создании SaltStack Job, но миньон по какой-то причине не попал в нацеливание

Диаграмма выполнения задачи

Рисунок 8. Диаграмма выполнения задачи

...

Таблица 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.