Графы
| Site: | Атом.Порт: портал изучения |
| Course: | Атом.Порт: портал изучения |
| Book: | Графы |
| Printed by: | |
| Date: | Saturday, 6 December 2025, 8:26 AM |
Description
Графы являются описаниями автоматизаций в системе Атом.Порт. Согласно им выполняются задачи конфигурирования удалённых компьютеров и сохраняется некоторая информация о них.
Документ разъясняет принятый синтаксис сериализации графов версии 2.
1. Введение
💾 Актуально для версии Атом.Порт:
63ef9982
Общие сведения
Язык конфигурации графов Атом.Порт — простой предметно-ориентированный язык на базе языка разметки YAML. Он предназначен для создания автоматизаций произвольной сложности. Язык описывает последовательный и условный вызов функции SaltStack.
В документе используются следующие синонимичные наименования типов:
- Список — sequence (последовательность).
- Словарь, объект — mapping (сопоставление).
Структура автоматизаций
Автоматизация Атом.Порт — это последовательность операций, всегда связанная с одной рабочей станцией. Описание последовательности операций называется графом Атом.Порт. Граф Атом.Порт представляет собой ориентированный взвешенный граф с истоком, называемым начальным узлом start и стоком, называемым конечным узлом end. Граф состоит из узлов (вершин), соединённых взвешенными ориентированными рёбрами (дугами). Вес дуги определяет выбор пути от истока к стоку и обратен по смыслу приоритету, т. е. выбирается путь с наименьшим весом. Таким образом, исполнение автоматизации представляет собой проход по графу от начальной до конечной вершины.
Пример абстрактного орграфа на рисунке. Зелёным обозначен путь от истока к стоку, числами веса рёбер.

