Графы

Site: Атом.Порт: портал изучения
Course: Атом.Порт: портал изучения
Book: Графы
Printed by:
Date: Saturday, 6 December 2025, 8:26 AM

Description

Графы являются описаниями автоматизаций в системе Атом.Порт. Согласно им выполняются задачи конфигурирования удалённых компьютеров и сохраняется некоторая информация о них.

Документ разъясняет принятый синтаксис сериализации графов версии 2.

1. Введение

💾 Актуально для версии Атом.Порт: 63ef9982

Общие сведения

Язык конфигурации графов Атом.Порт — простой предметно-ориентированный язык на базе языка разметки YAML. Он предназначен для создания автоматизаций произвольной сложности. Язык описывает последовательный и условный вызов функции SaltStack.

В документе используются следующие синонимичные наименования типов:

  • Список — sequence (последовательность).
  • Словарь, объект — mapping (сопоставление).

Структура автоматизаций

Автоматизация Атом.Порт — это последовательность операций, всегда связанная с одной рабочей станцией. Описание последовательности операций называется графом Атом.Порт. Граф Атом.Порт представляет собой ориентированный взвешенный граф с истоком, называемым начальным узлом start и стоком, называемым конечным узлом end. Граф состоит из узлов (вершин), соединённых взвешенными ориентированными рёбрами (дугами). Вес дуги определяет выбор пути от истока к стоку и обратен по смыслу приоритету, т. е. выбирается путь с наименьшим весом. Таким образом, исполнение автоматизации представляет собой проход по графу от начальной до конечной вершины.

Пример абстрактного орграфа на рисунке. Зелёным обозначен путь от истока к стоку, числами веса рёбер.

 

Пример орграфа

Следствия такой структуры:

  1. Граф имеет один или более путей от начального узла к конечному.
  2. Некоторые вершины графа могут быть непосещёнными (т. е. связанные с такими вершинами никогда не будут выполнены) после прохода графа.
  3. Всегда выбирается путь с наименьшим общим весом. Вес дуи может изменяться в процессе прохода по графу. Так, дуга к узлу, отмеченному успешно пройденным, становится невесомой, т. е. её вес становится равным 0. Вес дуги к узлу, пройденному неуспешно, т. е. в случае неуспешного выполнения операции, становится бесконечным.
  4. Автоматизация, вес кратчайшего пути которого вырос до бесконечного, считается неуспешным: нет возможности достичь конечной вершины.
  5. В настоящее время циклы в пути не допускаются.

Операции могут быть как удалёнными действиями, выполняемыми посредствам вызова функций 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 узла:

Поле Обязательное Тип Значение
function Словарь

Название функции модуля исполнения SaltStack в формате модуль.функция, пример: test.ping

args   Список

Позиционные аргументы для передачи функции.

kwargs   Словарь

Именованные аргументы для передачи функции.

minion_type Строка [windows|linux|helper|active|master]

Тип миньона рабочей станции, для которого запускается функция.

active выбирает текущий активный с наибольшей продолжительностью активности (как правило хост, а не виртуальная машина).

master выбирает сервер, к которому подключена рабочая станция.

timeout

 

Целое число

Время ожидания исполнения команды в секундах.

👉 При применении состояний функцией 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 перечисляет связи между узлами, т. е. какой узел за каким следует и с каким весом. Вес обратным по значению приоритету, т. е. в первую очередь выбирается путь с наименьшим весом.

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

  1. Должен быть путь
  2. Не должно быть узлов без исходящих
  3. Не должно быть узлов без входящих

Синтаксис

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