Следствия такой структуры:
- Граф имеет один или более путей от начального узла к конечному.
- Некоторые вершины графа могут быть непосещёнными (т. е. связанные с такими вершинами никогда не будут выполнены) после прохода графа.
- Всегда выбирается путь с наименьшим общим весом. Вес дуи может изменяться в процессе прохода по графу. Так, дуга к узлу, отмеченному успешно пройденным, становится невесомой, т. е. её вес становится равным 0. Вес дуги к узлу, пройденному неуспешно, т. е. в случае неуспешного выполнения операции, становится бесконечным.
- Автоматизация, вес кратчайшего пути которого вырос до бесконечного, считается неуспешным: нет возможности достичь конечной вершины.
- В настоящее время циклы в пути не допускаются.
Операции могут быть как удалёнными действиями, выполняемыми посредствам вызова функций SaltStack, так и активностями сервера. Подробнее о типах операций см. главу об узлах.
Синтаксис
Один граф описывается одним конфигурационным файлом в формате ключ: значение. Сложные значения (списки и словари) задаются в виде блоков, выделямых равными пробельными отступами (в обычно 2 или 4 символа пробела):
список:
- значение_1
- значение_2
словарь:
ключ_1: значение
ключ_2: значение
Список содержит упорядоченные элементы, которые могут повторяться. Порядок ключей словаря не учитывается, ключи не должны повторяться.
Строчные литералы рекомендуется оборачивать одинарными (') или двойными (") кавычками для однозначности, хотя в большинстве случаев это не обязательно. Числовые и булевы литералы следует указывать без кавычек.
При выгрузке графов система составляет названия файлов из названия графа и суффикса «yaml». Такого же именования следует придерживатьяс при написании файлов графов вручную. В названиях графов желательно использовать латиницу без пробелов, например: install-packages. Файл следует (хотя и не обязательно) начинать со знака начала документа ---, за которым следуют параметры name и description , затем прочие ключевые слова, рассматриваемые далее.
О загрузке и выгрузке файлов графов средствами командного интерфейса можно узнать на странице, посвящённой служебным командам.
ауавававуРоCmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22%22%20style%3D%22edgeStyle%3DorthogonalEdgeStyle%3Brounded%3D0%3BorthogonalLoop%3D1%3BjettySize%3Dauto%3Bhtml%3D1%3BentryX%3D0%3BentryY%3D0.5%3BentryDx%3D0%3BentryDy%3D0%3Bcurved%3D1%3BfillColor%3D%23d5e8d4%3BstrokeColor%3D%2382b366%3BstrokeWidth%3D2%3B%22%20edge%3D%221%22%20source%3D%228%22%20target%3D%2211%22%20parent%3D%221%22%3E%3CmxGeometry%20relative%3D%221%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%223%22%20value%3D%2210%22%20style%3D%22edgeLabel%3Bhtml%3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3Bresizable%3D0%3Bpoints%3D%5B%5D%3B%22%20vertex%3D%221%22%20connectable%3D%220%22%20parent%3D%222%22%3E%3CmxGeometry%20x%3D%220.0512%22%20y%3D%22-2%22%20relative%3D%221%22%20as%3D%22geometry%22%3E%3CmxPoint%20as%3D%22offset%22%2F%3E%3C%2FmxGeometry%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%224%22%20style%3D%22edgeStyle%3DorthogonalEdgeStyle%3Brounded%3D0%3BorthogonalLoop%3D1%3BjettySize%3Dauto%3Bhtml%3D1%3BentryX%3D0%3BentryY%3D0.5%3BentryDx%3D0%3BentryDy%3D0%3Bcurved%3D1%3BfillColor%3D%23f5f5f5%3BstrokeColor%3D%23666666%3B%22%20edge%3D%221%22%20source%3D%228%22%20target%3D%2214%22%20parent%3D%221%22%3E%3CmxGeometry%20relative%3D%221%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%225%22%20value%3D%2225%22%20style%3D%22edgeLabel%3Bhtml%3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3Bresizable%3D0%3Bpoints%3D%5B%5D%3B%22%20vertex%3D%221%22%20connectable%3D%220%22%20parent%3D%224%22%3E%3CmxGeometry%20x%3D%220.0128%22%20y%3D%222%22%20relative%3D%221%22%20as%3D%22geometry%22%3E%3CmxPoint%20as%3D%22offset%22%2F%3E%3C%2FmxGeometry%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%226%22%20style%3D%22edgeStyle%3DorthogonalEdgeStyle%3Brounded%3D0%3BorthogonalLoop%3D1%3BjettySize%3Dauto%3Bhtml%3D1%3BentryX%3D0%3BentryY%3D0.5%3BentryDx%3D0%3BentryDy%3D0%3Bcurved%3D1%3BfillColor%3D%23f5f5f5%3BstrokeColor%3D%23666666%3B%22%20edge%3D%221%22%20source%3D%228%22%20target%3D%2219%22%20parent%3D%221%22%3E%3CmxGeometry%20relative%3D%221%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%227%22%20value%3D%22100%22%20style%3D%22edgeLabel%3Bhtml%3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3Bresizable%3D0%3Bpoints%3D%5B%5D%3B%22%20vertex%3D%221%22%20connectable%3D%220%22%20parent%3D%226%22%3E%3CmxGeometry%20x%3D%22-0.0597%22%20y%3D%223%22%20relative%3D%221%22%20as%3D%22geometry%22%3E%3CmxPoint%20as%3D%22offset%22%2F%3E%3C%2FmxGeometry%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%228%22%20value%3D%22%D0%98%D1%81%D1%82%D0%BE%D0%BA%22%20style%3D%22ellipse%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3Baspect%3Dfixed%3BfillColor%3D%23dae8fc%3BstrokeColor%3D%236c8ebf%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22120%22%20y%3D%22140%22%20width%3D%2280%22%20height%3D%2280%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%229%22%20value%3D%22%22%20style%3D%22edgeStyle%3DorthogonalEdgeStyle%3Brounded%3D0%3BorthogonalLoop%3D1%3BjettySize%3Dauto%3Bhtml%3D1%3BentryX%3D0.5%3BentryY%3D0%3BentryDx%3D0%3BentryDy%3D0%3Bcurved%3D1%3BfillColor%3D%23d5e8d4%3BstrokeColor%3D%2382b366%3BstrokeWidth%3D2%3B%22%20edge%3D%221%22%20source%3D%2211%22%20target%3D%2219%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%220.3336%22%20y%3D%22-10%22%20relative%3D%221%22%20as%3D%22geometry%22%3E%3CmxPoint%20as%3D%22offset%22%2F%3E%3C%2FmxGeometry%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2210%22%20value%3D%2210%22%20style%3D%22edgeLabel%3Bhtml%3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3Bresizable%3D0%3Bpoints%3D%5B%5D%3B%22%20vertex%3D%221%22%20connectable%3D%220%22%20parent%3D%229%22%3E%3CmxGeometry%20x%3D%22-0.2988%22%20y%3D%22-12%22%20relative%3D%221%22%20as%3D%22geometry%22%3E%3CmxPoint%20as%3D%22offset%22%2F%3E%3C%2FmxGeometry%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2211%22%20value%3D%22%E2%84%96%2001%22%20style%3D%22ellipse%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3Baspect%3Dfixed%3BfillColor%3D%23d5e8d4%3BstrokeColor%3D%2382b366%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22260%22%20y%3D%2240%22%20width%3D%2280%22%20height%3D%2280%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2212%22%20style%3D%22edgeStyle%3DorthogonalEdgeStyle%3Brounded%3D0%3BorthogonalLoop%3D1%3BjettySize%3Dauto%3Bhtml%3D1%3BentryX%3D0%3BentryY%3D0.5%3BentryDx%3D0%3BentryDy%3D0%3Bcurved%3D1%3BfillColor%3D%23f5f5f5%3BstrokeColor%3D%23666666%3B%22%20edge%3D%221%22%20source%3D%2214%22%20target%3D%2222%22%20parent%3D%221%22%3E%3CmxGeometry%20relative%3D%221%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2213%22%20value%3D%221%22%20style%3D%22edgeLabel%3Bhtml%3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3Bresizable%3D0%3Bpoints%3D%5B%5D%3B%22%20vertex%3D%221%22%20connectable%3D%220%22%20parent%3D%2212%22%3E%3CmxGeometry%20x%3D%220.0156%22%20y%3D%22-1%22%20relative%3D%221%22%20as%3D%22geometry%22%3E%3CmxPoint%20as%3D%22offset%22%2F%3E%3C%2FmxGeometry%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2214%22%20value%3D%22%E2%84%96%2003%22%20style%3D%22ellipse%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3Baspect%3Dfixed%3BfillColor%3D%23f5f5f5%3BstrokeColor%3D%23666666%3BfontColor%3D%23333333%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22260%22%20y%3D%22230%22%20width%3D%2280%22%20height%3D%2280%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2215%22%20style%3D%22edgeStyle%3DorthogonalEdgeStyle%3Brounded%3D0%3BorthogonalLoop%3D1%3BjettySize%3Dauto%3Bhtml%3D1%3BentryX%3D0%3BentryY%3D0.5%3BentryDx%3D0%3BentryDy%3D0%3Belbow%3Dvertical%3Bcurved%3D1%3BfillColor%3D%23f5f5f5%3BstrokeColor%3D%23666666%3B%22%20edge%3D%221%22%20source%3D%2219%22%20target%3D%2223%22%20parent%3D%221%22%3E%3CmxGeometry%20relative%3D%221%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2216%22%20value%3D%2215%22%20style%3D%22edgeLabel%3Bhtml%3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3Bresizable%3D0%3Bpoints%3D%5B%5D%3B%22%20vertex%3D%221%22%20connectable%3D%220%22%20parent%3D%2215%22%3E%3CmxGeometry%20x%3D%22-0.074%22%20y%3D%221%22%20relative%3D%221%22%20as%3D%22geometry%22%3E%3CmxPoint%20as%3D%22offset%22%2F%3E%3C%2FmxGeometry%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2217%22%20style%3D%22edgeStyle%3DorthogonalEdgeStyle%3Brounded%3D0%3BorthogonalLoop%3D1%3BjettySize%3Dauto%3Bhtml%3D1%3BentryX%3D0.5%3BentryY%3D0%3BentryDx%3D0%3BentryDy%3D0%3Bcurved%3D1%3BfillColor%3D%23d5e8d4%3BstrokeColor%3D%2382b366%3BstrokeWidth%3D2%3B%22%20edge%3D%221%22%20source%3D%2219%22%20target%3D%2222%22%20parent%3D%221%22%3E%3CmxGeometry%20relative%3D%221%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2218%22%20value%3D%225%22%20style%3D%22edgeLabel%3Bhtml%3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3Bresizable%3D0%3Bpoints%3D%5B%5D%3B%22%20vertex%3D%221%22%20connectable%3D%220%22%20parent%3D%2217%22%3E%3CmxGeometry%20x%3D%22-0.2247%22%20y%3D%22-11%22%20relative%3D%221%22%20as%3D%22geometry%22%3E%3CmxPoint%20as%3D%22offset%22%2F%3E%3C%2FmxGeometry%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2219%22%20value%3D%22%E2%84%96%2002%22%20style%3D%22ellipse%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3Baspect%3Dfixed%3BfillColor%3D%23d5e8d4%3BstrokeColor%3D%2382b366%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22360%22%20y%3D%22140%22%20width%3D%2280%22%20height%3D%2280%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2220%22%20style%3D%22edgeStyle%3DorthogonalEdgeStyle%3Brounded%3D0%3BorthogonalLoop%3D1%3BjettySize%3Dauto%3Bhtml%3D1%3BentryX%3D0%3BentryY%3D0.5%3BentryDx%3D0%3BentryDy%3D0%3Bcurved%3D1%3BfillColor%3D%23d5e8d4%3BstrokeColor%3D%2382b366%3BstrokeWidth%3D2%3B%22%20edge%3D%221%22%20source%3D%2222%22%20target%3D%2223%22%20parent%3D%221%22%3E%3CmxGeometry%20relative%3D%221%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2221%22%20value%3D%225%22%20style%3D%22edgeLabel%3Bhtml%3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3Bresizable%3D0%3Bpoints%3D%5B%5D%3B%22%20vertex%3D%221%22%20connectable%3D%220%22%20parent%3D%2220%22%3E%3CmxGeometry%20x%3D%22-0.1568%22%20y%3D%222%22%20relative%3D%221%22%20as%3D%22geometry%22%3E%3CmxPoint%20as%3D%22offset%22%2F%3E%3C%2FmxGeometry%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2222%22%20value%3D%22%E2%84%96%2004%22%20style%3D%22ellipse%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3Baspect%3Dfixed%3BfillColor%3D%23d5e8d4%3BstrokeColor%3D%2382b366%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22460%22%20y%3D%22230%22%20width%3D%2280%22%20height%3D%2280%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%2223%22%20value%3D%22%D0%A1%D1%82%D0%BE%D0%BA%22%20style%3D%22ellipse%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3Baspect%3Dfixed%3BfillColor%3D%23dae8fc%3BstrokeColor%3D%236c8ebf%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22600%22%20y%3D%22140%22%20width%3D%2280%22%20height%3D%2280%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3Eава
2. Общие ключевые слова
💾 Актуально для версии Атом.Порт:
63ef9982
Ключевые слова
Следующие ключевые слова допустимы на верхнем уровне файла графа.
| Значение | Обязательный | Тип | Семантика |
|---|---|---|---|
name |
✔ | Строка | Название графа. |
description |
✔ |
Строка | Человекочитаемое описание, допустимо пустое. |
groups |
Список строк | Группы, в которые включается граф. | |
parameters_schema |
Словарь | Декларация принимаемых параметров. | |
nodes |
Словарь | Описания узлов графа. | |
edges |
✔ | Список строк | Связи между узлами графа. |
schema_version |
Целое число | Указывает версию синтаксиса. |
groups
Список групп, в которые включается граф. Группы указываются в формате полного пути с правым слэшем в качестве разделителя, пример: Графы/Переход на отечественное ПО/Полный цикл.
parameters_schema
Описание принимаемых при запуске автоматизации параметров в формате JSON Schema. На основании этого объекта строится форма параметров на соответствующем экране запуска автоматизации.
👉 При указании необязательного параметра (определён список `required` и свойство выключено из него) без значения по умолчанию будет установлено значение по умолчанию для типа, например пустой список, пустой словарь или `false` для `bool`.
nodes, edges
Ключевые слова nodes, edges рассматриваются в следующих разделах.
schema_version
Параметр уточняет версию синтаксиса, который использован для описания графа. Обычно не требуется указывать вручную. Актуальная версия синтаксиса — 2.
3. Словарь узлов nodes
💾 Актуально для версии Атом.Порт:
63ef9982
Значение словаря nodes
Словарь узлов nodes содержит пары ключ-значение, где ключом является название определяемого узла, а значением — объект, определяющий свойства узла. Объект может содержать следующие поля (ключи):
| Поле | Обязательное | Тип | Значение |
|---|---|---|---|
description |
Строка | Человекочитаемое описание узла. | |
unit_type |
✔ | Строка | Тип узла. |
unit_data |
Словарь | Параметры, специфичные для данного unit_name. |
|
retry_limit |
Целое число | Количество повторных запусков узла в случае неуспешного выполнения до того, как узел будет помечен неуспешным 🔴. |
Типы узлов
Следующие типы узлов могут быть указаны в качестве значения поля unit_type.
UnitAutoProcess
Запускает другую автоматизации. Текущая автоматизация становится на паузу.
Допустимые ключи, которые передаются unit_kwarg узла:
| Поле | Обязательное | Тип | Значение |
|---|---|---|---|
graph_name |
✔ | Строка | Название графа, который будет запущен. |
timeout |
Целое число | Время ожидания автоматизации. Когда истекает, узел помечается неуспешным 🔴, если автоматизация ещё не выполнилась. |
UnitCommand
Запускает функций модулей исполнения SaltStack. Это основные узлы для конфигурирования рабочих станций
Допустимые ключи, которые передаются unit_data узла:
👉 При применении состояний функцией
state.applyдля передачи значений в формулу SaltStack используйте именованный аргументpillar, имеющий формат словаря.
UnitEnd
Завершает путь. Конечный узел, сток. Обычно инженеру не требуется определять узлы такого типа самостоятельно.
UnitFail
Безусловно устанавливает вес входящей дуги в бесконечность. Преимущественно для отладки.
UnitGroup
Добавляет и удаляет рабочую станцию из заданных групп.
Допустимые ключи, которые передаются unit_data узла:
| Поле | Обязательное | Тип | Значение |
|---|---|---|---|
groups |
* | Список строк | Группы для изменения, указываемые иерархическими именами вида /Родительская группа/Название целевой группы. |
action |
* | Строка [add|remove] |
Действие (добавить или удалить рабочую станцию из группы) |
UnitIF
Условный оператор, производящий сравнение переменных Атом.Порт и литералов. Устанавливает вес входящей дуги в зависимости от результата.
Допустимые ключи, которые передаются unit_data узла:
| Поле | Обязательное | Тип | Значение |
|---|---|---|---|
op |
* | Строка [eq|ne|gt|ge|lt|le|in|notin] |
Оператор для сравнения |
val_1 |
* | Литерал | Левый операнд, значение или путь идентификатор Атом.Порт |
val_2 |
* | Литерал | Правый операнд, значение или путь идентификатор Атом.Порт |
UnitMessage
Отправляет уведомление в Телеграм. Интеграция с мессенджером должна быть настроена.
Допустимые ключи, которые передаются unit_data узла:
| Поле | Обязательное | Тип | Значение |
|---|---|---|---|
message |
* | Строка | Текст сообщения |
UnitPause
Ожидает перед проходом дальше.
Допустимые ключи, которые передаются unit_data узла:
| Поле | Обязательное | Тип | Значение |
|---|---|---|---|
delay |
* | Целое число | Кол-во секунд для ожидания |
UnitRunner
Запускает функции модулей бегунков (раннеров) SaltStack.
Допустимые ключи, которые передаются unit_data узла: аналогично UnitCommand, однако function должнен указывать на функцию модуля бегунков, например state.orchestrate.
UnitSet
Устанавливает значения переменных Атом.Порт.
Допустимые ключи, которые передаются unit_data узла:
| Поле | Обязательное | Тип | Значение |
|---|---|---|---|
target |
* | строка | Идентификатор переменной Атом.Порт (доступно хранилище ключ-значение) |
value |
* | строка | Устанавливаемое значение |
UnitStart
Начинает путь. Начальный узел, исток. Обычно инженеру не требуется определять узлы такого типа самостоятельно.
UnitSystemMessage
Отправляет уведомление через интерфейс Атом.Порт.
Допустимые ключи, которые передаются unit_data узла:
| Поле | Обязательное | Тип | Значение |
|---|---|---|---|
message |
* | Строка | Текст сообщения |
message_type |
* | Целое число [1-4] |
Тип отправляемого уведомления |
UnitWaitingMinion
Ожидает доступности миньона указанного типа. Полезно при перезагрузке рабочей станции в другую операционную систему.
Допустимые ключи, которые передаются unit_data узла:
| Поле | Обязательное | Тип | Значение |
|---|---|---|---|
minion_type |
* | Строка [windows|linux|helper|active|master] |
Тип миньона рабочей станции, для которого запускается функция, см. UnitCommand |
timeout |
Целое число | Время ожидания миньона в секундах до того, как узел будет помечен неуспешным 🔴 | |
activity_timeout |
Целое число | Временно́е окно в секундах, учитывающее прошлую активность миньона. По умолчанию 120 сек. |
4. Список рёбер edges
💾 Актуально для версии Атом.Порт:
63ef9982
Значение списка edges
Список ориентированных рёбер (дуг) edges перечисляет связи между узлами, т. е. какой узел за каким следует и с каким весом. Вес обратным по значению приоритету, т. е. в первую очередь выбирается путь с наименьшим весом.
Поскольку файл описывает ориентированный граф со стоком и истоком, следующие правила применимы к связям между узлами:
- Должен быть путь
- Не должно быть узлов без исходящих
- Не должно быть узлов без входящих
Синтаксис
edges является списком строк. Каждая строка описывает одну дугу между узлами. Формат следующий:
УЗЕЛ_НАЧАЛО -> УЗЕЛ_КОНЕЦ [ОПЦИЯ=ЗНАЧЕНИЕ]
Таким образом, указываются название узла, из которого дуга выходит и через стрелку (составленную из знаков «минус» и «больше») и название узла, в который дуга входит. В квадратных скобках в конце переадются параметры. Единственным поддерживаемым параметром в текущей версии является начальным вес ребра weight, задаваемый целым положительным числом. Если вы желаете использовать вес по умолчанию (обычно 10), то допускается опустить запись параметров, пример:
node_install_packages -> node_reboot
Порядок следования описаний дуг не влияет на структуру графа, только на простоту его восприятия.
Пример списка рёбер
Такая форма записи содержит полную информацию о связях узлов и весах рёбер.
edges:
- start -> node1
- node1 -> node2
- node2 -> node3
- node3 -> end
- node2 -> node4 [weight=20]
- node4 -> end
Графически граф с такмим связями может быть отображён так:
5. Передача значений
💾 Актуально для версии Атом.Порт: 63ef9982
Спецификации значений
Описания параметры узлов могут содержать указания на данные времени исполнения, т. е. значения, не известные в момент написания графа. Такие значения передаются в виде специальных строк-спецификаций, состоящих из типа данных, отделённого двоеточием от пути к конкретному значению:
setting:group.name— параметрnameгруппы настроекgroup(о настройках см. раздел про специальные файлы).obj_ap:field1.field ... fieldN— поле объектаAutoProcess.obj_ws:field1.field2 ... fieldN— поле объектаWorkstation.
👉 Спецификации
obj_*требуют осторожности в обращении и могут быть изменены в будующем.
Спецификации раскрываются в значения каждый раз в момент запуска узла в составе автоматизации.
Передача значений состояниям SaltStack
Для передачи значений, включая указываемые при помощи спецификаций, в формулы SaltStack, используйте аргумент pillar. Это стандартный механизм, позволяющий получить и обработать значение в состоянии при помощи шаблонизатора из специального объекта с интерфейсом словаря pillar. Пример передачи значения в описании узла:
create_shared_folder:
description: Создание общего каталога для доступа к данным в виртуальной машине
unit_type: Command
unit_data:
function: state.apply
args:
- states.postconfigurated.kvm_created.linux_samba_shared
kwargs:
pillar:
domain_name: setting:install.domain_name
minion_type: linux
В формуле linux_samba_shared.yaml значение может быть получено так:
type_domain:
test.show_notification:
- text: Domain: {{ pillar.get('domain_name') }}
...6. Специальные файлы
💾 Актуально для версии Атом.Порт: 63ef9982
Назначение специальных файлов
Специальные файлы связаны с файлами графов сементикой и могут иметь схожий синтаксис, однако описывают дополнительные сущности, не включенные в формат графов. Далее описываются такие специальные файлы.
Файл настроек
settings.yaml
Файл может храниться и загружаться вместе с сериализованными графами (см. комманду graph_files_load) в постоянное хранилище системы и содержит настройки, которые могут быть получены при помощи спецификации setting:group.name.
Файл содержит единственный двухуровневый словарь settings. Ключи являются произвольными строками и означают раздел настроек. Значения в свою очередь являются словарями с произвольными строковыми ключами и скалярными значениями.
Пример:
settings: generic: domain: localdomain max_users: 200 migrate: yes department1: domain: dep1-domain department2: domain: dep2-domain
Статические узлы static_nodes.yaml
Файл статических узлов может загружаться и выгружаться вмест с файлами графов (см. комманды graph_files_load, graph_files_dump). Синтаксис файла полностью аналогичен словарю edges графа (описания узлов находятся сразу на верхнем уровне). Узлы, заргуженные из файла статических узлов не привязаны к какому-либо графу и могут использоваться в любых графах без явного описания путём указания их названий в качестве начальных и конечных узлов дуг.
Пример описания узла в файле статических узлов:
reboot_and_wait:
description: Перезагрузить рабочую станцию и дождаться ответа
unit_type: Runner
unit_data:
kwargs:
mods: _orch.reboot_minion
timeout: 900
function: state.orchestrate
minion_type: active
retry_limit: 3
Пример использования статического узла в графе:
---
name: graph_reboot_and_wait
description: Перезагрузить рабочую станцию и дождаться её ответа
edges:
- start -> reboot_and_wait
- reboot_and_wait -> end