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

Раздел содержит инструкции по настройке и использованию продукта «Служба управления конфигурациями "Осмакс"».

Модуль координации (SaltStack)

Модуль координации отвечает за управление и непосредственное применение политик на устройствах. Также осуществляет сбор данных с устройств для инвентаризации.

Работа модуля координации основана на взаимодействии с системой управления конфигурацией и автоматизацией SaltStack, построенной на модели «сервер управления (master) — агент (minion)». Согласно этой модели сервер управления (master) отправляет команды агенту (minion), служебному узлу, который эти команды выполняет, и отправляет свои отчеты о выполнении задач обратно на сервер управления (master).

Связь между сервером управления (master) и агентами (minion) осуществляется по транспортному протоколу ZeroMQ. Канал зашифрован парой открытого и закрытого ключей. Пара ключей генерируется агентом, после чего он отправляет свой открытый ключ серверу управления.

В таблице ниже приведены основные понятия, которые используются при работе с модулем координации.

Компонент Описание

API

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

0MQ (ZeroMQ)

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

S3-совместимое файловое хранилище

Хранит конфигурационные файлы, скрипты, шаблоны и другие файлы, которые необходимы для настройки определенных компонентов инфраструктуры. Также может использоваться для хранения общих файлов, которые могут быть доступны для всех узлов в инфраструктуре. Использование файлового сервера позволяет упростить процесс настройки и обновления компонентов инфраструктуры, а также обеспечить единообразие настроек между различными узлами

Агент

(Minion) Служебный узел, который управляется с помощью модуля координации. Он может являться физической или виртуальной машиной. Агент подключается к серверу управления и получает от него команды для выполнения различных задач, таких как установка программного обеспечения, настройка конфигурации или мониторинг состояния системы. Агенту присваивается свой уникальный идентификатор, который используется для идентификации узла на сервере управления

Сервер управления

(Master) Центральный узел в инфраструктуре управления конфигурацией. Управляет всеми устройствами в инфраструктуре — агентами, отправляет команды на выполнение, хранит конфигурационные данные и предоставляет отчеты о выполнении задач. Также обеспечивает безопасную и защищенную связь между устройствами и сервером управления

Формула

Набор файлов и директорий, которые описывают, как установить и настроить определенное приложение или сервис. Формулы позволяют упростить процесс управления конфигурацией, обеспечивая повторяемость и стандартизацию развертывания

Хранилище Pillar

Хранит конфиденциальную информацию на сервере управления, например, учетные данные, пароли, ключи доступа и другие секреты, которые не должны быть доступны всем агентам. Эта информация может быть использована в составе формул для настройки узлов, но она будет доступна только для тех узлов, которые имеют права доступа к данным Pillar. Хранилище Pillar также может использоваться для хранения других параметров конфигурации, которые могут быть специфичны для каждого узла в инфраструктуре

Шина событий

Используется для обмена информацией о событиях, происходящих на узлах. Если на агенте происходит какое-либо событие, например установка ПО или изменении конфигурации, он отправляет сообщение в шину событий. Сервер управления может подписаться на эти сообщения и реагировать на них, выполняя определенные действия. Также шина событий используется для мониторинга состояния системы и быстрого обнаружения проблем

Работа с формулами

Работа с формулами включает:

Принципы написания формулы

Формула — это набор файлов, которые хранятся в корне архива. Архив именуется согласно шаблону: <formula_name>-formula.tar.gz.

Формула включает файлы:

  • обязательные:

    • init.sls — главный файл с состояниями формулы; может включать в себя другие файлы с расширением .sls через директиву include;

    • <clean.sls — файл отката состояний формулы;

    • pillar.example — файл с примером указания параметров формулы;

    • FORMULA — описание формулы в формате YAML;

  • не обязательные:

    • docs/README.RST — файл с описанием способов применения формулы и входящих в нее состояний;

    • any.sls — другие файлы с расширением .sls, содержащие состояния, которые включены в init.sls или clean.sls директивой include;

    • any_dir — другие подкаталоги, содержащие файлы с расширением .sls, которые включены в init.sls или clean.sls директивой include;

    • map.jinja — файл, который описывает особенности конфигурации под конкретную ОС или другие статические конфигурации.

Файл FORMULA включает атрибуты формулы:

  • name — имя формулы;

  • os — ОС, поддерживающие формулу;

  • os_family — семейства ОС, поддерживающие формулу;

  • version — версия пакета с формулой, указанная в формате YYYYMM; если в месяце было несколько выпусков (release), то минорный месячный выпуск проставляется в атрибуте release;

  • release — выпуск версии; атрибут расширяет версионность формулы, если в месяце было несколько выпусков;

  • summary — краткое описание формулы;

  • description — подробное описание формулы.

SLS-файлы формулы составлены в синтаксисе YAML и содержат описания состояний, которые достигает система при применении формулы. Имена SLS-файлов, а также имена каталогов, не могут содержать точки, кроме точки между именем и расширением .sls. Могут включать строчные прописные латинские символы, цифры от 0 до 9, символ - (минус) и символ _ (подчеркивание) и соотвтетствовать маске [a-zA-z0-9-_]+.

Каждому состоянию присваивается уникальный идентификатор в рамках продукта.

Готовые формулы

Готовые формулы — это формулы, загруженные на сервер управления (master) и готовые к использованию с настройками по умолчанию без какой-либо дополнительной конфигурации. При этом при необходимости в конфигурации можно переопределить параметры, описанные в файле pillar.example (см. описание конкретной формулы).

Такими формулами являются:

Формула agent-update-formula

Формула для переустановки агента (minion).

Доступное состояние

Состояние agent-update

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает пакет salt-minion из целевого репозитория. Имеет зависимость от agent-update.package через список include.

Пример файла pillar.example
agent-update:
  # Переопределите значение map.jinja
  lookup:
    # Задайте параметры пакета
    pkg:
      # Задайте имя пакета для ОС
      name: "salt-minion"
      # Задайте версию пакета. Если значение — пустая строка, то используется последняя версия
      version: "3006.5"
      # Укажите репозиторий
      fromrepo: ""
Формула ark-formula

Формула для установки пакета Ark (инструмент для сжатия/распаковки графических файлов).

Доступные состояния

Состояние ark

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает пакет Ark из целевого репозитория. Имеет зависимость от ark.repository, ark.package через список include.

Состояние ark.repository

Имеет зависимость от ark.repository.install через список include.

Состояние ark.repository.install

Импортирует репозиторий, если значение repo.name указано в хранилище Pillars (или не пустое по умолчанию) и имеет зависимость от:

  • ark.repository.package.install через список include;

  • ark.repository.key.install через список include и реквизит require.

Состояние ark.repository.package.install

Устанавливает пакеты repo.required_packages(по умолчанию — gpg).

Состояние ark.repository.key.install

Загружает repo.key_file на агент (minion) и декодирует данные файла из формата base64 в бинарный.

Состояние ark.package

Устанавливает пакет Ark.

Состояние ark.clean

Мета-состояние (состояние, которое включает в себя другие состояния).

Отменяет все действия, выполненные в мета-состоянии ark, в обратном порядке, то есть удаляет пакет и удаляет целевой репозиторий (если он был импортирован). Имеет зависимость от ark.package.clean и ark.repository.clean через список include.

Состояние ark.package.clean

Удаляет пакет Ark.

Состояние ark.repository.clean

Удаляет файл конфигурации репозитория. Имеет зависимость от ark.repository.key.clean через список include.

Состояние ark.repository.key.clean

Удаляет Key-файл репозитория.

Пример файла pillar.example
ark:
  # Переопределите значение map.jinja
  lookup:
    # Укажите параметры пакета
    pkg:
      # Укажите имя пакета для конкретной ОС
      name: my-ark
      # Укажите конкретную версию пакета. Если значение представляет собой пустую строку, используется последняя версия
      version: '1.0.0.685-1'
      # Укажите репозиторий, из которого будет производиться установка. Когда репозиторий будет добавлен (по repo.name),
      # он будет назначен заданному релизу (suite).
      #  Значение может быть пустой строкой
      fromrepo: 'stable'
    # Укажите параметры репозитория
    repo:
      # Укажите имя репозитория, которое будет импортировано в систему. Значение должно быть указано в формате
      # one-line-style (https://manpages.debian.org/unstable/apt/sources.list.5.en.html#THE_DEB_AND_DEB-SRC_TYPES:_GENERAL_FORMAT)
      # без опций. Чтобы задать опции, используйте дополнительные параметры репозитория.
      # Если значение представляет собой пустую строку, то репозиторий не будет импортирован
      name: 'deb https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main/ 1.7_x86-64'
      # Выполните настройку репозитория, чтобы он стал недоступным для поиска и установки пакетов.
      # Значения: True или False
      disabled: False
      # Укажите тип пакетов (компонентов), которые будут установлены из репозитория (например, main, nonfree, ...).
      # Значения параметра comps должны быть заданы в виде списка через запятую
      comps: 'main,contrib,non-free'
      # Укажите имена файлов .list и .gpg. Не могут быть пустой строкой
      conf_name: 'ark'
      # Укажите key-файл (.gpg) для загрузки на агент. Этот файл может храниться как на сервере управления,
      # так и на серверах HTTP(S) или FTP.
      # Этот файл используется в опции репозитория signed-by. Значение может быть пустой строкой.
      key_file: 'salt://files/keys/MY-ARK-KEY.GPG'
      # Установите значение True, чтобы декодировать данные key-файла из формата base64 в бинарный
      key_file_dearmor: True
      # Установите полный путь к каталогу ключей на агенте
      key_keyrings_dir: '/etc/apt/keyrings/'
      # Укажите имена для установки пакетов, необходимых для импорта репозитория. Значения должны быть представлены в виде списка через запятую
      required_packages: [ 'gpg' ]
Формула google-chrome-formula

Формула для установки веб-браузера Google Chrome.

Доступные состояния

Состояние google-chrome

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает пакет google-chrome из целевого репозитория. Имеет зависимость от google-chrome.repository и google-chrome.package через список include.

Состояние google-chrome.repository

Имеет зависимость от google-chrome.repository.install через список include.

Состояние google-chrome.repository.install

Импортирует репозиторий, если значение repo.name указано в хранилище Pillars (или не пустое по умолчанию). Имеет зависимость от:

  • google-chrome.repository.package.install через список include;

  • google-chrome.repository.key.install через список include и реквизит require.

Состояние google-chrome.repository.package.install

Устанавливает пакеты repo.required_packages (по умолчанию — gpg).

Состояние google-chrome.repository.key.install

Загружает repo.key_file на агент (minion) и декодирует данные файла из формата base64 в бинарный.

Состояние google-chrome.package

Устанавливает пакет google-chrome.

Состояние google-chrome.clean

Мета-состояние (состояние, которое включает в себя другие состояния).

Отменяет все действия, выполненные в мета-состоянии google-chrome, в обратном порядке, т.е. удаляет пакет и удаляет целевой репозиторий (если он был импортирован). Имеет зависимость от google-chrome.package.clean и google-chrome.repository.clean через список include.

Состояние google-chrome.package.clean

Удаляет пакет google-chrome.

Состояние google-chrome.repository.clean

Удаляет файл конфигурации репозитория. Имеет зависимость от google-chrome.repository.key.clean через список include.

Состояние google-chrome.repository.key.clean

Удаляет Key-файл репозитория.

Пример файла pillar.example
google-chrome:
  # Переопределите значение map.jinja
  lookup:
    # Укажите параметры пакета
    pkg:
      # Укажите имя пакета для конкретной ОС
      name: google-chrome-stable
      # Укажите конкретную версию пакета. Если значение не задано, указывается последняя версия
      version: ''
      # Укажите репозиторий, из которого будет производиться установка. При добавлении репозитория (по repo.name),
      # он назначается заданному релизу (suite)
      #  Значение может быть пустой строкой
      fromrepo: ''
    # Укажите параметры репозитория
    repo:
      # Укажите имя репозитория, которое будет импортировано в систему. Значение должно быть указано в формате
      # one-line-style (https://manpages.debian.org/unstable/apt/sources.list.5.en.html#THE_DEB_AND_DEB-SRC_TYPES:_GENERAL_FORMAT)
      # без опций. Чтобы задать опции, используйте дополнительные параметры репозитория.
      # Если значение представляет собой пустую строку, то репозиторий не будет импортирован
      name: 'deb http://dl.google.com/linux/chrome/deb/ stable main'
      # Выполните настройку репозитория, чтобы он стал недоступным для поиска и установки пакетов.
      # Значения: True или False
      disabled: False
      # Укажите тип пакетов (компонентов), которые будут установлены из репозитория (например, main, nonfree, ...).
      # Значения параметра comps должны быть заданы в виде списка через запятую
      comps: ''
      # Укажите имена файлов .list и .gpg. Не могут быть пустой строкой
      conf_name: 'google-chrome'
      # Укажите key-файл (.gpg) для загрузки на агент. Этот файл может храниться как на сервере управления,
      # так и на серверах HTTP(S) или FTP.
      # Этот файл используется в опции репозитория signed-by. Значение может быть пустой строкой.
      key_file: 'https://dl.google.com/linux/linux_signing_key.pub'
      # Установите значение True, чтобы декодировать данные key-файла из формата base64 в бинарный
      key_file_dearmor: True
      # Установите полный путь к каталогу ключей на агенте
      key_keyrings_dir: '/etc/apt/keyrings/'
      # Укажите имена для установки пакетов, необходимых для импорта репозитория. Значения должны быть представлены в виде списка через запятую
      required_packages: [ 'gpg' ]
Формула google-chrome-reboot-formula

Формула для установки веб-браузера Google Chrome с опцией перезагрузки ПО.

Доступные состояния

Состояние google-chrome-reboot

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает пакет google-chrome из целевого репозитория. Имеет зависимость от google-chrome-reboot.repository и google-chrome-reboot.package через список include.

Состояние google-chrome-reboot.repository

Имеет зависимость от google-chrome-reboot.repository.install через список include.

Состояние google-chrome-reboot.repository.install

Импортирует репозиторий, если значение repo.name указано в хранилище Pillars (или не пустое по умолчанию). Имеет зависимость от:

  • google-chrome-reboot.repository.package.install через список include;

  • google-chrome-reboot.repository.key.install через список include и реквизит require.

Состояние google-chrome-reboot.repository.package.install

Устанавливает пакеты repo.required_packages (по умолчанию — gpg).

Состояние google-chrome-reboot.repository.key.install

Загружает repo.key_file на агент (minion) и декодирует данные файла из формата base64 в бинарный.

Состояние google-chrome-reboot.package

Устанавливает пакет google-chrome.

Состояние google-chrome-reboot.clean

Мета-состояние (состояние, которое включает в себя другие состояния).

Отменяет все действия, выполненные в мета-состоянии google-chrome-reboot, в обратном порядке, т.е. удаляет пакет и удаляет целевой репозиторий (если он был импортирован). Имеет зависимость от google-chrome-reboot.package.clean и google-chrome-reboot.repository.clean через список include.

Состояние google-chrome-reboot.package.clean

Удаляет пакет google-chrome.

Состояние google-chrome-reboot.repository.clean

Удаляет файл конфигурации репозитория. Имеет зависимость от google-chrome-reboot.repository.key.clean через список include.

Состояние google-chrome-reboot.repository.key.clean

Удаляет Key-файл репозитория.

Пример файла pillar.example
google-chrome-reboot:
  # Переопределите значение map.jinja
  lookup:
    # Укажите параметры пакета
    pkg:
      # Укажите имя пакета для конкретной ОС
      name: google-chrome-stable
      # Укажите конкретную версию пакета. Если значение не задано, указывается последняя версия
      version: ''
      # Укажите репозиторий, из которого будет производиться установка. При добавлении репозитория (по repo.name),
      # он назначается заданному релизу (suite)
      #  Значение может быть пустой строкой
      fromrepo: ''
    # Укажите параметры репозитория
    repo:
      # Укажите имя репозитория, которое будет импортировано в систему. Значение должно быть указано в формате
      # one-line-style (https://manpages.debian.org/unstable/apt/sources.list.5.en.html#THE_DEB_AND_DEB-SRC_TYPES:_GENERAL_FORMAT)
      # без опций. Чтобы задать опции, используйте дополнительные параметры репозитория.
      # Если значение представляет собой пустую строку, то репозиторий не будет импортирован
      name: 'deb http://dl.google.com/linux/chrome/deb/ stable main'
      # Выполните настройку репозитория, чтобы он стал недоступным для поиска и установки пакетов.
      # Значения: True или False
      disabled: False
      # Укажите тип пакетов (компонентов), которые будут установлены из репозитория (например, main, nonfree, ...).
      # Значения параметра comps должны быть заданы в виде списка через запятую
      comps: ''
      # Укажите имена файлов .list и .gpg. Не могут быть пустой строкой
      conf_name: 'google-chrome'
      # Укажите key-файл (.gpg) для загрузки на агент. Этот файл может храниться как на сервере управления,
      # так и на серверах HTTP(S) или FTP.
      # Этот файл используется в опции репозитория signed-by. Значение может быть пустой строкой
      key_file: 'https://dl.google.com/linux/linux_signing_key.pub'
      # Установите значение True, чтобы декодировать данные key-файла из формата base64 в бинарный
      key_file_dearmor: True
      # Установите полный путь к каталогу ключей на агенте
      key_keyrings_dir: '/etc/apt/keyrings/'
      # Укажите имена для установки пакетов, необходимых для импорта репозитория. Значения должны быть представлены в виде списка через запятую
      required_packages: [ 'gpg' ]
    # Укажите, требуется ли выполнять опцию перезагрузки. Возможные значения: True or False
    reboot: True
    # Задайте отложенное время до перезагрузки, либо точное время перезагрузки.
    # Если параметр не задан, выполняется мгновенная перезагрузка
    time: ''
    # Укажите сообщение уведомления.
    # Если параметр не задан, отправляется сообщение по-умолчанию с предупреждением о запланированной перезагрузке
    message: ''
Формула okular-formula

Формула для установки ПО Okular (для просмотра документов в различных форматах).

Доступные состояния

Состояние okular

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает пакет okular из целевого репозитория. Имеет зависимость от okular.repository и okular.package через список include.

Состояние okular.repository

Имеет зависимость от okular.repository.install через список include.

Состояние okular.repository.install

Импортирует репозиторий, если значение repo.name указано в хранилище Pillars (или не пустое по умолчанию). Имеет зависимость от:

  • okular.repository.package.install через список include;

  • okular.repository.key.install` через список include и реквизит require.

Состояние okular.repository.package.install

Устанавливает пакеты repo.required_packages (по умолчанию — gpg).

Состояние okular.repository.key.install

Загружает repo.key_file на агент (minion) и декодирует данные файла из формата base64 в бинарный.

Состояние okular.package

Устанавливает пакет okular.

Состояние okular.clean

Мета-состояние (состояние, которое включает в себя другие состояния).

Отменяет все действия, выполненные в мета-состоянии okular, в обратном порядке, т.е. удаляет пакет и удаляет целевой репозиторий (если он был импортирован). Имеет зависимость от okular.package.clean и okular.repository.clean через список include.

Состояние okular.package.clean

Удаляет пакет okular.

Состояние okular.repository.clean

Удаляет файл конфигурации репозитория. Имеет зависимость от okular.repository.key.clean через список include.

Состояние okular.repository.key.clean

Удаляет Key-файл репозитория.

Пример файла pillar.example
okular:
  # Переопределите значение map.jinja
  lookup:
    # Укажите параметры пакета
    pkg:
      # Укажите имя пакета для конкретной ОС
      name: okular
      # Укажите конкретную версию пакета. Если значение представляет собой пустую строку, используется последняя версия
      version: ''
      # Укажите репозиторий, из которого будет производиться установка. Когда репозиторий будет добавлен (по repo.name),
      # он будет назначен заданному релизу (suite).
      #  Значение может быть пустой строкой
      fromrepo: ''
    # Укажите параметры репозитория
    repo:
      # Укажите имя репозитория, которое будет импортировано в систему. Значение должно быть указано в формате
      # one-line-style (https://manpages.debian.org/unstable/apt/sources.list.5.en.html#THE_DEB_AND_DEB-SRC_TYPES:_GENERAL_FORMAT)
      # без опций. Чтобы задать опции, используйте дополнительные параметры репозитория.
      # Если значение представляет собой пустую строку, то репозиторий не будет импортирован
      name: ''
      # Выполните настройку репозитория, чтобы он стал недоступным для поиска и установки пакетов.
      # Значения: True или False
      disabled: False
      # Укажите тип пакетов (компонентов), которые будут установлены из репозитория (например, main, nonfree, ...).
      # Значения параметра comps должны быть заданы в виде списка через запятую
      comps: ''
      # Укажите имена файлов .list и .gpg. Не могут быть пустой строкой
      conf_name: 'okular'
      # Укажите key-файл (.gpg) для загрузки на агент. Этот файл может храниться как на сервере управления,
      # так и на серверах HTTP(S) или FTP.
      # Этот файл используется в опции репозитория signed-by. Значение может быть пустой строкой.
      key_file: ''
      # Установите значение True, чтобы декодировать данные key-файла из формата base64 в бинарный
      key_file_dearmor: True
      # Установите полный путь к каталогу ключей на агенте
      key_keyrings_dir: '/etc/apt/trusted.gpg.d/'
      # Укажите имена для установки пакетов, необходимых для импорта репозитория. Значения должны быть представлены в виде списка через запятую
      required_packages: [ 'gpg' ]
Формула yandex-browser-formula

Формула для установки веб-браузера Yandex.

Доступные состояния

Состояние yandex-browser

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает пакет yandex-browser из целевого репозитория. Имеет зависимость от yandex-browser.repository и yandex-browser.package через список include.

Состояние yandex-browser.repository

Имеет зависимость от yandex-browser.repository.install через список include.

Состояние yandex-browser.repository.install

Импортирует репозиторий, если значение repo.name указано в хранилище Pillars (или не пустое по умолчанию). Имеет зависимость от:

  • yandex-browser.repository.package.install через список include;

  • yandex-browser.repository.key.install через список include и реквизит require.

Состояние yandex-browser.repository.package.install

Устанавливает пакеты repo.required_packages (по умолчанию — gpg).

Состояние yandex-browser.repository.key.install

Загружает repo.key_file на агент (minion) и декодирует данные файла из формата base64 в бинарный.

Состояние yandex-browser.package

Устанавливает пакет yandex-browser.

Состояние yandex-browser.clean

Мета-состояние (состояние, которое включает в себя другие состояния).

Отменяет все действия, выполненные в мета-состоянии yandex-browser, в обратном порядке, т.е. удаляет пакет и удаляет целевой репозиторий (если он был импортирован). Имеет зависимость от yandex-browser.package.clean и yandex-browser.repository.clean через список include.

Состояние yandex-browser.package.clean

Удаляет пакет yandex-browser.

Состояние yandex-browser.repository.clean

Удаляет файл конфигурации репозитория. Имеет зависимость от yandex-browser.repository.key.clean через список include.

Состояние yandex-browser.repository.key.clean

Удаляет Key-файл репозитория.

Пример файла pillar.example
yandex-browser:
  # Переопределите значение map.jinja
  lookup:
    # Укажите параметры пакета
    pkg:
      # Укажите имя пакета для конкретной ОС
      name: yandex-browser-stable
      # Укажите конкретную версию пакета. Если значение представляет собой пустую строку, используется последняя версия
      version: '23.5.4.685-1'
      # Укажите репозиторий, из которого будет производиться установка. Когда репозиторий будет добавлен (по repo.name),
      # он будет назначен заданному релизу (suite).
      #  Значение может быть пустой строкой
      fromrepo: 'stable'
    # Укажите параметры репозитория
    repo:
      # Укажите имя репозитория, которое будет импортировано в систему. Значение должно быть указано в формате
      # one-line-style (https://manpages.debian.org/unstable/apt/sources.list.5.en.html#THE_DEB_AND_DEB-SRC_TYPES:_GENERAL_FORMAT)
      # без опций. Чтобы задать опции, используйте дополнительные параметры репозитория.
      # Если значение представляет собой пустую строку, то репозиторий не будет импортирован
      name: 'deb http://repo.yandex.ru/yandex-browser/deb stable'
      # Выполните настройку репозитория, чтобы он стал недоступным для поиска и установки пакетов.
      # Значения: True или False
      disabled: False
      # Укажите тип пакетов (компонентов), которые будут установлены из репозитория (например, main, nonfree, ...).
      # Значения параметра comps должны быть заданы в виде списка через запятую
      comps: 'main,contrib,non-free'
      # Укажите имена файлов .list и .gpg. Не могут быть пустой строкой
      conf_name: 'yandex-browser'
      # Укажите key-файл (.gpg) для загрузки на агент. Этот файл может храниться как на сервере управления,
      # так и на серверах HTTP(S) или FTP.
      # Этот файл используется в опции репозитория signed-by. Значение может быть пустой строкой.
      key_file: 'https://repo.yandex.ru/yandex-browser/YANDEX-BROWSER-KEY.GPG'
      # Установите значение True, чтобы декодировать данные key-файла из формата base64 в бинарный
      key_file_dearmor: True
      # Установите полный путь к каталогу ключей на агенте
      key_keyrings_dir: '/etc/apt/keyrings/'
      # Укажите имена для установки пакетов, необходимых для импорта репозитория. Значения должны быть представлены в виде списка через запятую
      required_packages: [ 'gpg' ]
Формула tigervnc-formula

Формула для установки TigerVNC (сервер виртуальных сетевых вычислений).

Доступные состояния

Состояние tigervnc

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает пакет TigerVNC из целевого репозитория. Имеет зависимость от tigervnc.package через список include.

Состояние tigervnc.package

Устанавливает только пакет TigerVNC.

Состояние tigervnc.clean

Мета-состояние (состояние, которое включает в себя другие состояния).

Отменяет все действия, выполненные в метасостоянии tigervnc, в обратном порядке, т.е. удаляет пакет и удаляет целевой репозиторий (если он был импортирован). Имеет зависимость от tigervnc.package.clean через список include.

Состояние tigervnc.package.clean

Удаляет пакет TigerVNC.

Пример файла pillar.example
tigervnc:
  # Переопределите значение map.jinja
  lookup:
    # Укажите параметры пакета
    pkg:
      # Укажите имя пакета для конкретной ОС
      name: osmax-ira-tigervnc
      # Укажите конкретную версию пакета. Если значение представляет собой пустую строку, используется последняя версия
      version: '1.0.0'
    # Задайте параметры x0vncserver
    x0vncserver_options:
      QueryConnect: 1
      QueryConnectTimeout: 15
      ShowRemoteConnect: 1
      IdleTimeout: 120
   # Задайте ip-адреса для доступа к tigervnc
   tigervnc_access_ips: []
   # Задайте группы доступа к tigervnc
   tigervnc_access_groups: []

Параметры конфигурации:

  • QueryConnect — вызывает модальное окно у удаленного пользователя, в котором предлагается принять или отклонить входящее соединение.

    Возможные значения:

    • 0 — производит подключение без запроса к удаленному пользователю;

    • 1 — вызывает модальное окно для подтверждения удаленного подключения.

  • QueryConnectTimeout — таймер в секундах на предоставление удаленного доступа, по истечении которого запрос автоматически отклоняется.

  • ShowRemoteConnect — отображение модального окна, которое информирует об удаленном доступе.

    На дисплее отображается модальное окно с именем и адресом, откуда выполняется подключение, и кнопка Disconnect.

    Возможные значения:

    • 0 — модальное окно скрыто;

    • 1 — отображается модальное окно с информацией.

  • IdleTimeout — время (в секундах), по истечении которого неактивное соединение VNC будет разорвано. Значение по умолчанию — 0, что означает, что простаивающие соединения никогда не будут разорваны.

    Для VNC со стороны Guacamole существует автопереподключение (autoreconnect) сессии, поэтому по истечении настроенного значения IdleTimeout воспроизводится один из сценариев:

    • при нажатии кнопки Disconnect на устройстве Администратора запускается 15-секундный таймер для переподключения сессии УД; количество повторений не ограничено;

    • если вкладка с сессией УД открыта (при этом не важно, активна эта вкладка в данный момент или нет) и экран разблокирован, сессия УД переподключится через 15 секунд; количество повторений не ограничено;

    • при переключении с вкладки с сессией УД на другую срабатывает таймаут бездействия, по истечении которого сессия УД завершается и автопереподключение не выполняется;

    • если экран устройства Администратора заблокирован, включается таймаут бездействия, сессия УД завершается и автопереподключение не выполняется.

  • tigervnc_access_ips — директивы для указания IP-шлюза, с которого разрешается подключение.

    До адреса необходимо указать символ:

    • + — доступ разрешён;

    • - — доступ запрещён;

    • ? — отправка запроса на разрешение для доступа.

    По умолчанию все подключения заблокированы — пустой файл правил блокирует все подключения. Эти директивы могут задаваться как сами по себе (что вызовет применение для всех адресов), либо с добавлением маски или конкретного IP-адреса, например: +199.35.209.1/32.

    Также можно задать несколько директив. В этом случае при подключении правила проверяются все адреса по очереди до первого подходящего, например:

    +199.35.209.1
    ?

    Данный набор директив отправляет запрос на подключение для всех адресов кроме 199.35.209.1.

  • tigervnc_access_groups — группы пользователей, которым разрешено выполнять подключение.

    Доменные группы пользователей рекомендуется указывать в формате, поддерживаемом Samba: DOMAIN\username. Например, для группы пользователей Local Users в домене localdomain указание группы должно выглядеть следующим образом: LOCALDOMAIN\Local Users.

    Также если параметры конфигурации задаются в файле со специальным форматированием, необходимо экранировать спецсимволы. Например, для формата JSON экранируется символ \: LOCALDOMAIN\\Local Users.

Формула xrdp-formula

Формула для установки xRDP (X Remote Desktop Protocol) — открытой реализация протокола RDP (Remote Desktop Protocol), который позволяет удаленным пользователям подключаться к рабочему столу удаленной машины через сеть.

Доступные состояния

Состояние xrdp

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает пакет xrdp из целевого репозитория. Имеет зависимость от xrdp.package через список include.

Состояние xrdp.package

Устанавливает только пакет xrdp.

Состояние xrdp.clean

Мета-состояние (состояние, которое включает в себя другие состояния).

Отменяет все действия, выполненные в метасостоянии xrdp, в обратном порядке, т.е. удаляет пакет и удаляет целевой репозиторий (если он был импортирован). Имеет зависимость от xrdp.package.clean через список include.

Состояние xrdp.package.clean

Удаляет пакет xrdp.

Пример файла pillar.example
xrdp:
  # Переопределите значение map.jinja
  lookup:
    # Укажите параметры пакета
    pkg:
      # Укажите имя пакета для конкретной ОС
      name: osmax-ira-xrdp
      # Укажите конкретную версию пакета. Если значение представляет собой пустую строку, используется последняя версия
      version: '0.9.24-1-543141.6e94b8a0'
    # Задайте параметры xrdp
    xrdp_ini:
      # Порт, на котором XRDP будет слушать входящие подключения
      port: 3389
      # Уровень безопасности для соединения
      security_layer: negotiate
      # Путь к лог-файлам XRDP
      LogFile: /dev/null
    # Задайте параметры sesman
    sesman_ini:
      # Завершение сеанса пользователя после его отключения
      KillDisconnected: false
      # время в минутах, через которое сеанс пользователя будет завершен после отключения (если для параметра
      # KillDisconnected установлено значение true)
      DisconnectedTimeLimit: 0
      # время в минутах, в течение которого пользователь не совершал никаких действий; по истечении этого времени сеанс будет завершен
      IdleTimeLimit: 0
      # Путь к исполняемому файлу X-сервера, который будет использоваться для запуска графической сессии
      param: /usr/lib/xorg/Xorg
    # Задайте ip-адреса для доступа к xrdp
    xrdp_access_ips: []
    # Задайте группы доступа к xrdp
    xrdp_access_groups: []

Параметры конфигурации:

  • xrdp_access_ips — директивы для указания IP-шлюза, с которого разрешается подключение;

    До адреса необходимо указать символ:

    • + — доступ разрешён;

    • - — доступ запрещён.

      По умолчанию все подключения заблокированы — пустой файл правил блокирует все подключения. Эти директивы могут задаваться как сами по себе (что вызовет применение для всех адресов), либо с добавлением маски или конкретного IP-адреса, например: +199.35.209.1/32.

      Также можно задать несколько директив. В этом случае при подключении правила проверяются все адреса по очереди до первого подходящего, например:

      +199.35.209.1
      !

      Данный набор директив будет запрещать доступ для всех адресов, кроме 199.35.209.1.

  • xrdp_access_groups — группы пользователей, которым разрешено выполнять подключение.

    Доменные группы пользователей рекомендуется указывать в формате, поддерживаемом Samba: DOMAIN\username. Например, для группы пользователей Local Users в домене localdomain указание группы должно выглядеть следующим образом: LOCALDOMAIN\Local Users.

    Также если параметры конфигурации задаются в файле со специальным форматированием, необходимо экранировать спецсимволы. Например, для формата JSON экранируется символ \: LOCALDOMAIN\\Local Users.

Формула openssh-formula

Формула для установки openssh (Open Secure Shell) — набора утилит и библиотек для обеспечения защищенной сетевой связи и аутентификации между компьютерами.

Доступные состояния

Состояние openssh

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает пакет openssh из целевого репозитория. Имеет зависимость от openssh.package через список include.

Состояние openssh.package

Устанавливает только пакет openssh.

Состояние openssh.clean

Мета-состояние (состояние, которое включает в себя другие состояния).

Отменяет все действия, выполненные в метасостоянии openssh, в обратном порядке, т.е. удаляет пакет и удаляет целевой репозиторий (если он был импортирован). Имеет зависимость от openssh.package.clean через список include.

Состояние openssh.package.clean

Удаляет пакет openssh.

Пример файла pillar.example
openssh:
  # Переопределите значение map.jinja
  lookup:
    # Задайте параметры пакета
    pkg:
      # Укажите имя пакета для конкретной ОС
      name: osmax-ira-openssh
      # Укажите конкретную версию пакета. Если значение представляет собой пустую строку, используется последняя версия
      version: '1.2.0'
    # Задайте параметры openssh:
    # Игнорировать/не игнорировать группы доступа при аутентификации. Значение true указывает на то, что группы
    # доступа не будут учитываться при определении прав доступа
    access_groups_ignore: false
    # IP-адреса или диапазоны IP-адресов, для которых будет использоваться аутентификация Kerberos при подключении по SSH
    kerberosauthentication_ips: ['*']
    # IP-адреса, для которых разрешена аутентификация по паролю при подключении по SSH
    passwordauthentication_ips: ['*']
    # IP-адреса, для которых будет использоваться аутентификация GSSAPI при подключении по SSH
    gssapiauthentication_ips: ['*']
    # IP-адреса, для которых разрешена аутентификация с использованием открытых ключей при подключении по SSH
    pubkeyauthentication_ips: ['*']
    # IP-адреса, для которых разрешена интерактивная аутентификация при подключении по SSH
    kbdinteractiveauthentication_ips: ['*']
    # задайте группы доступа к openssh
    openssh_access_groups: []
    # Дополнительные настройки, связанные с пользовательской настройкой SSH
    config_customize:
      # Время ожидания (таймаут) для неактивного канала связи
      ChannelTimeout: '*=5m'
      # Время ожидания (таймаут) для неиспользуемых соединений
      UnusedConnectionTimeout: '5m'

По умолчанию все подключения заблокированы — пустой файл правил блокирует все подключения. Для каждого из правил аутентификации по IP-адресу можно задать следующие директивы:

  • * — разрешение для всех адресов;

Также для IP-адреса можно добавить подсеть. Для этого необходимо дополнительно указать символ /. Например, */16 — разрешение для всех адресов в подсети 16.

  • !<IP-адрес> — запрет доступа для конкретного адреса;

  • <IP-адрес> — разрешение для конкретного адреса.

Также можно задать несколько директив, но в таком случае при подключении правила будут проверяться по очереди до первого подходящего, например:

!199.35.209.1
*

Данный набор директив разрешит определённый вид аутентификации для всех адресов кроме 199.35.209.1

В параметре openssh_access_groups рекомендуется указывать доменные группы пользователей в формате, поддерживаемом Samba: DOMAIN\username. Например, для группы пользователей Local Users в домене localdomain указание группы должно выглядеть следующим образом: LOCALDOMAIN\Local Users.

Также если параметры конфигурации задаются в файле со специальным форматированием, необходимо экранировать спецсимволы. Например, для формата JSON экранируется символ \: LOCALDOMAIN\\Local Users.

Формула get-hostname-formula

Формула для выполнения скриптов.

Доступные состояния

Состояние get-hostname

Мета-состояние (состояние, которое включает в себя другие состояния).

Имеет зависимость от get-hostname.install через список include.

Состояние get-hostname.install

Устанавливает systemd, выполняет Python-скрипт и запускает веб-сервер на хосте (localhost).

Состояние get-hostname.clean

Удаляет файлы get-hostname.service и get-hostname.py из файловой системы агента (minion), отключает сервис get-hostname service.

Пример файла pillar.example
get-hostname:
  # Переопределите значение map.jinja
  lookup:
    # Задайте путь к интерпретатору Python на агенте (minion)
    python_path: '/opt/saltstack/salt/bin/python3'
    # Задайте путь к python-скрипту
    script_path: '/opt/saltstack/salt/include/get-hostname.py'
    # Задайте путь к службе systemd
    service_path: '/etc/systemd/system/get-hostname.service'
    # Задайте имя владельца
    owner_name: 'root'
    # Задайте группу владельца
    owner_group: 'root'
Формула notify-and-reboot-formula

Формула для удаленной перезагрузки устройств.

Доступные состояния

Состояние notify-and-reboot

Мета-состояние (состояние, которое включает в себя другие состояния).

Запускает скрипт notify-and-reboot из директории в S3-совместимом хранилище. Имеет зависимость от notify-and-reboot.run через список include.

Состояние notify-and-reboot.run

Запускает скрипт notify-and-reboot из директории в S3-совместимом хранилище.

Состояние notify-and-reboot.clean

Удаляет файл notify-and-reboot.sh из файловой системы агента (minion).

Пример файла pillar.example
notify-and-reboot:
  # Переопределите значение map.jinja
  lookup:
    # Задайте имя скрипта
    file_name: "notify-and-reboot.sh"
     # Установите оболочку для использования скрипта
    shell: "/bin/sh"
     # Задайте отложенное время до перезагрузки, либо точное время перезагрузки.
     # Если параметр не задан, выполняется мгновенная перезагрузка
    time: ""
     # Укажите сообщение уведомления.
     # Если параметр не задан, отправляется сообщение по умолчанию с предупреждением о запланированной перезагрузке
    message: ""
Формула os-bootstrap-formula

Формула для выполнения скрипта переустановки ОС.

Доступные состояния

Состояние os-bootstrap

Мета-состояние (состояние, которое включает в себя другие состояния).

Запускает скрипт os-bootstrap-formula. Имеет зависимость от os-bootstrap.run через список include.

Состояние os-bootstrap.run

Запускает скрипты astra-os-bootstrap.sh и erase-bootloader-ipxe.sh.

Пример файла pillar.example
os-bootstrap:
  # Переопределите значение map.jinja
  lookup:
    # Установите оболочку для использования скрипта
    shell: '/bin/sh'
    # Задайте имя пункта меню GRUB
    menuEntryName: '"astra_reinstall"'
    # Задайте идентификатор способа развертывания ОС
    installationRecipeId: ''
    # Задайте URL-адреса загрузчика
    bootloaderUrls: [
    {
        'bios': '',
        'uefi': '',
        'bootLoader': ''
    }
    ]
    # Задайте URL-адрес конфигурации загрузчика
    bootConfigUrl: ''
    # Задайте путь к контрольному файлу
    installationLabelPath: ''

Пользовательские формулы

Пользовательские формулы — это готовые формулы, для которых необходимо переопределить в конфигурации параметры, описанные в файле pillar.example (см. описание конкретной формулы).

Такими формулами являются:

Формула ca-cert-formula

Формула для установки CA-сертификатов.

Для корректного использования формулы необходимо создать пользовательскую конфигурацию и переопределить параметры по умолчанию, описанные в файле pillar.example.
Доступные состояния

Состояние ca-cert

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает сертификаты в системном хранилище и хранилище профилей пользователей (NSSDB). Имеет зависимость от ca-cert.sys, ca-cert.user через список include.

Состояние ca-cert.sys

Имеет зависимость от ca-cert.sys.install через список include.

Состояние ca-cert.sys.install

Запускает команду sys.certs_update_cmd для обновления системных сертификатов и имеет зависимость от ca-cert.sys.certs.files через список include и реквизит onchanges.

Состояние ca-cert.sys.certs.files

Сохраняет на диске (в директории certs.dest_dir) файлы сертификата из списка certs.files.

Состояние ca-cert.user

Имеет зависимость от ca-cert.user.install через список include.

Состояние ca-cert.user.install

Имеет зависимость от ca-cert.user.nssdb через список include.

Состояние ca-cert.user.nssdb

Имеет зависимость от ca-cert.user.nssdb.update через список include.

Состояние ca-cert.user.nssdb.update

Добавляет сертификаты в хранилище профилей пользователей (NSSDB) и имеет зависимость от:

  • ca-cert.user.nssdb.create через список include и реквизит require;

  • ca-cert.user.certs.files через список include и реквизит onchanges.

Если в хранилище Pillar нет пользователей в user.usernames, пользователи будут настраиваться по имени каталога в /home.

Состояние ca-cert.user.nssdb.create

Создает хранилище сертификатов пользователя (NSSDB) в домашней директории пользователя и имеет зависимость от ca-cert.user.package.instal через список include и реквизит require. Если в хранилище Pillar в поле user.usernames не указано ни одного пользователя, пользователи будут настраиваться по имени каталога в /home.

Состояние ca-cert.user.package.install

Устанавливает пакет cacert.user.pkg.name (по умолчанию — libnss3-tools).

Состояние ca-cert.user.certs.files

Сохраняет на диске (в директории certs.dest_dir_user) файлы сертификата из списка certs.files.

Состояние ca-cert.clean

Мета-состояние (состояние, которое включает в себя другие состояния).

Удаляет сертификаты их системного хранилища и хранилища профилей пользователей (NSSDB). Имеет зависимость от ca-cert.sys.clean, ca-cert.user.clean через список include.

Состояние ca-cert.sys.clean

Запускает команду sys.certs_update_cmd для обновления системных сертификатов и имеет зависимость от ca-cert.sys.certs.clean через список include и реквизит onchanges.

Состояние ca-cert.sys.certs.clean

Удаляет с диска (директория certs.dest_dir) файлы сертификата из списка certs.files.

Состояние ca-cert.user.clean

Имеет зависимость от ca-cert.user.nssdb.clean, ca-cert.user.package.clean через список включения.

Состояние ca-cert.user.nssdb.clean

Удаляет сертификаты из хранилища профилей пользователей (NSSDB) и имеет зависимость от ca-cert.user.certs.clean через список include и реквизит require.

Состояние ca-cert.user.certs.clean

Удаляет с диска (директория certs.dest_dir_user) файлы сертификата из списка certs.files.

Состояние ca-cert.user.package.clean

Удаляет пакет cacert.user.pkg.name (по умолчанию — libnss3-tools).

Пример файла pillar.example
ca-cert:
  # Переопределите значение map.jinja
  lookup:
    # Укажите параметры сертификатов
    certs:
      # Укажите список имен файлов сертификатов. Значения не могут быть пустыми
      #  Значения должны быть указаны в виде списка через запятую
      files: [
        "my_ca_1.crt",
        "my_ca_2.crt",
      ]
      # Укажите полный путь к каталогу, в котором хранятся файлы сертификатов,
      #  на файловом сервере
      source_dir: "salt://files/cacerts/"
      # Укажите полный путь к каталогу для системных сертификатов на агенте
      dest_dir: "/usr/local/share/ca-certificates/"
      # Укажите полный путь к каталогу для общих сертификатов пользователей на агенте
      dest_dir_user: "/usr/local/share/ca-certificates-nssdb/"
    # Укажите некоторые параметры системы
    sys:
      # Укажите команду, которая будет выполняться для обновления системных сертификатов
      certs_update_cmd: "update-ca-certificates --fresh"
    # Укажите некоторые параметры пользователей
    user:
      # Укажите список имен пользователей для обновления сертификатов. Если пользователи
      # не заданы, пользователи будут выбраны по имени каталога в /home
      usernames: [
        "username_1",
        "username_1",
      ]
Изменение значений параметров по умолчанию
  1. Извлеките формулу ca-cert-formula из архива.

    $ tar -xvf ~/Downloads/osmax-salt-formulas-X.Y.Z.tar.gz \
        --strip-components 3 \
        -C ~/ \
        ./formulas/ca-cert-formula/ca-cert
    $ cd ~/ca-cert
  2. Создайте директорию files и скопируйте в нее необходимые сертификаты.

    В качестве примера используются сертификаты ЦС НУЦ Минцифры:

    $ ls ./files/
    russian_trusted_root_ca_pem.crt  russian_trusted_sub_ca_pem.crt
  3. Измените файл map.jinja(словарь со значениями по умолчанию):

    1. Измените значение default.certs.source_dir, указав директорию files, созданную в формуле.

    2. Измените значение default.certs.files, указав в списке имена файлов в директории files.

    3. Оставьте пустым списком значение default.user.usernames — это будет означать, что сертификаты будут установлены для всех пользователей, для которых создана папка в каталоге /home/).

    4. Удалите все значения, относящиеся к ОС Debian.

      {% set mapdata = salt['grains.filter_by']({
          'default': {
              'certs': {
                  'files': [
                      'russian_trusted_root_ca_pem.crt',
                      'russian_trusted_sub_ca_pem.crt',
                  ],
                  'source_dir': 'salt://ca-cert/files/',
                  'dest_dir': '/usr/local/share/ca-certificates/',
                  'dest_dir_user': '/usr/local/share/ca-certificates-nssdb/',
              },
              'sys': {
                  'certs_update_cmd': 'update-ca-certificates --fresh',
              },
               'user': {
                  'usernames': [
                  ],
                  'pkg': {
                      'name': 'libnss3-tools',
                  },
              },
          },
      }, merge=salt['pillar.get']('ca-cert:lookup'), base='default') %}

После переопределения значений по умолчанию, следуйте инструкциям по работе с формулой в разделе «Работа формулами».

Формула deb-repo-formula

Формула для добавления пользовательского репозитория с Deb-пакетами.

Доступные состояния

Состояние deb-repo

Мета-состояние (состояние, которое включает в себя другие состояния).

Добавляет и настраивает Deb-репозиторий. Имеет зависимость от deb-repo.install через список include.

Состояние deb-repo.install

Импортирует репозиторий, если значение name указано в хранилище Pillars (или не пустое по умолчанию).

Состояние deb-repo.key.install

Загружает deb-repo.key_file на агент (minion) и декодирует данные файла из формата base64 в бинарный.

Состояние deb-repo.clean

Удаляет файл конфигурации репозитория. Имеет зависимость от deb-repo.key.clean через список include.

Состояние deb-repo.key.clean

Удаляет Key-файл репозитория.

Пример файла pillar.example
deb-repo:
  # Переопределите значение map.jinja
  lookup:
    # Укажите имя репозитория, которое будет импортировано в систему. Значение должно быть указано в формате
    # one-line-style (https://manpages.debian.org/unstable/apt/sources.list.5.en.html#THE_DEB_AND_DEB-SRC_TYPES:_GENERAL_FORMAT)
    #  с опциями в квадратных скобках ([]). Опции используются для установки дополнительных параметров репозитория,
    # например, `signed-by`, `trusted`, `allow-insecure`.
    #  Опция настройки архитектуры ('arch') будет добавлена автоматически из параметра grain на агенте
    name: 'deb [signed-by=/etc/apt/keyrings/repo-key.gpg trusted=yes] https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-main/ 1.7_x86-64'
    # Выполните настройку репозитория, чтобы он стал недоступным для поиска и установки пакетов.
    # Значения: True или False
    disabled: False
    # Укажите тип пакетов (компонентов), которые будут установлены из репозитория (например, main, nonfree, ...).
    # Значения параметра comps должны быть заданы в виде списка через запятую
    comps: 'main,contrib,non-free'
    # Укажите имена файлов .list и .gpg. Не могут быть пустой строкой
    conf_name: 'repository-main'
    # Укажите key-файл (.gpg) для загрузки на агент. Этот файл может храниться как на сервере управления,
    # так и на серверах HTTP(S) или FTP.
    # Этот файл используется в опции репозитория signed-by. Значение может быть пустой строкой.
    # Отсутствие значения означает, что key-файл не будет импортирован и не будет использоваться.
    # Если используется key-файл, необходимо добавить опцию в формате 'signed-by={{ key_keyrings_dir }}{{ conf_name }}.gpg', example 'signed-by=/etc/apt/keyrings/repository-main.gpg'
    key_file: ''
    # Установите значение True, чтобы декодировать данные key-файла из формата base64 в бинарный
    key_file_dearmor: False
    # Установите полный путь к каталогу ключей на агенте
    key_keyrings_dir: '/etc/apt/keyrings/'
    # Укажите имена для установки пакетов, необходимых для импорта репозитория. Значения должны быть представлены в виде списка через запятую
    required_packages: [ 'gpg' ]
Формула web-mail-formula

Формула для установки Web Mail.

Доступные состояния

Состояние web-mail

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает ссылку на Web Mail. Имеет зависимость от web-mail.install через список include.

Состояние web-mail.install

Создает ссылку (файл web-mail.desktop) на Web Mail на рабочем столе пользователя (папка ~/Desktop).

Если в хранилище Pillar в поле user.usernames не указано ни одного пользователя, пользователи будут настраиваться по имени каталога в /home.

Если в полях link.name и link.url значения не заданы, формула не будет выполнена, и отобразится соответствующее уведомление.

Состояние web-mail.clean

Удаляет ссылку (файл web-mail.desktop) c рабочего стола пользователя (папка ~/Desktop).

Если в хранилище Pillar в поле user.usernames не указано ни одного пользователя, пользователи будут настраиваться по имени каталога в /home.

Если в полях link.name и link.url значения не заданы, формула не будет выполнена, и отобразится соответствующее уведомление.

Пример файла pillar.example
web-mail:
  # Переопределите значение map.jinja
  lookup:
    # Укажите параметры ссылки
    link:
      # Укажите название ссылки на рабочем столе
      name: "Link to My Corp Mail"
      # Укажите URL доступа
      url: "https://mail.yandex.ru/"
      # Задайте имя (или путь к файловой системе агента) иконки, которая будет использоваться для отображения
      # на рабочем столе Значение по умолчанию: "mail"
      icon: "/path/to/icon"
    # Задайте параметры пользователей
    user:
      # Укажите список имен пользователей для обновления сертификатов. Если пользователи
      # не заданы, пользователи будут выбраны по имени каталога в /home
      usernames: [
        "username_1",
        "username_2",
      ]

Формулы-шаблоны

Формулы-шаблоны используются в качестве примера для создания собственных формул подобного типа. Такими формулами являются:

Формула tpl-shortcut-formula

Формула-шаблон для добавления ярлыка приложения, url-адреса и символической ссылки (symlink) на рабочий стол пользователя.

Доступные состояния

Состояние tpl-shortcut

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает ссылку на Web Mail. Имеет зависимость от tpl-shortcut.install через список include.

Состояние tpl-shortcut.install

Создает символическую ссылку или файл Desktop Entry (приложение, ссылку) на рабочем столе пользователя (папка ~/Desktop).

Если в хранилище Pillar в поле user.usernames не указано ни одного пользователя, пользователи будут настраиваться по имени каталога в /home.

Если в полях link.name и link.url значения не заданы, формула не будет выполнена, и отобразится соответствующее уведомление.

Состояние tpl-shortcut.clean

Удаляет символическую ссылку или файл Desktop Entry (приложение, ссылку) c рабочего стола пользователя (папка ~/Desktop).

Если в хранилище Pillar в поле user.usernames не указано ни одного пользователя, пользователи будут настраиваться по имени каталога в /home.

Если в полях link.name и link.url значения не заданы, формула не будет выполнена, и отобразится соответствующее уведомление.

Пример файла pillar.example
tpl-shortcut:
  # Переопределите значение map.jinja
  lookup:
    # Переопределите параметры ссылки на приложение
    application:
      # Задайте имя файла ссылки на рабочий стол
      name: "bash_application"
    # Задайте параметры ссылки
    link:
      # Задайте имя файла ссылки на рабочий стол
      name: "ya-ru_link"
    # Задайте параметры ссылки
    symlink:
      # Задайте имя файла символической ссылки на рабочий стол
      name: "distro-info_debian_symlink"
      # Задайте полный путь к целевому файлу в файловой системе агента
      target: "/usr/share/distro-info/debian.csv"
    # Задайте параметры пользователей
    user:
      # Укажите список имен пользователей для обновления сертификатов. Если пользователи
      # не заданы, пользователи будут выбраны по имени каталога в /home
      usernames: [
        "username_1",
        "username_2",
      ]
Написание формулы типа tpl-shortcut-formula
  1. Скопируйте формулу-шаблон (tpl-shortcut) в новую директорию с новым названием (my-shortcut):

    $ tar -xvf ~/Downloads/osmax-salt-formulas-0.9.0.tar.gz \
        --strip-components 3 \
        -C ~/ \
        ./formulas/tpl-shortcut-formula/tpl-shortcut
    $ cp -R ~/tpl-shortcut/ ~/my-shortcut && cd ~/my-shortcut
  2. Измените файл состояний install.sls (создание ярлыков):

    1. Измените ID состояний.

      Рекомендуется для соблюдения уникальности придерживаться именования вида: formula-name-state-name-other-state-name-module-function-some-id. Например, ID состояния для создания symlink будет выглядеть как: my-shortcut-install-file-symlink-{{ username }}-symlink.
    2. Измените значение аргумента contents для функции из состояния: my-shortcut-install-file-managed-{{ username }}-application (ярлык для приложения). Например, имя (Name), запускаемую программу (Exec) и иконку ярлыка (Icon).

    3. Измените значение аргумента contents для функции из состояния my-shortcut-install-file-managed-{{ username }}-link (ярлык для url). Например, имя (Name) и url-адрес (URL).

      # -*- coding: utf-8 -*-
      # vim: ft=sls
      
      {#- Get the `tplroot` from `tpldir` #}
      {%- set tplroot = tpldir.split('/')[0] %}
      {%- from tplroot ~ "/map.jinja" import mapdata as tplshortcut with context %}
      {%- from tplroot ~ "/_usernames_lib.sls" import usernames with context %}
      
      {#- Create application link #}
      {%- if tplshortcut.application.name %}
      {%- for username in usernames  %}
      
      my-shortcut-install-file-managed-{{ username }}-application:
        file.managed:
          - name: /home/{{ username }}/Desktop/{{ tplshortcut.application.name }}.desktop
          - user: {{ username }}
          - group: {{ username }}
          - makedirs: True
          - contents: |
              [Desktop Entry]
              Type=Application
              Name=Run bash manpage
              Exec=man bash
              Terminal=true
              Icon=dictionary
      
      {%- endfor %}
      {%- endif %}
      
      {#- Create url link #}
      {%- if tplshortcut.link.name %}
      {%- for username in usernames  %}
      
      my-shortcut-install-file-managed-{{ username }}-link:
        file.managed:
          - name: /home/{{ username }}/Desktop/{{ tplshortcut.link.name }}.desktop
          - user: {{ username }}
          - group: {{ username }}
          - makedirs: True
          - contents: |
              [Desktop Entry]
              Type=Link
              Name=Love DuckDuckGo!
              URL=https://duckduckgo.com
      
      {%- endfor %}
      {%- endif %}
      
      {#- Create symlink #}
      {%- if tplshortcut.symlink.name %}
      {%- for username in usernames  %}
      
      my-shortcut-install-file-symlink-{{ username }}-symlink:
        file.symlink:
          - name: /home/{{ username }}/Desktop/{{ tplshortcut.symlink.name }}
          - target: {{ tplshortcut.symlink.target }}
          - user: {{ username }}
          - group: {{ username }}
          - makedirs: True
      
      {%- endfor %}
      {%- endif %}
  3. В файле состояний clean.sls (удаление ярлыков) измените ID состояний:

    # -*- coding: utf-8 -*-
    # vim: ft=sls
    
    {#- Get the `tplroot` from `tpldir` #}
    {%- set tplroot = tpldir.split('/')[0] %}
    {%- from tplroot ~ "/map.jinja" import mapdata as tplshortcut with context %}
    {%- from tplroot ~ "/_usernames_lib.sls" import usernames with context %}
    
    {#- Delete application link #}
    {%- if tplshortcut.application.name %}
    {%- for username in usernames  %}
    
    my-shortcut-install-file-managed-{{ username }}-application:
      file.absent:
        - name: /home/{{ username }}/Desktop/{{ tplshortcut.application.name }}.desktop
    
    {%- endfor %}
    {%- endif %}
    
    {#- Delete url link #}
    {%- if tplshortcut.link.name %}
    {%- for username in usernames  %}
    
    my-shortcut-install-file-managed-{{ username }}-link:
      file.absent:
        - name: /home/{{ username }}/Desktop/{{ tplshortcut.link.name }}.desktop
    
    {%- endfor %}
    {%- endif %}
    
    {#- Delete symlink #}
    {%- if tplshortcut.symlink.name %}
    {%- for username in usernames  %}
    
    my-shortcut-install-file-symlink-{{ username }}-symlink:
      file.absent:
        - name: /home/{{ username }}/Desktop/{{ tplshortcut.symlink.name }}
    
    {%- endfor %}
    {%- endif %}
  4. Измените файл map.jinja(словарь со значениями по умолчанию):

    1. Измените имя ключа для словаря в хранилище Pillar, используемого для динамического переопределения значений по умолчанию.

      Рекомендуется для соблюдения уникальности придерживаться именования вида: formula-name:lookup. Например, my-shortcut:lookup.
    2. Измените значение application.name.

    3. Измените значение link.name.

    4. Измените значения symlink.name и symlink.target.

      {% set mapdata = salt['grains.filter_by']({
          'default': {
              'application': {
                  'name': 'man_application',
              },
              'link': {
                  'name': 'duckduckgo_link',
              },
              'symlink': {
                  'name': 'distro-info_ubuntu_symlink',
                  'target': '/usr/share/distro-info/ubuntu.csv'
              },
              'user': {
                  'usernames': [
                  ],
              },
          },
      }, merge=salt['pillar.get']('my-shortcut:lookup'), base='default') %}
После того как формула будет написана, следуйте инструкциям по работе с формулой в разделе «Работа с формулами».
Формула tpl-script-formula

Формула-шаблон для выполнения скриптов.

Доступные состояния

Состояние tpl-script

Мета-состояние (состояние, которое включает в себя другие состояния).

Выполняет скрипт. Имеет зависимость от tpl-script.run через список include.

Состояние tpl-script.run

Выполняет скрипт test_script.sh, если файл /tmp/test_script-unless отсутствует в файловой системе агента (minion). The running script creates /tmp/test_script-unless file with TEST_ENV shell variable content.

Состояние tpl-script.clean

Удаляет файл /tmp/test_script-unless на агенте (minion).

Пример файла pillar.example
tpl-script:
  # Переопределите значение map.jinja
  lookup:
    # Задайте имя для файла скрипта, который хранится в {{ tpldir }}/files/
    file_name: "test_script.sh"
     # Задайте оболочку, которая будет использоваться для выполнения скрипта
    shell: "/bin/sh"
     # Задайте переменные env
    env:
      test_env: "HELLO WORLD!"

Написание формулы типа tpl-script-formula

  1. Скопируйте формулу-шаблон (tpl-script) в новую директорию с новым названием (my-script).

    $ tar -xvf ~/Downloads/osmax-salt-formulas-0.10.0.tar.gz \
        --strip-components 3 \
        -C ~/ \
        ./formulas/tpl-script-formula/tpl-shortcut
    $ cp -R ~/tpl-script/ ~/my-script && cd ~/my-script
  2. Переименуйте файл ./files/test_script.sh в ./files/my-new-script.sh и затем измените его содержимое. Файл будет выглядеть следующим образом:

    #!/bin/bash
    #
    echo "Working hard..."
    echo "True" > /var/local/my-script.run.id
    
    # writing the state line
    echo  # an empty line here so the next line will be the last.
    echo "changed=yes comment='Created /var/local/my-script.run.id file' whatever=123"
  3. Измените файл состояний run.sls (запуск скрипта):

    1. Измените ID состояний.

    2. Удалите аргумент env и его значения.

    3. Измените значение аргумента unless, указав в проверке файл, создаваемый в скрипте, таким образом, исключив повторный запуск скрипта при очередном применении формулы.

      # -*- coding: utf-8 -*-
      # vim: ft=sls
      
      {#- Get the `tplroot` from `tpldir` #}
      {%- set tplroot = tpldir.split('/')[0] %}
      {%- from tplroot ~ "/map.jinja" import mapdata as tplscript with context %}
      
      {#- Run custom script #}
      {%- if tplscript.file_name %}
      
      my-script-run-cmd-script:
        cmd.script:
          - source: salt://{{ tpldir }}/files/{{ tplscript.file_name }}
          - cwd: /
          - shell: {{ tplscript.shell }}
          - unless: "test -f /var/local/my-script.run.id"
      
      {%- endif %}
  4. Измените файл состояний clean.sls (удаление проверочного файла):

    1. Измените ID состояний.

    2. Измените значение аргумента name.

      # -*- coding: utf-8 -*-
      # vim: ft=sls
      
      {#- Get the `tplroot` from `tpldir` #}
      {%- set tplroot = tpldir.split('/')[0] %}
      {%- from tplroot ~ "/map.jinja" import mapdata as tplscript with context %}
      
      {#- Delete symlink #}
      {%- if tplscript.file_name %}
      
      my-script-clean-file-absent:
        file.absent:
          - name: /var/local/my-script.run.id
      
      {%- endif %}
  5. Измените файл map.jinja(словарь со значениями по умолчанию):

    1. Измените имя ключа для словаря в хранилище Pillar, используемого для динамического переопределения значений по умолчанию.

    2. Измените значение file_name, указав имя созданного скрипта.

    3. Удалите env.

      {% set mapdata = salt['grains.filter_by']({
          'default': {
              'file_name': 'my-new-script.sh',
              'shell': '/bin/sh',
          },
      }, merge=salt['pillar.get']('my-script:lookup'), base='default') %}
После того как формула будет написана, следуйте инструкциям по работе с формулой в разделе «Работа с формулами».
Формула tpl-yb-settings-formula

Формула-шаблон для управления настройками веб-браузера Yandex.

Доступные состояния

Состояние tpl-yb-settings

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает политики Яндекс-браузера. Имеет зависимость от tpl-yb-settings.install через список include.

Состояние tpl-yb-settings.install

Загружает управляемые и рекомендуемые файлы политик в файловую системы агента (minion).

Состояние tpl-yb-settings.clean

Удаляет управляемые и рекомендуемые файлы политик из файловой системы агента (minion).

Пример файла pillar.example
tpl-yb-settings:
  # Override map.jinja
  lookup:
    # Переопределите значение map.jinja
    policies:
      # Задайте параметры управляемых политик
      managed:
        # Задайте имя файла с управляемыми политиками (.json), который будет помещен в файловую систему агента
        name: "managed_policies"
        # Задайте имя файла с управляемыми политиками (.json) для загрузки на агент, этот файл может быть помещен как на
        # сервере управления, так и на сервере HTTP(S) или FTP server. Значение может быть пустой строкой
        source: "salt://tpl-yb-settings/files/managed_policies.json"
      # Задайте параметры рекомендуемых политик
      recommended:
        # SЗадайте имя файла с рекомендуемыми политиками (.json), который будет помещен в файловую систему агента
        name: "recommended_policies"
        # Задайте имя файла с рекомендуемыми политиками (.json) для загрузки на агент, этот файл может быть помещен как на
        # сервере управления, так и на сервере HTTP(S) или FTP server. Значение может быть пустой строкой
        source: "salt://tpl-yb-settings/files/recommended_policies.json"
Написание формулы типа tpl-yb-settings
  1. Скопируйте формулу-шаблон (tpl-yb-settings) в новую директорию с новым названием (my-yb-settings):

    $ tar -xvf ~/Downloads/osmax-salt-formulas-0.11.0.tar.gz \
        --strip-components 3 \
        -C ~/ \
        ./formulas/tpl-yb-settings-formula/tpl-yb-settings
    $ cp -R ~/tpl-yb-settings/ ~/my-yb-settings && cd ~/my-yb-settings
  2. Измените файл ./files/managed_policies.json, добавив в него политики, которые нужно принудительно применить на устройствах пользователей.

    В качестве примера рассмотрим добавление нескольких разрешающих и запрещающую по умолчанию все доступы URL политик:

    {
        "URLBlocklist": ["*"],
        "URLAllowlist": [
          "browser://policy",
          "duckduckgo.com",
          "https://yandex.ru/pogoda",
          "file://*"
        ]
    }
  3. Измените файл ./files/recommended_policies.json, добавив в него политики:

    {
        "HomepageLocation": "https://duckduckgo.com"
    }
  4. В файле состояний install.sls (установка политик) измените ID состояний:

    # -*- coding: utf-8 -*-
    # vim: ft=sls
    
    {#- Get the `tplroot` from `tpldir` #}
    {%- set tplroot = tpldir.split('/')[0] %}
    {%- from tplroot ~ "/map.jinja" import mapdata as tplybsettings with context %}
    
    {%- if tplybsettings.policies.managed.source %}
    
    my-yb-settings-install-file-managed-policies-managed:
      file.managed:
        - name: "/etc/opt/yandex/browser/policies/managed/{{ tplybsettings.policies.managed.name }}.json"
        - source: {{ tplybsettings.policies.managed.source }}
        - skip_verify: True
        - makedirs: True
    
    {%- endif %}
    
    {%- if tplybsettings.policies.recommended.source %}
    
    my-yb-settings-install-file-managed-policies-recommended:
      file.managed:
        - name: "/etc/opt/yandex/browser/policies/recommended/{{ tplybsettings.policies.recommended.name }}.json"
        - source: {{ tplybsettings.policies.recommended.source }}
        - skip_verify: True
        - makedirs: True
    
    {%- endif %}
  5. В файле состояний clean.sls (удаление политик) измените ID состояний:

    # -*- coding: utf-8 -*-
    # vim: ft=sls
    
    {#- Get the `tplroot` from `tpldir` #}
    {%- set tplroot = tpldir.split('/')[0] %}
    {%- from tplroot ~ "/map.jinja" import mapdata as tplybsettings with context %}
    
    {%- if tplybsettings.policies.managed.source %}
    
    my-yb-settings-clean-file-absent-policies-managed:
      file.absent:
        - name: "/etc/opt/yandex/browser/policies/managed/{{ tplybsettings.policies.managed.name }}.json"
    
    {%- endif %}
    
    {%- if tplybsettings.policies.recommended.source %}
    
    my-yb-settings-clean-file-absent-policies-recommended:
      file.absent:
        - name: "/etc/opt/yandex/browser/policies/recommended/{{ tplybsettings.policies.recommended.name }}.json"
    
    {%- endif %}
  6. Измените файл map.jinja(словарь со значениями по умолчанию):

    1. Измените имя ключа для словаря в хранилище Pillar, используемого для динамического переопределения значений по умолчанию.

    2. Измените значения policies.managed.source и policies.recommended.source и расположение файлов политик file_name.

      {% set mapdata = salt['grains.filter_by']({
          'default': {
              'policies': {
                  'managed': {
                      'name': 'managed_policies',
                      'source': 'salt://my-yb-settings/files/managed_policies.json',
                  },
                  'recommended': {
                      'name': 'recommended_policies',
                      'source': 'salt://my-yb-settings/files/recommended_policies.json',
                  },
              },
          },
      }, merge=salt['pillar.get']('my-yb-settings:lookup'), base='default') %}
После того как формула будет написана, следуйте инструкциям по работе с формулой в разделе «Работа с формулами».
Формула tpl-yb-settings-formula

Формула-шаблон для управления настройками веб-браузера Yandex.

Доступные состояния

Состояние tpl-yb-settings

Мета-состояние (состояние, которое включает в себя другие состояния).

Устанавливает политики Яндекс-браузера. Имеет зависимость от tpl-yb-settings.install через список include.

Состояние tpl-yb-settings.install

Загружает управляемые и рекомендуемые файлы политик в файловую системы агента (minion).

Состояние tpl-yb-settings.clean

Удаляет управляемые и рекомендуемые файлы политик из файловой системы агента (minion).

Пример файла pillar.example
tpl-yb-settings:
  # Override map.jinja
  lookup:
    # Переопределите значение map.jinja
    policies:
      # Задайте параметры управляемых политик
      managed:
        # Задайте имя файла с управляемыми политиками (.json), который будет помещен в файловую систему агента
        name: "managed_policies"
        # Задайте имя файла с управляемыми политиками (.json) для загрузки на агент, этот файл может быть помещен как на
        # сервере управления, так и на сервере HTTP(S) или FTP server. Значение может быть пустой строкой
        source: "salt://tpl-yb-settings/files/managed_policies.json"
      # Задайте параметры рекомендуемых политик
      recommended:
        # SЗадайте имя файла с рекомендуемыми политиками (.json), который будет помещен в файловую систему агента
        name: "recommended_policies"
        # Задайте имя файла с рекомендуемыми политиками (.json) для загрузки на агент, этот файл может быть помещен как на
        # сервере управления, так и на сервере HTTP(S) или FTP server. Значение может быть пустой строкой
        source: "salt://tpl-yb-settings/files/recommended_policies.json"
Написание формулы типа tpl-yb-settings
  1. Скопируйте формулу-шаблон (tpl-yb-settings) в новую директорию с новым названием (my-yb-settings):

    $ tar -xvf ~/Downloads/osmax-salt-formulas-0.11.0.tar.gz \
        --strip-components 3 \
        -C ~/ \
        ./formulas/tpl-yb-settings-formula/tpl-yb-settings
    $ cp -R ~/tpl-yb-settings/ ~/my-yb-settings && cd ~/my-yb-settings
  2. Измените файл ./files/managed_policies.json, добавив в него политики, которые нужно принудительно применить на устройствах пользователей.

    В качестве примера рассмотрим добавление нескольких разрешающих и запрещающую по умолчанию все доступы URL политик:

    {
        "URLBlocklist": ["*"],
        "URLAllowlist": [
          "browser://policy",
          "duckduckgo.com",
          "https://yandex.ru/pogoda",
          "file://*"
        ]
    }
  3. Измените файл ./files/recommended_policies.json, добавив в него политики:

    {
        "HomepageLocation": "https://duckduckgo.com"
    }
  4. В файле состояний install.sls (установка политик) измените ID состояний:

    # -*- coding: utf-8 -*-
    # vim: ft=sls
    
    {#- Get the `tplroot` from `tpldir` #}
    {%- set tplroot = tpldir.split('/')[0] %}
    {%- from tplroot ~ "/map.jinja" import mapdata as tplybsettings with context %}
    
    {%- if tplybsettings.policies.managed.source %}
    
    my-yb-settings-install-file-managed-policies-managed:
      file.managed:
        - name: "/etc/opt/yandex/browser/policies/managed/{{ tplybsettings.policies.managed.name }}.json"
        - source: {{ tplybsettings.policies.managed.source }}
        - skip_verify: True
        - makedirs: True
    
    {%- endif %}
    
    {%- if tplybsettings.policies.recommended.source %}
    
    my-yb-settings-install-file-managed-policies-recommended:
      file.managed:
        - name: "/etc/opt/yandex/browser/policies/recommended/{{ tplybsettings.policies.recommended.name }}.json"
        - source: {{ tplybsettings.policies.recommended.source }}
        - skip_verify: True
        - makedirs: True
    
    {%- endif %}
  5. В файле состояний clean.sls (удаление политик) измените ID состояний:

    # -*- coding: utf-8 -*-
    # vim: ft=sls
    
    {#- Get the `tplroot` from `tpldir` #}
    {%- set tplroot = tpldir.split('/')[0] %}
    {%- from tplroot ~ "/map.jinja" import mapdata as tplybsettings with context %}
    
    {%- if tplybsettings.policies.managed.source %}
    
    my-yb-settings-clean-file-absent-policies-managed:
      file.absent:
        - name: "/etc/opt/yandex/browser/policies/managed/{{ tplybsettings.policies.managed.name }}.json"
    
    {%- endif %}
    
    {%- if tplybsettings.policies.recommended.source %}
    
    my-yb-settings-clean-file-absent-policies-recommended:
      file.absent:
        - name: "/etc/opt/yandex/browser/policies/recommended/{{ tplybsettings.policies.recommended.name }}.json"
    
    {%- endif %}
  6. Измените файл map.jinja(словарь со значениями по умолчанию):

    1. Измените имя ключа для словаря в хранилище Pillar, используемого для динамического переопределения значений по умолчанию.

    2. Измените значения policies.managed.source и policies.recommended.source и расположение файлов политик file_name.

      {% set mapdata = salt['grains.filter_by']({
          'default': {
              'policies': {
                  'managed': {
                      'name': 'managed_policies',
                      'source': 'salt://my-yb-settings/files/managed_policies.json',
                  },
                  'recommended': {
                      'name': 'recommended_policies',
                      'source': 'salt://my-yb-settings/files/recommended_policies.json',
                  },
              },
          },
      }, merge=salt['pillar.get']('my-yb-settings:lookup'), base='default') %}
После того как формула будет написана, следуйте инструкциям по работе с формулой в разделе «Работа с формулами».
Формула tpl-group-members-formula

Формула-шаблон для управления членством в локальных группах.

Доступные состояния

Состояние tpl-group-members

Мета-состояние (состояние, которое включает в себя другие состояния).

Создает и управляет локальными настройками групп. Имеет зависимость от tpl-group-members.install через список include.

Состояние tpl-group-members.install

Создает group_name (если эта группа отсутствует на агенте (minion)) и изменяет настройки группы.

  • если для параметра change установлено значение add, список пользователей будет добавлен в качестве новых членов группы;

  • если для параметра change установлено значение del, пользователи будут исключены из состава группы;

  • если для параметра change установлено значение "", заменяет существующих членов группы списком новых участников.

Состояние tpl-group-members.clean

Удаляет группу group_name на агенте (minion).

Пример файла pillar.example
tpl-group-members:
  # Переопределите значение map.jinja
  lookup:
    # Задайте имя группы
    group_name: "sudo"
    # Задайте id для группы;
    # Если оставить поле пустым, группе автоматически будет присвоен следующий свободный идентификатор.
    gid: ""
    # Укажите, является ли группа системной группой.
    # Это опция '-r' в команде 'groupadd`
    system: false
    # Задайте действие для списка пользователей: добавить (`add`), удалить(`del`) или заменить ("").
    change: ""
    # Задайте список пользователей
    users: [
        "user1",
        "user2",
    ]
Написание формулы типа tpl-group-members-formula
  1. Скопируйте формулу-шаблон (tpl-group-members) в новую директорию с новым названием (my-group-members).

    $ tar -xvf ~/Downloads/osmax-salt-formulas-X.Y.Z.tar.gz \
        --strip-components 3 \
        -C ~/ \
        ./formulas/tpl-yb-settings-formula/tpl-group-members
    $ cp -R ~/tpl-group-members/ ~/my-group-members && cd ~/my-group-members
  2. В файле состояний install.sls (создание и настройка группы) измените ID состояний:

    # -*- coding: utf-8 -*-
    # vim: ft=sls
    
    {#- Get the `tplroot` from `tpldir` #}
    {%- set tplroot = tpldir.split('/')[0] %}
    {%- from tplroot ~ "/map.jinja" import mapdata as tplgroupmembers with context %}
    
    {%- if tplgroupmembers.group_name %}
    
    my-group-members-group-present:
      group.present:
        - name: {{ tplgroupmembers.group_name }}
        {%- if tplgroupmembers.gid %}
        - gid: {{ tplgroupmembers.gid }}
        {%- endif %}
        {%- if tplgroupmembers.system %}
        - system: {{ tplgroupmembers.system }}
        {%- endif %}
        {%- if tplgroupmembers.change == 'add' %}
        - addusers: {{ tplgroupmembers.users }}
        {%- elif tplgroupmembers.change == 'del' %}
        - delusers: {{ tplgroupmembers.users }}
        {%- else %}
        - members: {{ tplgroupmembers.users }}
        {%- endif %}
    
    {%- endif %}
  3. В файле состояний clean.sls (удаление группы) измените ID состояний:

    # -*- coding: utf-8 -*-
    # vim: ft=sls
    
    {#- Get the `tplroot` from `tpldir` #}
    {%- set tplroot = tpldir.split('/')[0] %}
    {%- from tplroot ~ "/map.jinja" import mapdata as tplgroupmembers with context %}
    
    {%- if tplgroupmembers.group_name %}
    
    my-group-members-group-absent:
      group.absent:
        - name: {{ tplgroupmembers.group_name }}
    
    {%- endif %}
  4. Измените файл map.jinja(словарь со значениями по умолчанию). Например, добавьте в группу sudo некоторых пользователей, для этого:

    1. Измените имя ключа для словаря в хранилище Pillar, используемого для динамического переопределения значений по умолчанию.

    2. Измените значение group_name на sudo.

    3. Измените значение change на add (добавить в группу).

    4. Измените значение users, указав список пользователей.

      {% set mapdata = salt['grains.filter_by']({
          'default': {
              'group_name': 'sudo',
              'gid': '',
              'system': false,
              'change': '',
              'users': [
                  'user1',
                  'user2',
              ],
          },
      }, merge=salt['pillar.get']('my-group-members:lookup'), base='default') %}
После того как формула будет написана, следуйте инструкциям по работе с формулой в разделе «Работа с формулами».

Добавление формулы в S3-совместимое хранилище

Чтобы загрузить формулу на файловый сервер SALT.FILESERVER.S3FS, на использование которого настроен сервер управления (master), используйте путь s3://<bucket name>/base/<formula-name>.

Для более подробной информации см. официальную документацию:

Также формулу можно загрузить при помощи пользовательского интерфейса «Кабинет Администратора» (см. документ «Руководство администратора» раздел «Загрузка формул SaltStack».

Работа с конфигурациями

Конфигурация описывается в файле формата JSON.

Пример описания конфигурации для формулы по установке Яндекс Браузера:

{
  "displayName": "Яндекс Браузер",
  "description": "Яндекс Браузер — безопасный и быстрый браузер с голосовым помощником.",
  "fullDescription": "Яндекс Браузер — безопасный и быстрый браузер с голосовым помощником.",
  "isApplication": true,
  "categories": [
    "network"
  ],
  "icon": {
    "resourcePath": "specifications/icons/yandex-browser-logo.svg",
    "contentType": "image/svg+xml"
  },
  "images": [
    {
      "resourcePath": "specifications/images/yandex-browser-screen1.webp",
      "contentType": "image/webp"
    }
  ]
}

Где:

  • displayName — (обязательное поле) имя, которое отображается в пользовательском интерфейсе;

  • description — описание конфигурации или ПО;

  • fullDescription — полное описание конфигурации или ПО; для ПО данное описание отображается в качестве подробной информации о нем в магазине приложений;

  • isApplication — (обязательное поле) флаг, который устанавливается для ПО; если это конфигурация, флаг выключен;

  • categories — список категорий;

  • icon — иконка ПО, которая отображается в магазине приложений;

  • images — изображения, которые отображаются на странице с подробным описанием ПО.

Работа с конфигурациями выполняется через пользовательский интерфейс «Кабинет Администратора». См. документ «Руководство администратора» раздел «Конфигурации».

Работа с версиями конфигураций

Версия конфигурации описывается в файле формата JSON.

Пример описания версии конфигурации для формулы по установке Яндекс Браузера:

{
  "displayName": "23.9.1.1023",
  "formulaName": "yandex-browser",
  "releaseDate": "2023-11-14",
  "softwareRequirements": "example",
  "pillarProperty": {
    "lookup": {
      "pkg": {
        "version": "23.9.1.1023-1"
      }
    }
  }
}

Где:

  • displayName — (обязательное поле) имя, которое отображается в пользовательском интерфейсе;

  • formulaName — (обязательное поле) имя формулы, используемой для установки данной версии;

  • releaseDate — (обязательное поле) дата выпуска версии;

  • softwareRequirements — (обязательное поле) требования к установке данной версии;

  • pillarProperty — параметры для переопределения; если поле останется незаполненным, формула версии будет устанавливаться с параметрами по умолчанию.

    В зависимости от назначения формулы можно переопределить некоторые параметры. Параметры, доступные для переопределения, описаны в файле формулы формата YAML pillar.example.

    Пример файла pillar.example для формулы по установке Яндекс Браузера:

    yandex-browser:
      # Переопределите значение map.jinja
      lookup:
        # Укажите параметры пакета
        pkg:
          # Укажите имя пакета для конкретной ОС
          name: yandex-browser-stable
          # Задайте версию пакета. Если значение — пустая строка, то используется последняя версия
          version: '23.5.4.685-1'
          # Укажите репозиторий, из которого будет производиться установка. Когда репозиторий будет добавлен (по repo.name),
          # он будет назначен заданному релизу (suite).
          #  Значение может быть пустой строкой
          fromrepo: 'stable'
        # Укажите параметры репозитория
        repo:
          # Укажите имя репозитория, которое будет импортировано в систему. Значение должно быть указано в формате
          # one-line-style (https://manpages.debian.org/unstable/apt/sources.list.5.en.html#THE_DEB_AND_DEB-SRC_TYPES:_GENERAL_FORMAT)
          # без опций. Чтобы задать опции, используйте дополнительные параметры репозитория.
          # Если значение представляет собой пустую строку, то репозиторий не будет импортирован
          name: 'deb http://repo.yandex.ru/yandex-browser/deb stable'
          # Выполните настройку репозитория, чтобы он стал недоступным для поиска и установки пакетов.
          # Значения: True или False
          disabled: False
          # Укажите тип пакетов (компонентов), которые будут установлены из репозитория (например, main, nonfree, ...).
          # Значения параметра comps должны быть заданы в виде списка через запятую
          comps: 'main,contrib,non-free'
          # Укажите имена файлов .list и .gpg. Не могут быть пустой строкой
          conf_name: 'yandex-browser'
          # Укажите key-файл (.gpg) для загрузки на агент. Этот файл может храниться как на сервере управления,
          # так и на серверах HTTP(S) или FTP.
          # Этот файл используется в опции репозитория signed-by. Значение может быть пустой строкой.
          key_file: 'https://repo.yandex.ru/yandex-browser/YANDEX-BROWSER-KEY.GPG'
          # Установите значение True, чтобы декодировать данные key-файла из формата base64 в бинарный
          key_file_dearmor: True
          # Установите полный путь к каталогу ключей на агенте
          key_keyrings_dir: '/etc/apt/keyrings/'
          # Укажите имена для установки пакетов, необходимых для импорта репозитория. Значения должны быть представлены в виде списка через запятую
          required_packages: [ 'gpg' ]

Работа с версиями конфигурации выполняется через пользовательский интерфейс «Кабинет Администратора». См. документ «Руководство администратора» раздел «Конфигурации. Версия конфигурации».

Настройка режима мульти-мастер с автоматическим переключением (failover)

Режим мульти-мастер с автоматическим переключением (failover) используется для бесперебойного обслуживания большого количества устройств в инфраструктуре.

При стандартном подключении агент (minion) получает открытый ключ проверки от сервера управления (master) и, в случае сбоя сети или оборудования, выдает ошибку и завершает работу. В режиме мульти-мастер с автоматическим переключением (failover) при неисправности одного сервера управления (master) агент (minion) переключается на следующий и продолжает работу.

Чтобы настроить режим мульти-мастер с автоматическим переключением (failover), необходимо:

Подробную информацию о режиме мульти-мастер с автоматическим переключением (failover) см. в официальной документации.

Настройка подписи открытого ключа на серверах управления (masters)

  1. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/master_sign_pubkey.conf.

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

    master_sign_pubkey: True
  3. Перезапустите службу salt-master. После перезапуска сервер управления (master) автоматически создаст новую пару ключей:

    master_sign.pem
    master_sign.pub
  4. (Опционально) задайте имя для пары ключей подписи, установив значение параметра:

    master_sign_key_name: <name_without_suffix>

Сервер управления (master) создаст эту пару ключей при перезапуске и будет использовать ее для создания подписи открытых ключей, прикрепленной к ответу аутентификации.

Вычисления выполняются для каждого запроса аутентификации агента (minion). Если большое количество агентов (minions) часто аутентифицируются, рекомендуется использовать настройки conf_master:master_pubkey_signature и conf_master:master_use_pubkey_signature, описанные ниже.

Если используются несколько серверов управления (masters), и они должны подписывать свои ответы аутентификации, пара ключей master_sign.* должна быть скопирована на каждый сервер управления (master). В противном случае агент (minion) не сможет проверить открытые ключи сервера управления (master) при подключении к другому серверу управления (master), так как подпись открытых ключей была создана с другой парой ключей.

Настройка параметров оптимизации производительности работы сервера управления (master)

При описанной выше настройке сервер управления (master) вычисляет подпись для каждого запроса аутентификации, что требует большого количества ресурсов процессора.

Чтобы избежать высокой нагрузки, сервер управления (master) может использовать созданную заранее подпись публичного ключа. Такая подпись сохраняется в виде строки в кодировке Base64, которую сервер управления (master) читает один раз при запуске и прикрепляет только эту строку к ответам аутентификации.

Включение этого параметра также дает пользователям возможность иметь пару ключей подписи в системе, отличной от текущего сервера управления (master), и создавать там подпись с открытыми ключами. Вероятно, в системе с более строгими правилами брандмауэра, без доступа в Интернет и с меньшим количеством пользователей.

Чтобы создать такую подпись, выполните команду:

salt-key --gen-signature

В директории сервера управления (master) pki будет создан файл с подписью по умолчанию:

/etc/salt/pki/master/master_pubkey_signature

Это простой текстовый файл с двоичной подписью, преобразованной в base64. Если пара подписи еще не существует, пара подписи и файл подписи будут автоматически созданы за один вызов:

salt-key --gen-signature --auto-create

Чтобы сервер управления (master) использовал пересозданную подпись, установите значение параметра:

master_use_pubkey_signature: True

Для этого в каталоге сервера управления (master) pki должен присутствовать файл master_pubkey_signature с правильной подписью. Если у файла будет другое имя, задайте его, указав значение параметра:

master_pubkey_signature: <filename>

При наличии большого количества серверов управления (masters) и открытых ключей (по умолчанию и для подписи) рекомендуется использовать имя хоста salt-masters для имен файлов подписи. Подписи легко перепутать, поскольку они не несут никакой информации о ключе, из которого была создана подпись.

Настройка проверки подписи открытых ключей на агентах (minions)

  1. Скопируйте открытый ключ (по умолчанию master_sign.pub) с сервера управления (master) в каталог агента (minion) pki:

    /etc/salt/pki/minion/master_sign.pub
    Для проверки подписи агент (minion) должен иметь доступ только к открытому ключу. Нельзя копировать файл master_sign.pem. Он должен храниться только на сервере управления (master).
  2. Включите проверку подписи открытого ключа на агенте (minions) — в конфигурационном файле агента (minion) задайте значение параметра:

    verify_master_pubkey_sign: True
  3. Перезапустите агента (minion).

При необходимости вы можете запускать проверку для каждой попытки аутентификации, которые могут выполняться довольно часто. Например, только запуск агента (minion) инициирует 6 проверок подписи: для аутентификации, майнинга, highstate и т. д. Для этого включите настройку:

always_verify_signature: True

Включение режима мульти-мастер с автоматическим переключением (failover) на агенте (minion)

  1. Задайте список адресов серверов управления (masters):

    master:
        - 172.16.0.10
        - 172.16.0.11
        - 172.16.0.12

    В случае сбоев агент (minion) будет выполнять подключение к серверам управления (masters) по очереди в указанном порядке.

  2. (Опционально) чтобы подключение выполнялось в случайном порядке, а не в порядке, указанном в параметре master, установите значение параметра:

    random_master: True
  3. Задайте тип сервера управления (masters):

    master_type: failover

    Первый сервер управления (master), принявший агента (minion), будет использоваться агентом (minion).

  1. (Опционально) укажите временной интервал в секундах, через который будет выполняться проверка подключения агента (minion) к серверу управления (master), установив значение параметра:

    master_alive_interval: <seconds>

Если будет установлена потеря связи, агент (minion) временно удалит сервер управления (master) из списка и попробует подключиться к другому серверу управления (master), выбрав следующий в порядке очереди или случайным образом, в зависимости от заданных настроек.

Настройка опции удаленной установки агентов (minions)

Чтобы настроить возможность удаленной установки агента (minion), выполните действия:

Установка пакета salt-ssh

При установке модуля координации (SaltStack), после того как вы скачаете и распакуете архив, установите пакет salt-ssh любым удобным способом, например:

sudo apt install salt-ssh=3006.4

или

sudo apt install ./inno-salt/salt-ssh_3006.4_amd64.deb

Конфигурация сервера управления (master)

  1. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/roster.conf:

    roster_defaults:
      sudo: True
      ssh_options:
        - "StrictHostKeyChecking=no"
        - "UserKnownHostsFile=/dev/null"

    Где:

    • roster_defaults — блок параметров, которые используются при управлении удаленными серверами:

      • sudo — параметр, указывающий на то, что при подключении к удаленному серверу через SSH команды выполняются от имени суперпользователя;

      • ssh_options — список опций SSH, которые применяются при подключении к удаленным серверам:

        • StrictHostKeyChecking — опция включения/выключения проверки хост-ключей (host key checking); возможные значения:

          • yes — SSH-клиент строго проверяет ключи хостов при подключении к новым серверам: если ключ хоста не найден в файле known_hosts, SSH-клиент выдает предупреждение и запрашивает разрешение на добавление этого ключа в файл known_hosts;

          • no — отключение проверки ключей хостов;

        • UserKnownHostsFile — опция, указывающая путь к файлу, в котором хранятся известные ключи хостов (known hosts); по умолчанию, SSH клиент сохраняет ключи хостов в файле ~/.ssh/known_hosts.

  2. Создайте файл конфигурации /etc/salt/roster (в формате, указанном в примере ниже) и укажите в нем список устройств, к которым должны применяться настройки ростера, заданные в файле /etc/salt/master.d/roster.conf.

    Пример файла:

    dev-osmax-vm0104.osmax.terra.inno.tech: {}
    dev-osmax-vm0105.osmax.terra.inno.tech: {}
    ...
    dev-osmax-vm0109.osmax.terra.inno.tech: {}

Настройка обмена SSH-ключами между сервером управления (master) и агентами (minions)

Настройки сервера управления (master)

Настройки, приведенные ниже, выполняются на хосте, на котором установлен сервера управления (master).

  1. Создайте директорию для хранения ключей, используемых salt-ssh, выполнив команду:

    sudo mkdir -p /etc/salt/pki/master/ssh/
  2. Создайте SSH-ключ, который позволит подключиться к хосту для последующей удаленной установки агента, выполнив команду:

    sudo ssh-keygen -b 3072 -t rsa -q -N '' -f /etc/salt/pki/master/ssh/salt-ssh.rsa -C "salt-ssh"
  3. Измените права доступа к файлу, выполнив команду:

    sudo chmod 600 /etc/salt/pki/master/ssh/salt-ssh.rsa
    Если сервер управления (master) запускается не под root-пользователем, может потребоваться смена владельца файла. Например, если сервер управления (master) запускается под пользователем с именем salt, выполните команду:
    sudo chown salt: /etc/salt/pki/master/ssh/salt-ssh.rsa
  4. Проверьте публичную часть созданного ключа и сохраните ее в буфер обмена для дальнейшего использования на удаленном хосте, выполнив команду:

    sudo cat  /etc/salt/pki/master/ssh/salt-ssh.rsa.pub

    Пример результата:

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCdAzMz56BL2XLxsayXA4LyEuFcBVKgU2MHOJltcR6AAMio4Sb8y2cvRhe3io9jhpl/8zsYjzpIRFpXJMK5W1INeVGs5x+MzpucrrcrvNzBdPWYXsEvyYgdzmpjB89X/66hr1qQZ6G/UXkFpdvpRfhE8yefYjZnIhj+dAiUF0ZhRm7oX7QYX2hOLLwGAZ3M9aOmqT+T9XmqF0yrf+KotREEvSlWtR0SJ3c67vqLxPXcn4hlrjAHrl6agvlGyHMVA1S9/cyDwh/3Q+WDS/M3TfHBiJWqXJQPC9rDtUOfJl9HT0RbkBif8wYOSkUO995iMarSj+hPL9pZ8a6u2+9EiSlNwIrAwj19OUvJl/ydek+49VhOvTqXO+UqeD+Yqlb0nEp4tip5XcSihUG2xl9c6GPVvNk8B4WWh2XHzxrEQpL2OXqcY1kbkguisaBUtFOmN3OaqGkoqdVAaIFiq1FJaF4b0yD4gmF5Ni5EaYPkApdHQO1Bu6jItnsXApVIywNpCGE= salt-ssh
Настройки удаленного хоста (без агента)

Настройки, приведенные ниже, выполняются на удаленном хосте, на котором еще не установлен агент (minion).

  1. Убедитесь, что служба sshd запущена и работает, выполнив команду:

    sudo systemctl status sshd

    Ответ должен содержать значение Active: active (running).

  2. Убедитесь, что создан пользователь, под которым будет производиться удаленная установка агента и под этим пользователем можно подключиться по SSH. Пользователь должен быть наделен root-правами или правами, необходимыми для выполнения административных действий.

    Ниже в качестве примера используется пользователь с именем salt-ssh.

  3. Откройте или создайте файл /home/salt-ssh/.ssh/authorized_keys для редактирования, где /home/salt-ssh — это домашний каталог пользователя, под которым будет производиться удаленная установка:

    sudo vi /home/salt-ssh/.ssh/authorized_keys
  4. Вставьте в файл публичный ключ, скопированный ранее в буфер обмена, например:

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCdAzMz56BL2XLxsayXA4LyEuFcBVKgU2MHOJltcR6AAMio4Sb8y2cvRhe3io9jhpl/8zsYjzpIRFpXJMK5W1INeVGs5x+MzpucrrcrvNzBdPWYXsEvyYgdzmpjB89X/66hr1qQZ6G/UXkFpdvpRfhE8yefYjZnIhj+dAiUF0ZhRm7oX7QYX2hOLLwGAZ3M9aOmqT+T9XmqF0yrf+KotREEvSlWtR0SJ3c67vqLxPXcn4hlrjAHrl6agvlGyHMVA1S9/cyDwh/3Q+WDS/M3TfHBiJWqXJQPC9rDtUOfJl9HT0RbkBif8wYOSkUO995iMarSj+hPL9pZ8a6u2+9EiSlNwIrAwj19OUvJl/ydek+49VhOvTqXO+UqeD+Yqlb0nEp4tip5XcSihUG2xl9c6GPVvNk8B4WWh2XHzxrEQpL2OXqcY1kbkguisaBUtFOmN3OaqGkoqdVAaIFiq1FJaF4b0yD4gmF5Ni5EaYPkApdHQO1Bu6jItnsXApVIywNpCGE= salt-ssh
  5. Убедитесь, что файл имеет правильные права доступа и владельца, выполнив команду:

    sudo chmod 600 /home/salt-ssh/.ssh/authorized_keys

    При необходимости отредактируйте данные, выполнив команду:

    sudo chown salt-ssh: /home/salt-ssh/.ssh/authorized_keys
  6. Выполните проверку доступов на хосте сервера управления (master), выполнив шаги, описанные в разделе ниже.

Проверка подключения на хосте сервера управления (master)

Чтобы выполнить проверку подключения к удаленному серверу с хоста сервера управления (master), выполните команду:

sudo ssh -i /etc/salt/pki/master/ssh/salt-ssh.rsa -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null "<имя_пользователя>@<имя_удаленного_хоста>" id

Где:

имя_удаленного_хоста — имя хоста, настройки которого были выполнены выше, и на который будет производиться установка агента (minion);

имя_пользователя — имя пользователя, под которым будет производиться подключение и запуск скриптов установки агента (minion) через Осмакс. В случае успешного подключения на удаленном хосте отображается идентификатор пользователя, например:

uid=1000(admin) gid=1000(admin) группы=1000(admin),27(sudo)

Модуль установки ОС

Модуль установки операционных систем (ОС) предназначен для автоматической установки ОС на устройства, поддерживающие BIOS (Basic Input/Output System) или UEFI (Unified Extensible Firmware Interface). Установка выполняется с использованием технологии iPXE (Internet Preboot eXecution Environment), которая позволяет загружать ОС через сеть по протоколам HTTP или HTTPS.

Файлы iPXE-загрузчика различаются в зависимости от используемой прошивки устройства (BIOS/UEFI), на которое устанавливается ОС.

Администратору системы необходимо самостоятельно сгенерировать эти файлы и загрузить на серверы HTTP(S) и/или TFTP, а также загрузить дистрибутив ОС, файлы установочного ядра ОС (kernel) и временной файловой системы (initrd) на HTTP(S)-сервер.

Затем с помощью пользовательского интерфейса «Кабинет администратора» настроить необходимый план развертывания и зарегистрировать устройства, на которые будет производиться установка, в модуле устанвки ОС.

Для дальнейшего скачивания iPXE-загрузчика на устройства по сети необходимо на данных устройствах установить и задать конфигурацию DHCP-сервера (DHCP-Proxy).

Дополнительно пользовательский интерфейс позволяет создать загрузочный образ, универсальный для разных версий прошивки устройств: BIOS, UEFI, UEFI-LEGACY (режим работы прошивки UEFI). Его можно скачать и записать на внешний автономный мединоситель, который будет использоваться для загрузки образа на устройства.

Доменная модель

При работе с модулем установки ОС используются следующие сущности:

Дистрибутив ОС

Сущность, предоставляющая установочный дистрибутив ОС, которая определяет, что будет установлено.

Включает:

  • ссылку на установочное ядро ОС во внешнем хранилище;

  • ссылку на файл временной файловой системы (initrd) во внешнем хранилище.

Профиль установки

Сущность, предоставляющая профиль установки, которая содержит информацию о том, как и с какими параметрами необходимо устанавливать ОС на устройство. Профиль установки может быть переиспользован — для одного установочного дистрибутива может существовать несколько профилей установки, определяющих способ и параметры установки OC из указанного дистрибутива.

Включает:

  • список опций, с которыми запускается установочное ядро ОС;

  • шаблон файла автоответов;

  • шаблон скрипта пост-установки.

План развертывания

Связывает устройство с профилем установки и позволяет указать специфичные для устройства опции установки, а также переопределить часть опций профиля установки.

Включает:

  • данные для создания root-пользователя ОС;

  • данные для создания локального пользователя ОС;

  • доменное имя устройства по умолчанию.

Шаблоны конфигурационных файлов

Сущность, представляющая шаблоны различных категорий для формирования конфигурационных файлов, файлов ответов, скриптов пост-установки.

В общем случае шаблоны не являются универсальными (например, шаблон файла ответов существенно различается для семейства Debian и Red Hat).

Поддерживается шаблонизация в формате Jinja в части подстановки переменных и реализации логики формирования целевых файлов на основе шаблонов.

Поддерживаемые категории шаблонов:

  • файл автоответов;

  • скрипт пост-установки;

  • конфигурационный файл программы-загрузчика.

Универсальный загрузочный образ

Загрузочный образ, с помощью которого можно выполнить установку OC на устройство с медианосителя.

Модуль установки ОС позволяет изменять только имя формируемого ISO-образа и имя сущности, а формируемые загрузочные образы имеют одинаковое поведение.

Устройство

Описание конечного устройства, на которое устанавливается ОС. Устройство должно обладать как минимум одним сетевым интерфейсом.

Включает:

  • hostname;

  • сетевой интерфейс (определяет MAC-адрес и имя домена устройства);

  • ссылка на план развертывания.

В ходе установки ОС устройство идентифицируется по его MAC-адресу.

Процесс установки ОС

Процесс установки включает:

Подготовительный этап

Для корректной работы модуля установки ОС необходимо предварительно:

Подготовка артефактов

Подготовьте артефакты для универсального загрузочного образа (для загрузки по сети с медианосителя), а также все iPXE-загрузчики (для загрузки по сети). Ниже приведен перечень всех артефактов в структурированном виде:

  • iso-builder — каталог для сборки универсального загрузочного образа:

    • ipxe.bin-x86_64-pcbios —  каталог, содержащий ядро iPXE для BIOS:

      • ipxe.lkrn —  iPXE-загрузчик для BIOS;

    • isohdpxf.bin — файл для создания MBR-раздела на носителе для BIOS;

    • isolinux — каталог с файлами для загрузки с загрузочного образа (ISO) через ISOLINUX:

      • isolinux.bin — файл для поддержки загрузки с носителя в BIOS;

      • ldlinux.c32 — файл для поддержки загрузки с носителя в BIOS;

      • menu.c32 — файл для поддержки загрузки c носителя в BIOS;

    • uefi — каталог для загрузки в UEFI:

      • ipxe-x86_64.efi — iPXE-загрузчик для UEFI;

  • pxe — каталог с файлами для загрузки по сети (PXE):

    • pcbios — каталог с файлами для загрузки в среде BIOS:

      • undionly.kpxe — iPXE-загрузчик для загрузки по сети для BIOS и UEFI LEGACY;

    • uefi — каталог с файлами для загрузки в среде UEFI:

      • ipxe-x86_64.efi — iPXE-загрузчик для загрузки по сети для.

iPXE-загрузчик для UEFI унифицирован — один и тот же файл используется для сборки универсального загрузочного образа, а также для загрузки по сети.

Для получения исполняемых файлов загрузчика ISOLINUX можно установить пакеты syslinux-common, выполнив команду:

apt install isolinux syslinux-common

После установки пакетов необходимые файлы будут доступны по путям:

/usr/lib/ISOLINUX
/usr/lib/syslinux/modules/bios (ldlinux.c32, menu.c32)

Для получения исполняемых файлов загрузчика iPXE ipx.lkrn, ipxe-x86_64.efi и undionly.kpxe используйте инструкции, приведенные ниже. В инструкциях рассмотрены примеры создания файлов, используемых для загрузки ОС по протоколам HTTP и HTTPS.

Создание файлов iPXE-загрузчиков для установки по HTTP
  1. Установите необходимые пакеты и зависимости, выполнив команду:

    apt install gcc binutils make perl syslinux git
  2. Скопируйте исходный код для сборки iPXE-загрузчика, выполнив команду:

    mkdir ipxe
    git clone https://github.com/ipxe/ipxe.git
  3. Добавьте поддержку params and param, выполнив команду:

    sed -i 's,//#define PARAM_CMD,#define PARAM_CMD,' ipxe/src/config/general.h
    cd ipxe/src
  4. Соберите файл iPXE-загрузчика для UEFI, выполнив команду:

    make bin-x86_64-efi/ipxe.efi
  5. Соберите файл iPXE-загрузчика для BIOS Legacy, выполнив команду:

    make bin/undionly.kpxe
  6. Соберите файл iPXE-загрузчика для BIOS, выполнив команду:

    make bin/ipxe.lkrn
Создание файлов iPXE-загрузчиков для установки по HTTPS
При работе по HTTPS не забудьте также выполнить дополнительные настройки модуля установки ОС (см. раздел «Дополнительные настройки при работе по HTTPS (доверенная установка ОС)»).
  1. Установите необходимые пакеты и зависимости, выполнив команду:

    apt install gcc binutils make perl mtools genisoimage syslinux openssl nginx sbsigntool git uuid-runtime efitools liblzma-dev
  2. Скопируйте исходный код для сборки iPXE-загрузчика, выполнив команду:

    mkdir ipxe
    git clone https://github.com/ipxe/ipxe.git
  3. Добавьте поддержку HTTPS, выполнив команду:

    sed -i 's/#undef\tDOWNLOAD_PROTO_HTTPS/#define\tDOWNLOAD_PROTO_HTTPS/' ipxe/src/config/general.h
  4. Добавьте поддержку params and param, выполнив команду:

    sed -i 's,//#define PARAM_CMD,#define PARAM_CMD,' ipxe/src/config/general.h
    cd ipxe/src
  5. Соберите файл iPXE-загрузчика с корневым сертификатом сертификат (открытый ключ) УЦ, выполнив команду:

    make bin-x86_64-efi/ipxe.efi CERT=${path}/rootCA.crt TRUST=${path}/rootCA.crt
  6. Соберите файл iPXE-загрузчика для BIOS Legacy с корневым сертификатом (открытый ключ) УЦ, выполнив команду:

    make bin/undionly.kpxe CERT=${path}/rootCA.crt TRUST=${path}/rootCA.crt
  7. Соберите файл iPXE-загрузчика для BIOS с корневым сертификатом (открытый ключ) УЦ, выполнив команду:

    make bin/ipxe.lkrn CERT=${path}/rootCA.crt TRUST=${path}/rootCA.crt

    Где переменная ${path} — путь к корневому сертификату УЦ; значение переменной определяется администратором при выполнении соответствующей команды.

Загрузка артефактов на HTTP(S)-сервер и/или TFTP-сервер

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

  • на HTTP(S)-сервере:

    • ipxe-x86_64.efi;

    • ipx.lkrn;

    • isohdpxf.bin;

    • isolinux.bin;

    • ldlinux.c32;

    • menu.c32;

  • на TFTP-сервере:

    • ipxe-x86_64.efi;

    • undionly.kpxe.

Конфигурация модуля osmax-provisioner

После того как вы разместите установочные файлы на требуемых серверах, укажите абсолютные пути до них в конфигурационном файле application.properties модуля osmax-provisioner. (см. документ «Руководство по установке» раздел «Конфигурация модуля osmax-provisioner. Артефакты для создания универсального загрузочного образа»).

Дополнительные настройки при работе по HTTPS (доверенная установка ОС)

При необходимости использования доверенной установки ОС выполните настройки:

  1. Подготовьте SSL-сертификаты, которые будут использоваться для шифрования соединений.

  2. Разместите корневой сертификат УЦ и hash-имя в HTTPS-репозитории.

  3. Укажите сертификат УЦ и закрытый ключ в конфигурационном файле веб-сервера.

  4. Разместите сертификат УЦ и закрытый ключ в HTTPS-репозитории.

  5. Выполните настройки модуля osmax-provisioner.

  6. Сохраните корневой сертификат в файле keystore.jks на устройстве, предварительно сконвертировав его в формат .der.

Выпуск сертификатов

Чтобы выпустить сертификаты с закрытыми ключами, выполните шаги:

  1. Создайте сертификаты для HTTPS-сервера, выполнив команду:

    mkdir -p https_key/src && cd https_key/src
  2. Создайте корневой закрытый ключ, выполнив команду:

    openssl genpkey -algorithm RSA -out rootCA.key -aes-128-cbc
  3. Создайте корневой сертификат (открытый ключ), выполнив команду:

    openssl req -x509 -new -key rootCA.key -sha256 -days 3650 -out rootCA.crt
    #   Country Name (2 letter code) [AU]:RU
    #   State or Province Name (full name) [Some-State]:Moscow
    #   Locality Name (eg, city) []:Moscow
    #   Organization Name (eg, company) [Internet Widgits Pty Ltd]:wd2
    #   Organizational Unit Name (eg, section) []:.
    #   Common Name (e.g. server FQDN or YOUR name) []:wd2
  4. Создайте файл .srl порядковых номеров для выпуска сертификатов и приведите его к виду:

    # cat rootCA.srl
    00
  5. Создайте конфигурационный файл .cnf для домена и приведите его к виду:

    cat provisioning.cnf
    [ req ]
    default_bits = 2048
    distinguished_name  = req_distinguished_name
    req_extensions     = req_ext
    [ req_distinguished_name ]
    countryName                  = Country Name (2 letter code)
    countryName_default          = RU
    stateOrProvinceName          = State or Province Name (full name)
    stateOrProvinceName_default  = Moscow
    localityName                 = Locality Name (eg, city)
    localityName_default         = Moscow
    organizationName             = Organization Name (eg, company)
    organizationName_default     = wd2
    commonName                   = Common Name (eg, YOUR name or FQDN)
    commonName_max               = 64
    commonName_default           = provisioning.wd2.local
    [ req_ext ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    subjectAltName          = DNS:provisioning.wd2.local
  6. Создайте закрытый ключ для домена, выполнив команду:

    openssl genpkey -algorithm RSA -out provisioning.key
  7. Создайте файл запроса для домена, выполнив команду:

    openssl req -new -key provisioning.key -config provisioning.cnf -reqexts req_ext -out provisioning.csr
  8. Создайте сертификат для домена provisioner, выполнив команду:

    openssl x509 -req -days 730 -CA rootCA.crt -CAkey rootCA.key -extfile provisioning.cnf -extensions req_ext -in provisioning.csr -out provisioning.crt
  9. Создайте сертификат для нового домена (новая конечная точка (endpoint) HTTPS-репозиторий) по аналогии или используйте один wildcard-сертификат для всех, заменив на предыдущем шаге provisioning.wd2.local на *.wd2.local.

  10. Создайте хеш-имя сертификата, выполнив команду:

    cp /path/to/rootCA.crt /path/to/$(openssl x509 -noout -hash -in rootCA.crt).0
Дополнительная конфигурация веб-сервера (на примере Nginx)

Для того чтобы веб-сервер мог обрабатывать безопасные HTTPS-запросы с использованием заданного сертификата и ключа, в его конфигурационном файле задайте настройки:

# Дополнить конфигурацию для работы по HTTPS.
# На примере Nginx
#cat /etc/nginx/sites-enabled/default
server {
listen 443 ssl;
server_name provisioning.wd2.local;

    ssl_certificate /etc/nginx/ssl/provisioning.wd2.local.crt;
    ssl_certificate_key /etc/nginx/ssl/provisioning.wd2.local.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

Где:

  • listen — настраивает прослушивание портов на сервере;

  • server_name provisioning.wd2.local — имя хоста (домен), для которого будет работать данный виртуальный сервер;

  • ssl_certificate — путь к файлу сертификата SSL, который будет использоваться для шифрования соединений;

  • ssl_certificate_key — путь к файлу закрытого ключа, который соответствует сертификату SSL;

  • ssl_protocols — поддерживаемые версии протокола TLS;

  • ssl_ciphers  — набор шифров, которые могут использоваться для шифрования соединений.

Конфигурация модуля osmax-provisioner

В конфигурационном файле application.properties модуля osmax-provisioner (см. документ «Руководство по установке» раздел «Конфигурация модуля osmax-provisioner») раскомментируйте параметры:

## Параметры для настройки SSL-соединения
## Для включения режима работы по HTTPS, необходимо раскомментировать следующие параметры:
## Настройка для отклонения HTTP-запросов
#quarkus.http.insecure-requests=disabled
#quarkus.http.ssl-port=8081
## Путь до хранилища сертификатов в формате JKS:
#quarkus.http.ssl.certificate.key-store-file=/opt/osmax-core/keystore.jks
## Пароль от хранилища сертификатов:
#quarkus.http.ssl.certificate.key-store-password=keystore@12345
Изменение формата корневого сертификата

Для конвертации формата корневого сертификата rootCA.crt в формат .der используйте команду:

openssl x509 -outform DER -in rootCA.crt -out rootCA.der

Настройка модуля установки ОС через пользовательский интерфейс «Кабинет Администратора»

Настройка плана развертывания

Для настройки плана развертывания заполните следующие справочники в пользовательском интерфейсе «Кабинет Администратора»:

Для удобства создания собственных планов развертывания продукт предоставляет предустановленный пример настроек справочников (см. раздел «Предустановленный пример настроек установки ОС Astra Linux 1.7.5.9»).
Дистрибутивы

Cправочник «Дистрибутивы» позволяет управлять установочными дистрибутивами, которые определяют операционную систему (ОС), её версию, архитектуру процессора и расположение установочных файлов.

Подробно работа со справочником описана в документе «Руководство администратора» в разделе «Создание и настройка дистрибутивов».

Перед началом работы со справочником убедитесь, что подготовленный распакованный дистрибутив ОС (установочные пакеты), а также файлы kernel и initrd опубликованы на HTTP(S)-сервере.
Шаблоны

Cправочник «Шаблоны» позволяет управлять шаблонами различных типов.

Подробно работа со справочником описана в документе «Руководство администратора» в разделе «Управление шаблонами конфигурационных файлов».

Рендеринг шаблонов

Модуль установки ОС поддерживает шаблоны, с помощью которых можно сформировать:

  • общий конфигурационный файл программы-загрузчика;

    Конфигурационный файл, который размещается в универсальном загрузочном образе в момент формирования образа и отвечает за инициализацию сетевого интерфейса устройства, а также обеспечивает скачивание устройство-специфичной конфигурации программы-загрузчика.

    Пример шаблона:

    #!ipxe
    
    {% set ipxeScript = osmax_provisioner_base_url +  '/v1/boot_loaders/ipxe/config?mac=' %}
    
    echo LCM Bootdisk: Generic image
    
    {% for i in range(33) %}
    :net{{ i }}
    echo net{{ i }} - mac is ${net{{ i }}/mac}
    isset ${net{{ i }}/mac} || goto no_nic
    echo start dhcp for net{{ i }}
    dhcp net{{ i }} || goto net{{ i + 1 }}
    echo start chain for net{{ i }} - {{ ipxeScript }}${net{{ i + 1 }}/mac}
    chain {{ ipxeScript }}${net{{ i }}/mac} || goto net{{ i + 1 }}
    {% endfor %}
    
    :net33
    echo net33
    goto no_nic
    
    exit 0
    
    ifstat
    :no_nic
    echo -n Enter interface name to boot from (e.g. net0):  && read interface
    echo Selected ${interface} with mac ${interface}/mac
    isset ${interface}/mac && goto get_static_ip
    echo Interface ${interface} is not initialized, try again
    goto no_nic
    
    :get_static_ip
    ifopen ${interface}
    echo Please enter IP details for ${interface}
    echo
    echo -n IP address      :  && read ${interface}/ip
    echo -n Subnet mask     :  && read ${interface}/netmask
    echo -n Default gateway :  && read ${interface}/gateway
    echo -n DNS server      :  && read dns
    chain {{ ipxeScript }}${interface}/mac || goto boot_failure
    exit 0
    
    :boot_failure
    echo Cannot continue, spawning shell
    shell
  • устройство-специфичный конфигурационный файл;

    Индивидуальный конфигурационный файл программы-загрузчика для конкретного устройства, который скачивается на устройство в ходе выполнения скрипта конфигурационного файла программы-загрузчика для универсального загрузочного образа. Отвечает за скачивание на устройство и вызов на исполнение файлов kernel, initrd. Обеспечивает актуализацию статуса процесса установки (как позитивного, так и ошибочных), взаимодействуя с API модуля установки ОС.

    Пример шаблона:

    #!ipxe
    
    {% set autoinstallScript = osmax_provisioner_base_url + unattended_install_file_url + '?mac=' %}
    
    echo Astra iPXE configuration loaded
    kernel {{ repository_url }}{{ kernel }} initrd=initrd.gz modprobe.blacklist=evbug priority=critical debian-installer/allow_unauthenticated_ssl=true auto-install/enable=true  netcfg/choose_interface=auto url={{ autoinstallScript }}${netX/mac} {{ kernel_options }} || goto failed_install_kernel
    initrd {{ repository_url }}{{ initrd }} || goto failed_install_initrd
    boot || goto failed_install_boot
    
    :failed_install_kernel
    params
    param step INSTALL_ERROR_KERNEL
    param additionalInfo kernel {{ repository_url }}{{ kernel }}x initrd=initrd.gz modprobe.blacklist=evbug priority=critical debian-installer/allow_unauthenticated_ssl=true auto-install/enable=true  netcfg/choose_interface=auto url={{ autoinstallScript }}${netX/mac} {{ kernel_options }}
    param status INSTALL_ERROR
    chain {{ osmax_provisioner_base_url }}/v1/unprovisioned_machines/{{machine_id}}/installation_process/status##params || goto error
    
    :failed_install_initrd
    params
    param step INSTALL_ERROR_INITRD
    param status INSTALL_ERROR
    param additionalInfo initrd {{ repository_url }}{{ initrd }}
    chain {{ osmax_provisioner_base_url }}/v1/unprovisioned_machines/{{machine_id}}/installation_process/status##params || goto error
    
    :failed_install_boot
    params
    param step INSTALL_ERROR_BOOT
    param status INSTALL_ERROR
    chain {{ osmax_provisioner_base_url }}/v1/unprovisioned_machines/{{machine_id}}/installation_process/status##params || goto error
    
    :error
    echo Cannot continue, spawning shell
    shell
  • файл ответов;

    Файл для автоматической установки ОС без участия пользователя. Обеспечивает актуализацию статуса процесса установки (как позитивного, так и ошибочных), взаимодействуя с API модуля установки ОС. Вызывает выполнение скрипта пост-установки.

    Пример шаблона:

    # Выбор языка
    d-i debian-installer/locale string ru_RU
    d-i debian-installer/locale select ru_RU.UTF-8
    
    # Настройка раскладки клавиатуры
    d-i console-tools/archs               select at
    d-i console-keymaps-at/keymap         select ru
    d-i console-setup/toggle              string Alt+Shift
    d-i console-setup/layoutcode          string ru
    d-i keyboard-configuration/toggle     select Ctrl+Shift
    d-i keyboard-configuration/layoutcode string ru
    d-i keyboard-configuration/xkb-keymap select ru
    d-i languagechooser/language-name-fb  select Russian
    d-i countrychooser/country-name       select Russia
    
    # Конфигурирование сети
    d-i netcfg/enable        boolean true
    # Устанавливается переменная hostname
    d-i netcfg/hostname      string {{ hostname }}
    #d-i netcfg/get_hostname  string {{ hostname }}
    # Устанавливается переменная domain
    d-i netcfg/get_domain    string {{ domain }}
    
    # Выбор компонент репозитория
    d-i apt-setup/non-free        boolean true
    d-i apt-setup/contrib         boolean true
    d-i apt-setup/services-select none
    
    # Настройки зеркал репозиториев
    d-i apt-setup/use_mirror boolean false
    
    # Настройка инсталляционного репозитория
    d-i mirror/country        string manual
    d-i mirror/protocol       string http
    d-i mirror/http/hostname  string <<АДРЕС ИНСТАЛЛЯЦИОННОГО РЕПОЗИТОРИЯ>>
    d-i mirror/http/directory string <<КАТАЛОГ С ИНСТАЛЛЯЦИОННЫМИ ФАЙЛАМИ>>
    d-i mirror/http/proxy     string
    
    # Отключение выбора установки по ssh
    d-i network-console/enable boolean false
    
    # Разметка диска
    d-i partman-auto/method                string regular
    
    # QEMU specific fix - it places usb as /dev/sda and hdd as /dev/sdb but we
    # also need to support cd-rom where hdd is /dev/sda
    # https://github.com/turnkeylinux/di-live/blob/master/d-i/source/debian-installer-utils/list-devices-linux
    #d-i partman-auto/disk                  string /dev/sda
    d-i partman/early_command              string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
    
    d-i partman-auto/purge_lvm_from_device boolean true
    d-i partman-lvm/confirm                boolean true
    d-i partman-auto/choose_recipe         select boot-root
    d-i partman/confirm_write_new_label    boolean true
    d-i partman/choose_partition           select finish
    d-i partman/confirm                    boolean true
    d-i partman-auto-crypto/erase_disks    boolean true
    d-i partman-basicfilesystems/no_swap   boolean false
    d-i partman-target/mount_failed        boolean true
    d-i partman-partitioning/unknown_label boolean true
    d-i partman-lvm/vgdelete_confirm       boolean true
    d-i partman/confirm_nooverwrite        boolean true
    d-i partman-auto-lvm/no_boot           boolean false
    d-i partman-efi/non_efi_system         boolean true
    # Выбор способа монтирования
    d-i partman/mount_style                select uuid
    
    # Установка часов
    d-i clock-setup/utc  boolean true
    d-i time/zone string Europe/Moscow
    
    # Установка репозитория
    d-i apt-setup/non-free-firmware            boolean false
    d-i apt-setup/disable-cdrom-entries        boolean true
    d-i apt-setup/services-select              multiselect
    d-i debian-installer/allow_unauthenticated boolean true
    
    # Параметры пользователя root
    d-i passwd/root-login            boolean true
    # Установка переменной root_crypted_password
    d-i passwd/root-password-crypted password {{ root_crypted_password }}
    
    # Параметры локального пользователя
    d-i passwd/make-user             boolean {{ is_create_user }}
    # Установка переменной user_full_name
    d-i passwd/user-fullname         string {{ user_full_name }}
    # Установка переменной username
    d-i passwd/username              string {{ user_name }}
    # Пароль локального пользователя
    d-i passwd/user-password-crypted password {{ user_crypted_password}}
    d-i passwd/user-default-groups   string {{ user_name }} sudo
    
    # Установка базовой системы
    d-i base-installer/kernel/image string linux-image-generic
    
    # Установка программы-загрузчика
    d-i grub-installer/only_debian      boolean true
    d-i grub-installer/bootdev          string /dev/sda
    d-i grub-installer/with_other_os    boolean false
    # Пароль программы-загрузчика GRUB
    d-i grub-installer/password-crypted password $1$kc7j6jdt$WPn8SmeAna5Tz2dxaH5Ww0
    
    # Выбор ПО для установки
    tasksel tasksel/first                                   multiselect ssh-server
    d-i pkgsel/include                                      string open-vm-tools curl net-tools wget network-manager
    popularity-contest popularity-contest/participate       boolean false
    d-i astra-additional-setup/os-check                     select Advanced security level Voronezh
    d-i astra-additional-setup/additional-settings-voronezh multiselect Enable Mandatory Integrity Control, Disable ptrace capability
    
    # Завершение установки
    d-i finish-install/reboot_in_progress note
    
    # Регистрация старта установки (внутреннее использование, зарезервировано, удаление инструкции приведет к ошибкам регистрации статуса установки)
    d-i preseed/early_command string wget --method=post --body-data='status=IN_PROCESS&step=IN_PROCESS_EARLY' --header="content-type: application/x-www-form-urlencoded" -O- {{ osmax_provisioner_base_url }}/v1/unprovisioned_machines/{{ machine_id }}/installation_process/status
    
    # Финальные действия при установке
    # Для расширения шаблона можно добавлять действия перед командой "Вызов скрипта пост-инсталляции"
    d-i preseed/late_command string \
    # Вызов скрипта пост-инсталляции
    in-target wget {{ osmax_provisioner_base_url }}/v1/provisioning_scripts?machineId={{ machine_id }} -O /tmp/post_install.sh; \
    in-target chmod +x /tmp/post_install.sh; \
    in-target /tmp/post_install.sh; \
    # Формирование файла-метки
    in-target sh -c "mkdir -p {{ os_install_label_path }} && touch {{ os_install_label_path }}/{{ installation_label }}"; \
    # Регистрация завершения установки
    in-target wget --method=post --body-data='status=FINISHED&step=FINISHED' --header="content-type: application/x-www-form-urlencoded" -O- {{ osmax_provisioner_base_url }}/v1/unprovisioned_machines/{{ machine_id }}/installation_process/status;

    При регистрации шаблона явно укажите строки, приведенные в примере ниже. Для их указания можно использовать конфигурируемые плейсхолдеры.

    # Настройка инсталляционного репозитория
    ..
    d-i mirror/http/hostname  string <<АДРЕС ИНСТАЛЛЯЦИОННОГО РЕПОЗИТОРИЯ>>
    d-i mirror/http/directory string <<КАТАЛОГ С ИНСТАЛЛЯЦИОННЫМИ ФАЙЛАМИ>>
  • скрипт пост-установки.

    Скрипт, обеспечивающий выполнение необходимых действий после установки ОС.

    Пример шаблона:

    #!/bin/bash
    {# Переменные шаблона пост-инсталляционного скрипта #}
    {# Для использования шаблона необходимо опредилить переменные, убрав комментари и указать для них (переменных) значения#}
    {# Публичные ключи apt репозитоария repository_keys. Ключи можно задать в явном виде, поместив содержимое в публичного ключа в поле data. #}
    {# Eсли планируется получать публичный ключ с http[s]- репозитория, то в поле url указать путь по которому можно получить ключ.#}
    {#{% set repository_keys = [
       {
            'keyring': '/etc/apt/trusted.gpg.d/apt-company-local.gpg',
            'data':'<публичный ключ>',
            'url':'<путь к репозиторию с публичным ключом>'
        }
    ]%}#}
    
    {# sources_list_repositories задает список репозиториев, которые необходимо добавить в /etc/apt/source.list #}
    {#{% set sources_list_repositories = [
        { 'repo': 'deb https://apt.local.reository/repository/astra-frozen/1.7_x86-64/1.7.5/repository-base/ 1.7_x86-64 main contrib non-free' },
        { 'repo': 'deb https://apt.local.reository/repository/astra-frozen/1.7_x86-64/1.7.5/repository-update/ 1.7_x86-64 main contrib non-free' },
        { 'repo': 'deb https://apt.local.reository/repository/astra-frozen/1.7_x86-64/1.7.5/repository-extended/ 1.7_x86-64 main contrib non-free' },
        { 'repo': 'deb https://apt.local.reository/repository/astra-frozen/1.7_x86-64/1.7.5/repository-main/ 1.7_x86-64 main contrib non-free' }
    ]%}#}
    
    {# login_configuration - задает список Apt login configuration файлов для добавления в /etc/apt/auth.conf.d/", в случае
    если не требуется данная настройка, то список остается пустой#}
    {#{% set login_configurations = [
        { 'filename': 'apt1-proxy-company-local',
          'machine': 'apt1-proxy-company-local/repository/apt-1/',
          'login': 'username',
          'password': 'password' },
        { 'filename': 'apt2-proxy-company-local',
          'machine': 'apt2-proxy.company.local/repository/apt-2/',
          'login': 'username',
          'password': 'password' }
    ]%}#}
    {# Список дополнительных apt - sources файлов, добавляемых в /etc/apt/auth.conf.d/, в случае если не требуется, то
    список должен быть пустым #}
    {#{% set repositories = [
        { 'filename': 'apt-company-local-osmax',
          'repo': 'deb https://apt.company.local/repository/osmax/ 1.7_x86-64 main' },
        { 'filename': 'apt-company-local-fluentbit',
          'repo': 'deb https://apt.company.local/repository/fluentbit/buster buster main' }
    ]%}#}
    
    {# Призанак необходимости ввод в домен #}
    {#{% set join_domain_enabled = false %}#}
    {# join_domain_script - способ получения скрипта, base64 - скрипт передается в шаблоне в бинарном виде в кодировке base64,
     скрипт располагается на http репозитории, url - url, по которому можно скачать скрипт ввода в домен#}
    {#{% set join_domain_script = {
        'base64': '<скрипт в бинароном виде в кодировке base64>',
        'url': '<url по которому можно получить бинарый скрипт ввода в домен>'
    }
    %}#}
    {# Дополнительные данные о подразделении, куда необходимо включить устройство (Organizational Unit) #}
    {% set join_domain_ou = '' %}
    
    set -e
    
    {% if repository_keys | length > 0  -%}
    echo "Добавление Apt keys"
    {%- for key_record in repository_keys -%}
    {% set key_tmp_file = "/tmp/" + ((key_record.keyring).split("/") | last) %}
    {% if key_record.data | length > 0%}
    cat <<EOL > {{ key_tmp_file }}
    {{key_record.data}}
    EOL
    {% else %}
    wget  -q {{key_record.url}} -O {{key_tmp_file}}
    {% endif %}
    apt-key --keyring {{ key_record.keyring }} add {{ key_tmp_file }}
    rm {{ key_tmp_file }}
    {% endfor %}
    {% endif -%}
    
    {% if sources_list_repositories | length > 0  -%}
    echo "Очистка /etc/apt/sources.list и добавление записей о репозиториях"
    cat /dev/null > /etc/apt/sources.list
    {% for repo_record in sources_list_repositories -%}
    echo "{{ repo_record.repo }}" >> /etc/apt/sources.list
    {% endfor %}
    {% endif -%}
    
    {% if login_configurations | length > 0  -%}
    echo "Добавление Apt login configuration файлов в /etc/apt/auth.conf.d/"
    {% for login_record in login_configurations -%}
    echo "machine {{ login_record.machine }} login {{ login_record.login }} password {{ login_record.password }}" > /etc/apt/auth.conf.d/{{ login_record.filename }}.conf
    {% endfor %}
    {% endif -%}
    
    {% if repositories | length > 0  -%}
    echo "Добавление Apt sources файлов в /etc/apt/sources.list.d/"
    {% for repo_record in repositories -%}
    echo "{{ repo_record.repo }}" > /etc/apt/sources.list.d/{{ repo_record.filename }}.list
    {% endfor %}
    {% endif -%}
    
    {% if join_domain_enabled %}
    echo "Получение скрипта ввода в домен"
    
    {% if join_domain_script.base64 | length > 0 %}
    cat <<EOL > /tmp/join_domain_script
    {{join_domain_script.base64}}
    EOL
    base64 -d /tmp/join_domain_script > /usr/bin/join_domain
    {% else %}
    wget  -q {{join_domain_script.url}} -O /usr/bin/join_domain
    {% endif-%}
    chmod a+x /usr/bin/join_domain
    
    cat <<EOL > /usr/bin/join_domain.env
    DomainName={{ domain }}
    {% if join_domain_ou | length > 0 %}
    ChangeComputerOU=true
    {% else %}
    ChangeComputerOU=false
    {% endif %}
    NewComputerOU={{join_domain_ou}}
    EOL
    
    {% endif-%}
    
    echo "Cоздание скрипта первичной загрузки"
    
    cat <<EOL > /usr/bin/first-boot.sh
    #!/bin/bash
    set -x
    echo "Синхронизация индексных файлов Apt"
    apt-get update
    {% if join_domain_enabled %}
    echo "Ввод устройства в домен"
    /usr/bin/join_domain
    rm -f /usr/bin/join_domain.env
    rm -f /usr/bin/join_domain
    {% endif -%}
    sudo rm -f  /etc/systemd/system/first-boot-service.service
    shutdown -r +1
    sleep 58
    rm -f /usr/bin/first-boot.sh
    EOL
    
    echo "Подготовка сервис-юнита для запуска скрипта первичной загрузки"
    cat <<EOL > /etc/systemd/system/first-boot-service.service
    [Unit]
    Description=PostInstall Auto-update system and Join Domain
    After=rc-local.service network-online.target
    Wants=network-online.target
    Before=getty.target
    Before=systemd-user-sessions.service
    
    [Service]
    StandardOutput=tty
    Type=oneshot
    ExecStart=/usr/bin/first-boot-script.sh
    
    [Install]
    WantedBy=multi-user.target
    EOL

    При регистрации шаблона явно укажите строки, приведенные в примере ниже. Для их указания можно использовать конфигурируемые плейсхолдеры.

        'data':'<публичный ключ>',
        'url':'<путь к репозиторию с публичным ключом>'
    
        'base64': '<скрипт в бинароном виде в кодировке base64>',
        'url': '<url по которому можно получить бинарый скрипт ввода в домен>'
Cистемные плейсхолдеры

Шаблоны установки ОС — это текстовые файлы с поддержкой движка шаблонизации Jinja. Помимо стандартных возможностей шаблонизации, модуль установки ОС поддерживает работу с предопределёнными (системными) и конфигурируемыми плейсхолдерами.

Предопределённые (системные) плейсхолдеры вычисляются динамически для конкретного устройства и могут быть использованы только для ограниченного набора шаблонов:

  • шаблон устройство-специфичной конфигурации программы-загрузчика;

  • шаблон файла ответов;

  • шаблон постинсталляционного скрипта.

Модуль установки ОС поддерживает следующие системные плейсхолдеры:

  • hostname — имя хоста устройства;

  • domain — домен устройства;

  • mac — MAC-адрес устройства;

  • architecture — архитектура процессора (определяется на основании дистрибутива для плана развертывания);

  • initrd — путь к файлу initrd (определяется на основании дистрибутива для плана развертывания);

  • kernel — путь к файлу ядра ОС (определяется на основании дистрибутива для плана развертывания);

  • repository_url — путь к HTTP(S)-серверу, где размещены файлы ядра и initrd;

  • kernel_options — опции ядра ОС (определяется на основании дистрибутива для плана развертывания);

  • is_create_user — признак необходимости создавать пользователя (помимо root) в процессе установки (определяется на основании дистрибутива для плана развертывания);

  • password_hash_algorithm — алгоритм хеширования пароля root\пользователя (определяется на основании дистрибутива для плана развертывания);

  • root_crypted_password — зашифрованный пароль root;

  • user_full_name — полное имя пользователя, создаваемого помимо root при установке ОС;

  • user_name — имя пользователя, создаваемого помимо root при установке ОС;

  • user_crypted_password — зашифрованный пароль пользователя, создаваемого помимо root при установке ОС;

  • machine_id — идентификатор нового устройства;

  • installation_label — метка, прописываемая на устройство после установки ОС (определяется на основании плана развертывания, либо на основании версии конфигурации для сценария переустановки ОС).

Конфигурируемые плейсхолдеры

Конфигурируемые плейсхолдеры можно добавить в конфигурацию модуля установки ОС и свободно использоваться в любом шаблоне.

Чтобы объявить конфигурируемый плейсхолдер, задайте новый параметр в группу osmax.provisioner.template-engine.template-placeholders (см. раздел «Конфигурация модуля osmax-provisioner» документа «Руководство по установке»), указав в суффиксе требуемое название плейсхолдера и задав необходимое значение, например:

Конфигурационный параметр в application.properties модуля установки ОС:

osmax.provisioner.template-engine.template-placeholders.osmax_provisioner_base_url=http://myhost:9080

Использование в Jinja-шаблоне:

some_address={{ osmax_provisioner_base_url }}

Результат рендеринга шаблона:

some_address=http://myhost:9080
При указании имен конфигурируемых плейсхолдеров рекомендуется использовать стиль написания snake_case (слова разделяются символом подчеркивания (_), и все буквы пишутся в нижнем регистре).

Модуль установки ОС содержит следующие конфигурируемые плейсхолдеры:

  • osmax_provisioner_base_url — базовый URL-адрес для доступа к модулю установки ОС;

  • unattended_install_file_url — URL-адрес API модуля установки ОС для получения файла автоответов;

  • repository_cert_url — путь к репозиторию с сертификатами.

    Опциональный параметр, который используется для доверенного режима работы.
Профили установки

Cправочник «Профили установки» позволяет управлять профилями установки, которые определяют, как и с какими параметрами необходимо устанавливать ОС на устройство.

Подробно работа со справочником описана в документе «Руководство администратора» в разделе «Управление профилями установки».

Планы развертывания

Cправочник «Планы развертывания» позволяет управлять планами развертывания, которые определяют метод, профиль и режим установки; задают шаблон устройство-специфичного конфигурационного файла для программы-загрузчика; а также позволяют настроить создание дополнительного пользователя (помимо root), который будет зарегистрирован в установленной ОС.

Подробно работа со справочником описана в документе «Руководство администратора» в разделе «Управление планами развертывания ОС».

Предустановленный пример настроек установки ОС Astra Linux 1.7.5.9

Для удобства создания собственных планов развертывания продукт предоставляет предустановленный пример настроек справочников модуля установки ОС.

Предустановленный пример содержит согласованный комплект справочных данных, обслуживающих предустановленный план развертывания «Установка Astra Linux 1.7.5.9 c загрузочного образа».

Данный план развертывания предназначен для установки соответствующего дистрибутива ОС Astra Linux с медианосителя.

Перечень предустановленных справочных данных:

  • Дистрибутив "Astra Linux Special Edition 1.7.5.9";

  • Шаблоны:

    • Конфигурационный шаблон программы загрузчика BIOS iPXE universal base script;

    • Устройство-специфичный конфигурационный шаблон программы загрузчика bootimage-ipxe_cfg;

    • Шаблон файла автоответов astra.sample.preseed.cfg;

    • Шаблон постинсталляционного скрипта post install script;

  • Профиль установки «Astra Linux SE 1.7.5.9 установка с загрузочного образа»;

  • План развертывания «Установка Astra Linux 1.7.5.9 c загрузочного образа».

Конфигурирование предустановленного примера

Предустановленный пример содержит только справочные данные и минимально необходимое наполнение шаблонов для установки ОС. Для того чтобы с его помощью можно было установить ОС, требуются дополнительные действия администратора по конфигурированию:

  1. Установочные файлы должны быть размещены на HTTP(S)-сервере (см. разделы «Подготовка артефактов» и «Загрузка артефактов на HTTP(S)-сервер и TFTP-сервер»).

  2. Конфигурация модуля установки ОС должна содержать пути до соответствующих файлов (см. раздел «Конфигурация модуля osmax-provisioner. Артефакты для создания универсального загрузочного образа» документа «Руководство по установке»).

  3. Файлы kernel и initrd из дистрибутива Astra Linux SE 1.7.5.9 должны быть размещены на HTTP(S)-сервере.

  4. Распакованный дистрибутив ОС Astra Linux SE 1.7.5.9 (установочные пакеты) должен быть опубликован на HTTP(S)-сервере.

  5. Группа конфигурационных параметров модуля установки ОС quarkus.liquibase.change-log-parameters должна содержать настройки для доступа к опубликованным файлам kernel, initrd и пакетам дистрибутива ОС Astra Linux SE 1.7.5.9 (см. раздел «Конфигурация модуля osmax-provisioner. Подключение к БД» документа «Руководство по установке»).

    Настройки расположения kernel и initrd будут автоматически прописаны в справочную информацию по дистрибутиву Astra Linux SE 1.7.5.9 в базе данных модуля установки ОС при старте продукта.

    Настройки расположения пакетов дистрибутива ОС будут автоматически прописаны в предустановленный шаблон файла ответов astra.sample.preseed.cfg при старте продукта:

    d-i mirror/http/hostname  string x.x.x.x
    d-i mirror/http/directory string /astra
Формирование универсального загрузочного образа
Универсальный загрузочный образ используется только для установки ОС по сети с медианосителя. Если вы планируете устанавливать ОС по сети, данный шаг может быть опущен.

В текущей версии продукта справочник «Загрузочные образы» позволяет создать универсальный загрузочный образ, подходящий для разных версий прошивки устройства: BIOS, UEFI, UEFI-LEGACY (режим работы прошивки UEFI) и содержащий:

  • программу-загрузчик;

  • файлы ядра и временой файловой системы.

Созданный универсальный загрузочный скачивается и записывается на внешний автономный носитель как образ диска.

При формировании универсального загрузочного образа используются бинарные установочные файлы, расположенные на HTTP(S)-сервере. Пути к этим файлам прописываются в настройках модуля установки ОС.

Подробно работа со справочником описана в документе «Руководство администратора» в разделе «Создание и настройка загрузочных образов».

Подготовка устройства для установки на него ОС

Чтобы выполнить установку ОС по сети с медианосителя на устройство, необходимо зарегистрировать это устройство в модуле установки ОС, используя справочник «Новые устройства».

Подробно работа со справочником описана в документе «Руководство администратора» в разделе «Создание и настройка новых устройств».

Установка по сети

Установка по сети включает следующие шаги:

  1. Выполните настройку BIOS(UEFI) на устройстве, включив режим PXE и определив приоритеты загрузки следующим образом:

    1. Системный диск.

    2. PXE.

      Такой порядок позволяет выполнять поиск установщика ОС на системном диске и, при его отсутствии, запускать поиск загрузчика через PXE.

  2. Подготовьте инфраструктуру для хранения и получения начального загрузчика iPXE. Для этого на сервере, на котором установлен бэкенд продукта, выполните настройку:

    1. DHCP-сервера — отвечает за распределение и управление доступными IP-адресами и другими сетевыми параметрами, а также предоставляет пользовательскую конфигурацию сети.

    2. (Альтернативный шаг) DHCP-Proxy — используется, если на стороне заказчика по какой-либо причине невозможно внесение изменений в настройки DHCP-сервера. В этом случае необходимо развернуть DHCP-proxy (при его отсутствии) и вносить изменения в его конфигурацию.

      Ниже приведены примеры конфигурации DHCP-сервера и DHCP-Proxy. В конфигурации предусмотрены условия для архитектур BIOS и UEFI. Для каждой архитектуры указываются свои файлы загрузчиков, которые будут загружаться через TFTP-сервер или HTTP-репозиторий. При этом в инфраструктуре заказчика должны быть развернуты TFTP-сервер и/или HTTP-репозиторий, в зависимости от используемой архитектуры (BIOS или UEFI).

      В примере используются плейсхолдеры, которые администратор должен заменить вручную:

      • ${osmax_provisioner_base_url} — актуальная конечная точка (endpoint) модуля osmax-provisioner для получения стартового скрипта начального загрузчика;

      • {templateSlug} — уникальное системное имя шаблона конфигурационного файла для конечной точки v1/boot_loaders/ipxe/config?templateSlug=, для получения стартового скрипта загрузчика iPXE;

      • ${fqdn_tftp_server} — доменное имя (FQDN) поднятого TFTP-сервера, на котором хранится файл начального загрузчика iPXE;

      • ${fqdn_http_repo}- доменное имя (FQDN) HTTP-репозитория, на котором хранится файл начального загрузчика iPXE.

        Конфигурация DHCP-сервера:

        # cat /etc/dhcp/dhcpd.conf
        # базовые DHCP-опции
        option domain-name "wd2.local";
        option domain-name-servers 192.168.11.10;
        default-lease-time 7776000;
        max-lease-time 7776000;
        option ntp-servers 192.168.0.2;
        option routers 192.168.11.10;
        option ntp-servers 192.168.0.2;
        ddns-updates on;
        ddns-update-style interim;
        ignore client-updates;
        key dhcp-server.wd2.local. {
                algorithm hmac-md5;
                secret "R2xOu1NWXSPkvNqfP8Rm6Q==";
        }
        
        # Определение формата опции 93
        # При работе без DHCP-proxy раскомментировать
        #option client-architecture code 93 = unsigned integer 16;
        
        # Настройка сегмента сети
        subnet 192.168.11.0 netmask 255.255.255.0 {
            range 192.168.11.100 192.168.11.200;
        # При работе без DHCP-proxy раскомментировать блок
        ## Определение архитектуры клиента:
        ## Определение архитектуры DHCP-клиента как iPXE
        #    if exists user-class and option user-class = "iPXE" {
        ## Путь до iPXE-инструкции для iPXE-загрузчика
        #        filename "${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug}";
        ## Определение архитектуры DHCP-клиента как UEFI HTTP
        #    } elsif option client-architecture = encode-int ( 16, 16 ) {
        ## Путь до ipxe-загрузчика для UEFI
        #        filename "${fqdn_http_repo}/ipxe.efi";
        #        option vendor-class-identifier "HTTPClient";
        ## Определение архитектуры DHCP-клиента как BIOS
        #    } elsif option client-architecture = 00:00 {
        ## Имя файла iPXE-загрузчика для BIOS на TFTP-сервере
        #        filename "undionly.kpxe";
        ## Адрес TFTP-сервера
        #        next-server ${fqdn_tftp_server};
        ## Определение архитектуры DHCP-клиента как UEFI
        #    } elsif option client-architecture = 00:09 {
        ## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
        #        filename "ipxe.efi";
        ## Адрес TFTP-сервера
        #        next-server ${fqdn_tftp_server};
        ## Определение архитектуры DHCP-клиента как UEFI
        #    } elsif option client-architecture = 00:07 {
        ## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
        #        filename "ipxe.efi";
        ## Адрес TFTP-сервера
        #        next-server ${fqdn_tftp_server};
        ## Если архитектура не определена, отдавать iPXE-загрузчик для UEFI
        #    } else {
        ## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
        #        filename "ipxe.efi";
        ## Адрес TFTP-сервера
        #        next-server ${fqdn_tftp_server};
        #    }
        
        # базовые DHCP-опции
            ddns-domainname "wd2.local";
            ddns-rev-domainname "in-addr.arpa";
        
            zone 11.168.192.in-addr.arpa. {
                primary 127.0.0.1;
                key dhcp-server.wd2.local.;
                }
        }

        Конфигурация DHCP-сервера c доверенной установкой:

        # cat /etc/dhcp/dhcpd.conf
        # базовые DHCP-опции
        option domain-name "wd2.local";
        option domain-name-servers 192.168.11.10;
        default-lease-time 7776000;
        max-lease-time 7776000;
        option ntp-servers 192.168.0.2;
        option routers 192.168.11.10;
        option ntp-servers 192.168.0.2;
        ddns-updates on;
        ddns-update-style interim;
        ignore client-updates;
        key dhcp-server.wd2.local. {
                algorithm hmac-md5;
                secret "R2xOu1NWXSPkvNqfP8Rm6Q==";
        }
        
        # Определение формата опции 93
        # При работе без DHCP-Proxy раскомментировать
        #option client-architecture code 93 = unsigned integer 16;
        
        # настройка сегмента сети
        subnet 192.168.11.0 netmask 255.255.255.0 {
            range 192.168.11.100 192.168.11.200;
        # При работе без DHCP-Proxy раскомментировать блок
        ## Определение архитектуры клиента:
        ## Определение архитектуры DHCP-клиента как iPXE
        #    if exists user-class and option user-class = "iPXE" {
        ## Путь до iPXE-инструкции для iPXE-загрузчика (по протоколу HTTPS)
        #        filename "${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug}";
        ## Определение архитектуры DHCP-клиента как UEFI HTTP
        #    } elsif option client-architecture = encode-int ( 16, 16 ) {
        ## Путь до ipxe-загрузчика для UEFI
        #        filename "${fqdn_http_repo}/ipxe.efi";
        #        option vendor-class-identifier "HTTPClient";
        ## Определение архитектуры DHCP-клиента как BIOS
        #    } elsif option client-architecture = 00:00 {
        ## Имя файла iPXE-загрузчика для BIOS на TFTP-сервере
        #        filename "undionly.kpxe";
        ## Адрес TFTP-сервера
        #        next-server ${fqdn_tftp_server};
        ## Определение архитектуры dhcp-клиента как UEFI
        #    } elsif option client-architecture = 00:09 {
        ## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
        #        filename "ipxe.efi";
        ## Адрес TFTP-сервера
        #        next-server ${fqdn_tftp_server};
        ## Определение архитектуры DHCP-клиента как UEFI
        #    } elsif option client-architecture = 00:07 {
        ## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
        #        filename "ipxe.efi";
        ## Адрес TFTP-сервера
        #        next-server ${fqdn_tftp_server};
        ## Если архитектура не определена отдавать iPXE-загрузчик для UEFI
        #    } else {
        ## Имя файла iPXE-загрузчика для UEFI на TFTP-сервере
        #        filename "ipxe.efi";
        ## Адрес TFTP-сервера
        #        next-server ${fqdn_tftp_server};
        #    }
        
        # базовые DHCP-опции
            ddns-domainname "wd2.local";
            ddns-rev-domainname "in-addr.arpa";
        
            zone 11.168.192.in-addr.arpa. {
                primary 127.0.0.1;
                key dhcp-server.wd2.local.;
                }
        }

        Конфигурации DHCP-Proxy:

        cat /etc/dnsmasq.d/dhcp.conf
        # Основные настройки dnsmasq
        dhcp-no-override
        pxe-prompt="Press any key for boot menu", 2
        
        # Отключает DNS-службу, оставляя только DHCP-функциональность.
        port=0
        # Включает логирование DHCP-сообщений.
        log-dhcp
        
        # Создание меток для сопоставления архитектур
        dhcp-match=set:x86PC, option:client-arch, 0
        dhcp-match=set:BC_EFI, option:client-arch, 7
        dhcp-match=set:EFI _x86-64, option:client-arch, 9
        dhcp-match=set:HTTPClient,option:client-arch,16
        dhcp-match=set:iPXE,175
        
        # Загрузочные опции для iPXE-клиентов на основе меток
        dhcp-boot=tag:iPXE,${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug}
        dhcp-boot=tag:iPXE,tag:x86PC,${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug},,0.0.0.1
        dhcp-boot=tag:HTTPClient,${fqdn_http_repo}/ipxe.efi
        dhcp-boot=tag:!iPXE,tag:x86PC,undionly.kpxe,${fqdn_tftp_server}
        dhcp-boot=tag:!iPXE,tag:BC_EFI,ipxe.efi,${fqdn_tftp_server}
        dhcp-boot=tag:!iPXE,tag:EFI_ x86-64,ipxe.efi,${fqdn_tftp_server}
        # Диапазон DHCP, используемый в режиме проксирования (без выдачи IP-адресов).
        dhcp-range=192.168.11.100,proxy
        
        # DHCP option 93 | Client architecture
        # 0 Standard PC BIOS
        # 6 32-bit x86 EFI
        # 7 64-bit x86 EFI
        # 9 64-bit x86 EFI (obsolete)
        # 10    32-bit ARM EFI
        # 11    64-bit ARM EFI
        # 16    64-bit x86 UEFIhttpClient

        Конфигурации DHCP-Proxy с доверенной установкой:

        cat /etc/dnsmasq.d/dhcp.conf
        # Основные настройки dnsmasq
        dhcp-no-override
        pxe-prompt="Press any key for boot menu", 2
        
        # Отключает DNS-службу, оставляя только DHCP-функциональность.
        port=0
        # Включает логирование DHCP-сообщений.
        log-dhcp
        
        # Создание меток для сопоставления архитектур
        dhcp-match=set:x86PC, option:client-arch, 0
        dhcp-match=set:BC_EFI, option:client-arch, 7
        dhcp-match=set:EFI _x86-64, option:client-arch, 9
        dhcp-match=set:HTTPClient,option:client-arch,16
        dhcp-match=set:iPXE,175
        
        # Загрузочные опции для iPXE-клиентов на основе меток
        ## Путь до iPXE-инструкции для iPXE-загрузчика (по протоколу HTTPS)
        dhcp-boot=tag:iPXE,${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug}
        ## Путь до iPXE-инструкции для iPXE-загрузчика (по протоколу HTTPS)
        dhcp-boot=tag:iPXE,tag:x86PC,${osmax_provisioner_base_url}/v1/boot_loaders/ipxe/config?templateSlug={templateSlug},,0.0.0.1
        dhcp-boot=tag:HTTPClient,${fqdn_http_repo}/ipxe.efi
        dhcp-boot=tag:!iPXE,tag:x86PC,undionly.kpxe,${fqdn_tftp_server}
        dhcp-boot=tag:!iPXE,tag:BC_EFI,ipxe.efi,${fqdn_tftp_server}
        dhcp-boot=tag:!iPXE,tag:EFI_ x86-64,ipxe.efi,${fqdn_tftp_server}
        # Диапазон DHCP, используемый в режиме проксирования (без выдачи IP-адресов).
        dhcp-range=192.168.11.100,proxy
        
        # DHCP option 93 | Client architecture
        # 0 Standard PC BIOS
        # 6 32-bit x86 EFI
        # 7 64-bit x86 EFI
        # 9 64-bit x86 EFI (obsolete)
        # 10    32-bit ARM EFI
        # 11    64-bit ARM EFI
        # 16    64-bit x86 UEFIhttpClient
Процесс установки
  1. Устройство с помощью технологии PXE обращается к DHCP-серверу (DXCP-proxy). В ответ получает URL-адрес для скачивания iPXE-ядра и iPXE-скрипта.

  2. iPXE-скрипт запускается на устройстве, инициализирует сетевой интерфейс устройства и обращается к модулю установки ОС за iPXE-скриптом для конкретного устройства, указывая его MAC-адрес.

  3. Модуль установки OC по MAC-адресу выполняет поиск устройства и связанный с ним способ развертывания, на основе этой информации рендерит шаблон iPXE-скрипта для конкретного устройства и отдает сформированный скрипт.

  4. После инициализации сетевого интерфейса установочное ядро запрашивает у модуля установки ОС файл автоответов.

  5. Модуль установки ОС выполняет поиск устройства и связанный с ней способ развертывания по MAC-адресу, на основе этой информации рендерит шаблон файла автоответов для конкретного устройства и отдает сформированный скрипт.

  6. Установка ОС выполняется согласно внутренней логике ОС с использованием предоставленного файла автоответов. Если в конце файла автоответов есть вызов пост-установочного скрипта, то установочное ядро целевой ОС запрашивает у модуля установки ОС скрипт пост-установки.

  7. Модуль установки OC выполняет поиск устройства и связанный с ней способ установки по machineId, на основе этой информации рендерит шаблон пост-установочного скрипта и отдает сформированный скрипт.

  8. Установочное ядро целевой ОС (или установленное ядро целевой ОС, в зависимости от команды вызова скрипта) выполняет скрипт, после чего установка завершается.

Установка по сети c медианосителя

Установка по сети c медианосителя включает следующие шаги:

  1. Выполните настройку BIOS(UEFI) на устройстве, включив режим PXE и определив приоритеты загрузки следующим образом:

    1. Системный диск.

    2. USB.

  2. Подключите выбранный медианоситель, содержащий универсальный установочный образ, к устройству.

  3. Выполните перезагрузку устройства.

  4. Процесс установки ОС запустится в автоматическом режиме и завершится перезагрузкой устройства.

Процесс установки
  1. Универсальный загрузочный образ содержит универсальный iPXE-скрипт, который инициализирует сетевой интерфейс устройства и обращается к модулю установки ОС за iPXE-скриптом для конкретного устройства, указывая его MAC-адрес.

  2. Модуль установки OC по MAC-адресу выполняет поиск устройства и связанный с ним способ развертывания, на основе этой информации рендерит шаблон iPXE-скрипта для конкретного устройства и отдает сформированный скрипт.

  3. Устройство загружает установочное ядро целевой ОС и начинает ее установку.

  4. После инициализации сетевого интерфейса установочное ядро запрашивает у модуля установки ОС файл автоответов.

  5. Модуль установки ОС выполняет поиск устройства и связанный с ней способ развертывания по MAC-адресу, на основе этой информации рендерит шаблон файла автоответов для конкретного устройства и отдает сформированный скрипт.

  6. Установка ОС выполняется согласно внутренней логике ОС с использованием предоставленного файла автоответов. Если в конце файла автоответов есть вызов пост-установочного скрипта, то установочное ядро целевой ОС запрашивает у модуля установки ОС скрипт пост-установки.

  7. Модуль установки OC выполняет поиск устройства и связанный с ней способ установки по machineId, на основе этой информации рендерит шаблон пост-установочного скрипта и отдает сформированный скрипт.

  8. Установочное ядро целевой ОС (или установленное ядро целевой ОС, в зависимости от команды вызова скрипта) выполняет скрипт, после чего установка завершается.

После завершения установки не забудьте извлечь USB-накопитель и изменить в BIOS порядок загрузки, отдав приоритет жесткому диску компьютера.

Интеграции

Раздел содержит описание:

Интеграция с брокером сообщений Kafka

На Рис. 1 представлена схема интеграции бэкенда продукта с брокером сообщений Kafka.

kafka integration
Рис. 1. Интеграция бэкенда продукта с брокером сообщений Kafka

В рамках интеграции с брокером сообщений Kafka бэкенд продукта обеспечивает:

  • передачу данных со всех серверов управления (masters) в модуль бэкенда osmax-core;

    В брокере сообщений Kafka создается топик salt-topic — логическая единица организации данных, представляющая собой некоторое количество записей, которые называются сообщениями. Производитель, Kafka returner — модуль сервера управления (master), отправляет результаты выполнения команд и состояний, полученные от агентов (minions), в топик для дальнейшей обработки, а потребитель, модуль бэкенда продукта osmax-core, читает сообщения из него.

  • распределение запросов на установку ПО между серверами управления (masters);

    При запросе на установку ПО на агенте (minion) модуль бэкенда osmax-core отправляет HTTP-запрос, содержащий идентификатор агента (minion), на соответствующий сервер управления (master). Чтобы корректно определить сервер управления (master), модуль бэкенда osmax-core анализирует следующие сообщения о событиях SaltStack, полученные через брокер сообщений Kafka:

    • minion_ping — указывает на то, что агент (minion) только что отправил ping-запрос на сервер управления (master);

    • minion_start — указывает на то, что агент (minion) только что запустился;

    • /minion/refresh/<minion-id> — указывает на то, что была выполнена операция обновления данных на агенте (minion) с указанным идентификатором, который определяет Kafka returner при обработке сообщений.

  • регистрацию новых устройств в БД продукта;

    Модуль бэкенда osmax-provisioner получает информацию об успешной установке (устройство в статусе OS_INSTALLED — установлено), публикует информацию о нем в топике Apache Kafka provisioner-topic и переводит устройство в статус COMPLETED — выполнено.

    Модуль бэкенда osmax-core получает информацию о новом устройстве из топика provisioner-topic. Если такого устройства нет в БД, то создается новая запись о нем.

    Если при обработке сообщения возникает ошибка, то выполняются попытки обработать его повторно средствами конфигурируемого механизма retry. Если попытки повторной обработки не приводят к успеху, устройство не регистрируется в БД, а обрабатываемое сообщение перемещается в топик provisioner-dlq-topic (Dead Letter Queue) для последующей обработки администраторами системы в ручном режиме.

  • регистрацию устройств в БД продукта, на которых переустановлена ОС.

    Модуль бэкенда osmax-core передает информацию в топик osmax.core.os.reinstallation.machines об устройствах, а модуль бэкенда osmax-provisioner получает информацию об этих устройствах.

    Получив данные, osmax-provisioner регистрирует их и передает в топик osmax-provisioner.os.reinstallation.machines.registration.statuses статусы: COMPLETED — выполнено; или COMPLETED_WITH_ERROR — выполнено с ошибкой. Модуль osmax-core забирает эти данные и запускает применение формулы os-bootstrap-formula, которая выполняет подготовку к переустановке и перезапуск устройства. После этого инициируется процесс переустановки ОС.

    После переустановки ОС (или ошибки переустановки ОС) модуль osmax-provisioner передает данные отдельно по каждому устройству в топик provisioner-topic. Модуль osmax-core забирает эту информацию и актуализирует статус применения конфигурации «Переустановка ОС» к устройству.

Перед тем как настроить интеграцию необходимо:

  1. Установить Apache Kafka, следуя инструкциям в официальной документации.

  2. Создать топики, перечисленные ниже, следуя инструкции в официальной документации.

    1. Для передачи данных с серверов управления (masters) в модуль osmax-core (например, salt-topic).

    2. Для передачи информации о новых устройствах из модуля osmax-provisioner в модуль osmax-core (например, provisioner-topic).

    3. Dead Letter Queue (DLQ) для приема сообщений, которые не были успешно обработаны модулем osmax-core в рамках регистрации информации о новых устройствах (например, provisioner-dlq-topic). Такие сообщения в дальнейшем будут обрабатываться администраторами системы.

    4. Для передачи данных из модуля osmax-core в модуль osmax-provisioner об устройствах, на которые назначена переустановка (например, osmax-core.os.reinstallation.machines).

    5. Для передачи статуса переустановки из модуля osmax-provisioner в модуль osmax-core (например, osmax-provisioner.os.reinstallation.machines.registration.statuses).

      Для топиков рекомендуется задать параметры:

      1. retention — время, в течение которого сообщения будут храниться в топике до момента удаления;

      2. partitions — способ физического разделения данных в топике на несколько частей. Эти параметры могут быть настроены в зависимости от требований к производительности и надежности системы.

Настройка интеграции выполняется в несколько шагов при установке продукта отдельно для каждого сервера управления (master) и агента (minion). Подробное описание каждого шага содержится в руководстве по установке.

Последовательность шагов:

  1. При конфигурировании сервера управления (master) выполните настройку отправки событий в топик Apache Kafka (см. раздел «Настройка конфигурации отправки событий в Apache Kafka» документа «Руководство по установке»).

  2. После того как будут заданы настройки сервера управления (master), выполните настройку Kafka returner (см. раздел «Настройка Kafka returner» документа «Руководство по установке»).

  3. При конфигурировании агента (minion) задайте интервал времени (ping_interval) между отправкой ping-запросов от агента (minion) на сервер управления (master) (см. раздел «Настройка конфигурации агента (minion)» документа «Руководство по установке»).

  4. При конфигурировании модуля бэкенда osmax-core в конфигурационном в файле application.properties задайте:

    • параметры подключения к топикам Kafka (см. раздел «Конфигурация модуля osmax-core. Интеграция с Apache Kafka» документа «Руководство по установке»);

    • одинаковые порт, на котором будет запущен API-интерфейс, логин и пароль для подключения к серверу управления (master) (см. раздел см. «Конфигурация модуля osmax-core. Параметры настройки интеграции с S3-совместимым хранилищем» документа «Руководство по установке»).

  5. При конфигурировании модуля бэкенда osmax-procisioner в конфигурационном файле application.properties задайте параметры подключения к топикам Kafka (см. раздел «Конфигурация модуля osmax-provisioner. Интеграция с Apache Kafka» документа «Руководство по установке»).

Интеграция с S3-совместимым хранилищем

На Рис. 1 представлена схема интеграции с S3-совместимым хранилищем.

s3 integration
Рис. 2. Интеграция с S3-совместимым хранилищем

Интеграция с S3-совместимым хранилищем обеспечивает:

  • хранение файлов формул и файлов Pillar модуля координации (SaltStack);

  • хранение мультимедиа-контента, который используется для отображения в пользовательском интерфейсе «Магазин приложений».

Перед тем как настроить интеграцию необходимо:

  1. Cоздать техническую учетную запись для подключения к хранилищу.

  2. Создать бакеты:

    • salt-bucket — для хранения формул модуля координации (SaltStack);

    • pillar-bucket — для хранения данных хранилища Pillar модуля координации (SaltStack);

    • icons-bucket — для хранения иконок;

    • images-bucket — для хранения изображений и скриншотов;

    • others-bucket — для хранения прочего мультимедиа-контента;

    • script-bucket — для исполняемых файлов (скриптов), предназначенных для установки агентов (minions) на устройства;

    • bootloader-bucket — для исполняемых файлов (скриптов) IPXE-загрузчиков.

Настройка интеграции выполняется в несколько шагов при установке продукта отдельно для каждого сервера управления (master). Подробное описание каждого шага содержится в руководстве по установке.

Последовательность шагов для настройки хранения файлов формул и файлов Pillar модуля координации (SaltStack):

  1. При конфигурировании сервера управления (master) выполните настройку подключения сервера управления (master) к бакетам salt-bucket и pillar-bucket (см. раздел «Настройка подключения к S3-совместимому хранилищу» документа «Руководство по установке»).

(Опционально) загрузите пользовательские формулы в бакет salt-bucket, который вы подключили к

серверу управления (master) (см. раздел «Загрузка формул SaltStack» документа «Руководство администратора»).

+ NOTE: Подробную информацию о создании и использовании формул см. в разделе «Работа с формулами».

Для загрузки мультимедиа-контента в бакеты icons-bucket, images-bucket и others-bucket используйте раздел «Создание конфигурации программного обеспечения» пользовательского интерфейса «Кабинет администратора» (см. раздел «Тип конфигурации "Программное обеспечение"» раздел документа «Руководство администратора»).

Интеграция с LDAP-сервером

Интеграция бэкенда продукта с LDAP-сервером позволяет организовать централизованное управление учетными данными пользователей и ресурсами.

Чтобы включить интеграцию, выполните шаги:

Настройка подключения к LDAP-серверу

При установке или последующей настройке продукта в конфигурационном файле application.properties модуля osmax-core задайте настройки подключения к LDAP-серверу (см. документ «Руководство по установке» раздел «Предварительная конфигурация бэкенда» подразделы «Интеграция с источниками данных LDAP» и «Интеграция с источниками данных LDAP по протоколу SSL».

Настройка импорта учетных данных пользователей c сервера LDAP в БД продукта

Параметры импорта пользователей с сервера LDAP в БД продукта задаются посредством графического интерфейса администратора. Администратор настраивает отдельно для каждого LDAP-сервера (источника):

  • включение/выключение импорта;

  • расписание синхронизации;

  • набор папок внутри LDAP-структуры;

  • фильтры для извлечения пользователей.

Подробную информацию см. в разделе «Инвентаризация пользователей» в документе «Руководство администратора»).
Импортируемые данные пользователей

После того как будут выполнены настройки подключения и расписания, в БД продукта в таблицы users и user_groups по заданному расписанию будут импортироваться следующие данные о пользователях домена и их группах:

Параметр на LDAP-сервере Параметр в БД Описание

objectGUID

users.id

Уникальный идентификатор пользователя

sAMAccountName

users.login

Имя пользователя для входа в систему (логин)

userAccountControl

true

Указывает, что учетная запись пользователя выключена

userPrincipalName

users.domain_full_name

Полное доменное имя пользователя (например, ivanov@inno.tech или petrov@samara.vtb.ru)

userPrincipalName (подстрока)

users.domain

Имя домена в короткой форме записи (например, inno.tech или samara.vtb.ru)

mail

users.email

Адрес электронной почты

cn

users.common_name

Общее имя пользователя

name

users.first_name

Короткое имя пользователя

givenName

users.given_name

Имя пользователя

sn

users.last_name

Фамилия пользователя

displayName

users.display_name

Отображаемое имя пользователя

title

users.title

Должность пользователя

department

users.department

Отдел, в котором работает пользователь

company

users.company

Подразделение, в котором работает пользователь

memberOf

user_groups.group_name

Группы пользователя, связь один к многим

Настройка импорта данных устройств c сервера LDAP в БД продукта

Параметры импорта данных устройств с сервера LDAP в БД продукта задаются посредством графического интерфейса администратора. Администратор настраивает отдельно для каждого LDAP-сервера (источника):

  • включение/выключение импорта;

  • расписание синхронизации.

Подробную информацию см. в разделе «Инвентаризация устройств» в документе «Руководство администратора»).
Импортируемые данные устройств

После настройки подключения и расписания в БД продукта в таблицу machines по заданному расписанию будут импортироваться следующие данные устройств:

Параметр на LDAP-сервере Параметр в БД Описание

distinguishedName

ldap_dn

Уникальное имя (DN) устройства

cn

node_name

Общее имя устройства

operatingSystem

os_fullname

Операционная система

objectSid

object_sid

Идентификатор безопасности

Если вы используете Microsoft Active Directory, см инструкции по настройке LDAP over SSL в одноименном разделе.

Частичный импорт данных из LDAP

Частичный импорт данных, в отличие от полного, не требует сканирования всего LDAP-сервера. При первом импорте все данные загружаются в БД, а при последующих синхронизациях сохраняются COOKIE, позволяющие отслеживать изменения и импортировать только обновленные данные.

Такой подход позволяет снизить нагрузку на LDAP-сервер и сетевой трафик.

Частичный импорт данных реализован на базе технологии DirSync от Microsoft для доменов Active Directory и совместимых с ними. Для LDAP-серверов, которые не поддерживают эту технологию, такой вид импорта данных недоступен.

По умолчанию возможность частичной синхронизации отключена. Также продукт не поддерживает принудительное выполнение частичной синхронизации.

Настройки фильтров и директорий LDAP для импорта данных универсальны и не требуют отдельной конфигурации для полного и частичного импорта.

При использовании технологии DirSync поддерживаются не все возможности фильтрации атрибутов из LDAP (подробную информацию см. в официальной документации Microsoft).
Включение опции частичного импорта
  1. Выдайте разрешения пользователю, от имени которого устанавливается подключение к LDAP-серверу, на получение запросов для режима DirSync:

    1. Зайдите на контроллер домена Windows Server под пользователем с правами администратора домена.

    2. Перейдите в Control Panel > System and Security > Administrative Tools > Active Directory Users and Computers.

    3. На открывшейся форме включите опцию View > Advanced Features:

      1
    4. Через контекстное меню в корне домена перейдите на вкладку Properties:

      2
    5. На открывшейся форме перейдите на вкладку Security.

    6. Нажмите на кнопку Add и добавьте в верхнее окно нужного пользователя (в качестве примера используется TestUser).

    7. В верхнем списке выберите нужного пользователя (TestUser) и в нижнем окне проставьте чек-бокс Allow, выдав пользователю следующие разрешения:

      • Replicating Directory Changes — разрешение на получение уведомлений о любых изменениях в Active Directory;

      • Replicating Directory Changes All — расширенная версия разрешения Replicating Directory Changes, предоставляющая разрешение на получение уведомлений обо всех изменениях в Active Directory, включая изменения, которые могут быть скрыты от обычных пользователей;

      • Replicating Directory Changes In Filtered Set — разрешение на получение уведомлений об изменениях в определенном наборе объектов в Active Directory;

      • Replicating Synchronization — разрешение на запуск процесса репликации между контроллерами домена.

        3
  2. При конфигурировании модуля бэкенда osmax-core (см. документ «Руководство по установке» раздел «Конфигурация модуля osmax-core») задайте логин и пароль пользователя домена (LDAP-сервера), которому выданы соответствующие права, указав значения параметров:

    • osmax.inventory.ldap.datasource[1].username=i.ivanov@inno.local;

    • osmax.inventory.ldap.datasource[1].password=12345.

Интеграция с Microsoft Active Directory

Раздел содержит инструкции по настройке интеграции модулей бэкенда osmax-core и osmax-provisioner с Microsoft Active Directory.

Настройка модуля osmax-core для интеграции с Microsoft Active Directory

Интеграция модуля osmax-core с Microsoft Active Directory выполняется в два этапа:

Настройка Kerberos-аутентификации

Предварительное условие:

На контроллере домена должна быть создана и настроена сервисная учетная запись (см. раздел «Создание Service Principal Name (SPN) и keytab-файла для сервисной учетной записи под управлением Active Directory»).

Выполните следующие шаги:

  1. Установите пакет с Kerberos-клиентом. Для Debian-like ОС используйте команды:

    sudo apt update
    sudo apt install krb5-user
  2. Создайте или отредактируйте файл /etc/krb5.conf и укажите в нем следующие параметры:

    [libdefaults]
    dns_lookup_realm = false
    dns_lookup_kdc = false
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true
    rdns = false
    default_realm = <AD_DOMAIN_NAME>
    udp_preference_limit = 1
    
    [realms]
    <AD_DOMAIN_NAME> = {
    kdc = <AD_DOMAIN_CONTROLLER_ADDRESS>
    admin_server = <AD_DOMAIN_CONTROLLER_ADDRESS>
    }

    Пример:

    [libdefaults]
    dns_lookup_realm = false
    dns_lookup_kdc = false
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true
    rdns = false
    default_realm = DEMO.OSMAKS.INNO.TECH
    udp_preference_limit = 1
    
    [realms]
    DEMO.OSMAKS.INNO.TECH = {
    kdc = 192.168.0.1
    admin_server = 192.168.0.1
    }

Интеграцию можно настроить одним из перечисленных способов:

Настройка с использованием прямого указания сервисной учетной записи

В файле конфигурации модуля osmax-core application.properties задайте следующие параметры конфигурации:

quarkus.kerberos.service-principal-name=<service-account-name>
quarkus.kerberos.service-principal-realm=<domain-name>
quarkus.kerberos.service-principal-password=<service-account-password>

Пример:

quarkus.kerberos.service-principal-name=osmax_core_svc
quarkus.kerberos.service-principal-realm=OSMAKS-CORE.INNO.TECH
quarkus.kerberos.service-principal-password=Qwerty123
Настройка с использованием keytab-файла

В файле конфигурации модуля osmax-core application.properties задайте следующие параметры конфигурации:

quarkus.kerberos.service-principal-name=<keytab-full-spn-with-domain>
quarkus.kerberos.keytab-path=<path-to-keytab-file>

Пример:

quarkus.kerberos.service-principal-name=HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH
quarkus.kerberos.keytab-path=/opt/osmaks-core/osmaks_ad.keytab
Настройка источника данных LDAP(S) из домена Active Directory

Предварительное условие:

Сервер, используемый для подключения по протоколу LDAP, должен являться одним из контроллеров домена Active Directory.

Интеграцию можно настроить одним из перечисленных способов:

Настройка интеграции по протоколу LDAP

В файле конфигурации модуля osmax-core application.properties задайте следующие параметры конфигурации:

osmax.inventory.ldap.datasource[i].name=<datasource-alias>
osmax.inventory.ldap.datasource[i].host=<ldap-server-address>
osmax.inventory.ldap.datasource[i].port=<ldap-port>
osmax.inventory.ldap.datasource[i].username=<service-account-name>
osmax.inventory.ldap.datasource[i].password=<service-account-password>
osmax.inventory.ldap.datasource[i].ssl=false
osmax.inventory.ldap.datasource[i].base-dn=<base-DN>

Пример:

osmax.inventory.ldap.datasource[0].name=DEMO.OSMAKS.INNO.TECH
osmax.inventory.ldap.datasource[0].host=192.168.0.1
osmax.inventory.ldap.datasource[0].port=389
osmax.inventory.ldap.datasource[0].username=administrator@DEMO.OSMAKS.INNO.TECH
osmax.inventory.ldap.datasource[0].password=Qwerty123
osmax.inventory.ldap.datasource[0].ssl=false
osmax.inventory.ldap.datasource[0].base-dn="DC=demo,DC=osmaks,DC=inno,DC=tech"
Настройка интеграции по протоколу LDAP over SSL (LDAPS)

Для настройки интеграции по протоколу LDAP over SSL (LDAPS) выполните предварительную настройку контроллера Active Directory согласно инструкции в разделе «Настройка LDAP over SSL (LDAPS) на контроллере домена под управлением Microsoft Active Directory»

Получение файла с сертификатом SSL
  1. Перед настройкой интеграции получите сертификата SSL и сохранение его в файл, выполнив команду (для Unix-like ОС):

    openssl s_client -connect <ldap-server-address>:<ldap-over-ssl-port>

    Пример:

    openssl s_client -connect 192.168.0.1:636

    Пример ответа:

    Connecting to 10.31.0.29
    CONNECTED(00000003)
    Can't use SSL_get_servername
    depth=0 CN=lcm-dc-winsrv.lcmtest.lan
    verify error:num=20:unable to get local issuer certificate
    verify return:1
    depth=0 CN=lcm-dc-winsrv.lcmtest.lan
    verify error:num=21:unable to verify the first certificate
    verify return:1
    depth=0 CN=lcm-dc-winsrv.lcmtest.lan
    verify return:1
    ---
    Certificate chain
    0 s:CN=lcm-dc-winsrv.lcmtest.lan
    i:DC=lan, DC=lcmtest, CN=lcmtest-LCM-DC-WINSRV-CA
    a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
    v:NotBefore: May 23 10:49:18 2024 GMT; NotAfter: May 23 10:49:18 2025 GMT
    ---
    Server certificate
    -----BEGIN CERTIFICATE-----
    MIIGZjCCBU6gAwIBAgITTwAAAAMHAuwjdKO36wAAAAAAAzANBgkqhkiG9w0BAQsF
    ADBRMRMwEQYKCZImiZPyLGQBGRYDbGFuMRcwFQYKCZImiZPyLGQBGRYHbGNtdGVz
    dDEhMB8GA1UEAxMYbGNtdGVzdC1MQ00tREMtV0lOU1JWLUNBMB4XDTI0MDUyMzEw
    NDkxOFoXDTI1MDUyMzEwNDkxOFowJDEiMCAGA1UEAxMZbGNtLWRjLXdpbnNydi5s
    Y210ZXN0LmxhbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALkozhSH
    q+Ze/NhW4VmerUI/i81P5YH1TlnaYZ5LtmePwvBoJ4805s/OlAiNDbs1vdStQ1UG
    wWF8fjItPrbb9OHGzUglPWq8EB7aBvTWXVJf5gMMKyCaBXB8aFO21OgtZdjGhuxp
    AvGV/hr3UrsdF2gHSPN9PZ27VQ1W85mOWgqZ9Qjsyu23AAhMxUBrSA8G6TvuHksH
    GbZ8n/FXhF4XkKbMKxyfh44CMmGk4KKJQrw7ljrN1qEZ8Mkv1qREXWdYBTbaNmvR
    +sDwyGU+ZRJ/V0UFKA7CIDMjfPq5zdjl+V6usj/8ZIZTE+daX34jcgs+xD7l99nq
    RXogiXzOKA+pT9kCAwEAAaOCA2IwggNeMC8GCSsGAQQBgjcUAgQiHiAARABvAG0A
    YQBpAG4AQwBvAG4AdAByAG8AbABsAGUAcjAdBgNVHSUEFjAUBggrBgEFBQcDAgYI
    KwYBBQUHAwEwDgYDVR0PAQH/BAQDAgWgMHgGCSqGSIb3DQEJDwRrMGkwDgYIKoZI
    hvcNAwICAgCAMA4GCCqGSIb3DQMEAgIAgDALBglghkgBZQMEASowCwYJYIZIAWUD
    BAEtMAsGCWCGSAFlAwQBAjALBglghkgBZQMEAQUwBwYFKw4DAgcwCgYIKoZIhvcN
    AwcwHQYDVR0OBBYEFDxkdF2yDXR+bnfqKAND0TkLO14cMB8GA1UdIwQYMBaAFACG
    /uVsAvxdtKvqz1B3yIHKd6qWMIHcBgNVHR8EgdQwgdEwgc6ggcuggciGgcVsZGFw
    Oi8vL0NOPWxjbXRlc3QtTENNLURDLVdJTlNSVi1DQSxDTj1sY20tZGMtd2luc3J2
    LENOPUNEUCxDTj1QdWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxDTj1TZXJ2aWNlcyxD
    Tj1Db25maWd1cmF0aW9uLERDPWxjbXRlc3QsREM9bGFuP2NlcnRpZmljYXRlUmV2
    b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RDbGFzcz1jUkxEaXN0cmlidXRpb25Qb2lu
    dDCBygYIKwYBBQUHAQEEgb0wgbowgbcGCCsGAQUFBzAChoGqbGRhcDovLy9DTj1s
    Y210ZXN0LUxDTS1EQy1XSU5TUlYtQ0EsQ049QUlBLENOPVB1YmxpYyUyMEtleSUy
    MFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9bGNtdGVz
    dCxEQz1sYW4/Y0FDZXJ0aWZpY2F0ZT9iYXNlP29iamVjdENsYXNzPWNlcnRpZmlj
    YXRpb25BdXRob3JpdHkwRQYDVR0RBD4wPKAfBgkrBgEEAYI3GQGgEgQQT/a0Jjho
    UEuS4nyMtGIpx4IZbGNtLWRjLXdpbnNydi5sY210ZXN0LmxhbjBPBgkrBgEEAYI3
    GQIEQjBAoD4GCisGAQQBgjcZAgGgMAQuUy0xLTUtMjEtMTcwMDY2MDMwMS0yODM3
    MzkzNDYwLTE1MTc1MjQ2MjktMTAwMTANBgkqhkiG9w0BAQsFAAOCAQEAc5Hd2UM1
    Xd7A1SNpI9i9oFGeQrtvz80KbKdKBadMPtlfAMQviZecCxTF9BcWbBa/gMljK2Ol
    MZ/9RfTYBTESmMJMwjM8nGPp9W0570cFp+pzNJ3V4Wj1U/yi8AMIegg7E8t0+u9g
    o+RSGTud3+UOiFyVrIdrSYo3Bz2wq9axAkDEwN5JpmWmnxC8OqXqmeeWSG7AzJwu
    B5bGy+GaTj+ytSR8g6+TgZDOaOeEYm7XAVSMxVPL0HD7xozgNBfSbUuheV5oryY9
    x2tN3YE1IbA1U9rqRNAegqVaG60swzWltQbO0PRWuw8rBa8Ir+lpZOn4qlmJ94CS
    WxTZ8YUs0ioM/w==
    -----END CERTIFICATE-----
    subject=CN=lcm-dc-winsrv.lcmtest.lan
    issuer=DC=lan, DC=lcmtest, CN=lcmtest-LCM-DC-WINSRV-CA
    ---
    No client certificate CA names sent
    Client Certificate Types: RSA sign, DSA sign, ECDSA sign
    Requested Signature Algorithms: RSA+SHA256:RSA+SHA384:RSA+SHA1:ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA1:DSA+SHA1:RSA+SHA512:ECDSA+SHA512
    Shared Requested Signature Algorithms: RSA+SHA256:RSA+SHA384:ECDSA+SHA256:ECDSA+SHA384:RSA+SHA512:ECDSA+SHA512
    Peer signing digest: SHA256
    Peer signature type: RSA
    Server Temp Key: ECDH, secp384r1, 384 bits
    ---
    SSL handshake has read 2192 bytes and written 469 bytes
    Verification error: unable to verify the first certificate
    ---
    New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 061B0000E89AB417962FAA9D8EEBCE1538C4E1DC7FBA0C7C0911FC37C85AFD28
    Session-ID-ctx:
    Master-Key: 44B14CA5480206686700EFFBCDE315444F16A9DDF22DFD722AB7F1CC2917D6B38DC2A06E6678041AE50C70952E1E53D3
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1717056217
    Timeout   : 7200 (sec)
    Verify return code: 21 (unable to verify the first certificate)
    Extended master secret: yes
    ---
  2. Поместите содержимое ответа между строками -----BEGIN CERTIFICATE----- и -----END CERTIFICATE----- включительно в отдельный файл на сервере с бэкендом с расширением *.crt и выдайте права на чтение всем пользователям (chmod 644).

    Пример содержимого файла с сертификатом SSL:

    -----BEGIN CERTIFICATE-----
    MIIGZjCCBU6gAwIBAgITTwAAAAMHAuwjdKO36wAAAAAAAzANBgkqhkiG9w0BAQsF
    ADBRMRMwEQYKCZImiZPyLGQBGRYDbGFuMRcwFQYKCZImiZPyLGQBGRYHbGNtdGVz
    dDEhMB8GA1UEAxMYbGNtdGVzdC1MQ00tREMtV0lOU1JWLUNBMB4XDTI0MDUyMzEw
    NDkxOFoXDTI1MDUyMzEwNDkxOFowJDEiMCAGA1UEAxMZbGNtLWRjLXdpbnNydi5s
    Y210ZXN0LmxhbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALkozhSH
    q+Ze/NhW4VmerUI/i81P5YH1TlnaYZ5LtmePwvBoJ4805s/OlAiNDbs1vdStQ1UG
    wWF8fjItPrbb9OHGzUglPWq8EB7aBvTWXVJf5gMMKyCaBXB8aFO21OgtZdjGhuxp
    AvGV/hr3UrsdF2gHSPN9PZ27VQ1W85mOWgqZ9Qjsyu23AAhMxUBrSA8G6TvuHksH
    GbZ8n/FXhF4XkKbMKxyfh44CMmGk4KKJQrw7ljrN1qEZ8Mkv1qREXWdYBTbaNmvR
    +sDwyGU+ZRJ/V0UFKA7CIDMjfPq5zdjl+V6usj/8ZIZTE+daX34jcgs+xD7l99nq
    RXogiXzOKA+pT9kCAwEAAaOCA2IwggNeMC8GCSsGAQQBgjcUAgQiHiAARABvAG0A
    YQBpAG4AQwBvAG4AdAByAG8AbABsAGUAcjAdBgNVHSUEFjAUBggrBgEFBQcDAgYI
    KwYBBQUHAwEwDgYDVR0PAQH/BAQDAgWgMHgGCSqGSIb3DQEJDwRrMGkwDgYIKoZI
    hvcNAwICAgCAMA4GCCqGSIb3DQMEAgIAgDALBglghkgBZQMEASowCwYJYIZIAWUD
    BAEtMAsGCWCGSAFlAwQBAjALBglghkgBZQMEAQUwBwYFKw4DAgcwCgYIKoZIhvcN
    AwcwHQYDVR0OBBYEFDxkdF2yDXR+bnfqKAND0TkLO14cMB8GA1UdIwQYMBaAFACG
    /uVsAvxdtKvqz1B3yIHKd6qWMIHcBgNVHR8EgdQwgdEwgc6ggcuggciGgcVsZGFw
    Oi8vL0NOPWxjbXRlc3QtTENNLURDLVdJTlNSVi1DQSxDTj1sY20tZGMtd2luc3J2
    LENOPUNEUCxDTj1QdWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxDTj1TZXJ2aWNlcyxD
    Tj1Db25maWd1cmF0aW9uLERDPWxjbXRlc3QsREM9bGFuP2NlcnRpZmljYXRlUmV2
    b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RDbGFzcz1jUkxEaXN0cmlidXRpb25Qb2lu
    dDCBygYIKwYBBQUHAQEEgb0wgbowgbcGCCsGAQUFBzAChoGqbGRhcDovLy9DTj1s
    Y210ZXN0LUxDTS1EQy1XSU5TUlYtQ0EsQ049QUlBLENOPVB1YmxpYyUyMEtleSUy
    MFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9bGNtdGVz
    dCxEQz1sYW4/Y0FDZXJ0aWZpY2F0ZT9iYXNlP29iamVjdENsYXNzPWNlcnRpZmlj
    YXRpb25BdXRob3JpdHkwRQYDVR0RBD4wPKAfBgkrBgEEAYI3GQGgEgQQT/a0Jjho
    UEuS4nyMtGIpx4IZbGNtLWRjLXdpbnNydi5sY210ZXN0LmxhbjBPBgkrBgEEAYI3
    GQIEQjBAoD4GCisGAQQBgjcZAgGgMAQuUy0xLTUtMjEtMTcwMDY2MDMwMS0yODM3
    MzkzNDYwLTE1MTc1MjQ2MjktMTAwMTANBgkqhkiG9w0BAQsFAAOCAQEAc5Hd2UM1
    Xd7A1SNpI9i9oFGeQrtvz80KbKdKBadMPtlfAMQviZecCxTF9BcWbBa/gMljK2Ol
    MZ/9RfTYBTESmMJMwjM8nGPp9W0570cFp+pzNJ3V4Wj1U/yi8AMIegg7E8t0+u9g
    o+RSGTud3+UOiFyVrIdrSYo3Bz2wq9axAkDEwN5JpmWmnxC8OqXqmeeWSG7AzJwu
    B5bGy+GaTj+ytSR8g6+TgZDOaOeEYm7XAVSMxVPL0HD7xozgNBfSbUuheV5oryY9
    x2tN3YE1IbA1U9rqRNAegqVaG60swzWltQbO0PRWuw8rBa8Ir+lpZOn4qlmJ94CS
    WxTZ8YUs0ioM/w==
    -----END CERTIFICATE-----
Внесение параметров конфигурации в настройки бэкенда

В файле конфигурации модуля osmax-core application.properties задайте следующие параметры конфигурации:

osmax.inventory.ldap.datasource[i].name=<datasource-alias>
osmax.inventory.ldap.datasource[i].host=<ldap-server-address>
osmax.inventory.ldap.datasource[i].port=<ldap-port>
osmax.inventory.ldap.datasource[i].username=<service-account-name>
osmax.inventory.ldap.datasource[i].password=<service-account-password>
osmax.inventory.ldap.datasource[i].ssl=true
osmax.inventory.ldap.datasource[i].ssl-certificate=<path-to-certificate-file>
osmax.inventory.ldap.datasource[i].base-dn=<base-DN>

Пример:

osmax.inventory.ldap.datasource[0].name=osmaxtest.lan
osmax.inventory.ldap.datasource[0].host=10.31.0.29
osmax.inventory.ldap.datasource[0].port=636
osmax.inventory.ldap.datasource[0].username=vlev@osmaxtest
osmax.inventory.ldap.datasource[0].password=Qwerty123
osmax.inventory.ldap.datasource[0].ssl=true
osmax.inventory.ldap.datasource[0].ssl-certificate=/opt/inno-osmaks-core/ad_ldap_cert.crt
osmax.inventory.ldap.datasource[0].base-dn="DC=osmaxtest,DC=lan"

Создание SPN и keytab-файла для сервисной учетной записи в домене под управлением AD

Service Principal Name (SPN) и keytab-файл используются для аутентификации по протоколу Kerberos.

Service Principal Name (SPN) или имя принципала — это уникальное имя сервиса, которое привязывается к учетной записи сервиса в домене Microsoft Active Directory. SPN используется для идентификации сервиса, к которому пользователи хотят получить доступ.

Keytab-файл содержит пары ключей и имен принципалов, которые используются для аутентификации в системе Kerberos. Этот файл обычно хранится на сервере сервиса. Когда сервис запускается, он использует информацию из keytab-файла для аутентификации в системе Kerberos без необходимости ввода пароля.

Перед началом работы убедитесь, что выполнены предварительные условия:

  1. Active Directory установлен и настроен. Определено имя домена, например, DEMO.OSMAX.INNO.TECH.

  2. Определены имена хостов отдельно для каждого из модулей, например:

    1. «Кабинет администратора» — admin-console.osmax.mycompany.com.

    2. «Магазин приложений» — application-shop.osmax.mycompany.com.

Ниже приведен пример создания SPN (Service Principal Name) и keytab-файла для сервисной учетной записи в домене под управлением Active Directory. Все команды выполняются в PowerShell из под учетной записи с правами администратора домена.

Создание и настройка технической учетной записи
Предварительная настройка домена Active Directory

В актуальных версиях JDK (17 или выше) не поддерживается старый тип шифрования RC4_HMAC_MD5. Чтобы его отключить, выполните действия:

  1. Перейдите в Control Panel > Administrative tools > Local Security Policy.

  2. В открывшемся окне перейдите в раздел Local Policies > Security Options и измените значение параметра Network security: Configure encryption types allowed for Kerberos.

  3. В отображаемом списке протоколов шифрования отключите устаревший RC4_HMAC_MD5 и включите остальные.

    1
Создание технической учетной записи
Создаваемая техническая учетная запись должна входить в группу Domain Users.

Чтобы создать техническую учетную запись, выполните действия:

  1. Перейдите в Control Panel > Administrative tools > Active Directory Users and Computers.

  2. В требуемой директории домена создайте нового пользователя с определенным именем (например, osmax_backend_svc).

    Для созданной учетной записи рекомендуется задать постоянный пароль и отключить истечение его срока действия.
  3. В свойствах созданной учетной записи на вкладке Account активируйте опции This account supports Kerberos AES 128 bit encryption и This account supports Kerberos AES 256 bit encryption.

    2
Создание Service Principal Name (SPN) для технической учетной записи
Подробное описание особенностей SPN см. в официальной документации.

Для созданной технической учетной записи необходимо создать несколько SPN:

  1. Arbitrary SPN — уникальный идентификатор, который назначается целевому сервису (в данном случае osmax-core). Например: OSMAX/core. Этот SPN будет использоваться в настройках модуля osmax-core (см. файл application.properties в разделе «Конфигурация модуля osmax-core» документа «Руководство по установке»).

  2. Host SPN для модулей «Кабинет администратора» и «Магазин приложений». Пример значений:

    1. HTTP/admin-console.osmax.mycompany.com.

    2. HTTP/application-shop.osmax.mycompany.com.

Для создания SPN используйте команду:

setspn -a <ServiceClass>/<Host | ServiceName> <ServiceAccount>

Где:

  • <ServiceClass> — тип SPN. Опираясь на примеры выше, это могут быть: OSMAX для Arbitrary SPN или HTTP для Host SPN;

  • <Host> — хост одного из модулей «Кабинет администратора» и «Магазин приложений»;

  • <ServiceName> — имя сервиса для Arbitrary SPN. Согласно примеру выше — это core;

  • <ServiceAccount> — имя ранее созданной технической учетной записи. В данном случае — это osmax_backend_svc.

Примеры:

> setspn -A OSMAX/core osmax_backend_svc
Checking domain DC=demo,DC=osmax,DC=inno,DC=tech
Registering ServicePrincipalNames for CN=osmax_backend_svc,CN=Users,DC=demo,DC=osmax,DC=inno,DC=tech
OSMAX/core
Updated object

> setspn -A HTTP/admin-console.osmax.mycompany.com osmax_backend_svc
Checking domain DC=demo,DC=osmax,DC=inno,DC=tech
Registering ServicePrincipalNames for CN=osmax_backend_svc,CN=Users,DC=demo,DC=osmax,DC=inno,DC=tech
HTTP/admin-console.osmax.mycompany.com
Updated object

> setspn -A HTTP/application-shop.osmax.mycompany.com osmax_backend_svc
Checking domain DC=demo,DC=osmax,DC=inno,DC=tech
Registering ServicePrincipalNames for CN=osmax_backend_svc,CN=Users,DC=demo,DC=osmax,DC=inno,DC=tech
HTTP/application-shop.osmax.mycompany.com
Updated object
Проверка созданных SPN

Чтобы посмотреть все SPN, назначенные учетной записи, выполните команду:

setspn -L <ServiceAccount>

Где <ServiceAccount> — имя ранее созданной технической учетной записи (osmax_backend_svc).

Пример выполнения команды:

> setspn -L osmax_backend_svc
Registered ServicePrincipalNames for CN=osmax_backend_svc,CN=Users,DC=demo,DC=osmax,DC=inno,DC=tech:
OSMAX/core
HTTP/admin-console.osmax.mycompany.com
HTTP/application-shop.osmax.mycompany.com
Проверка атрибутов сервисной учетной записи

Проверьте атрибуты сервисной учетной записи, выполнив команду:

get-aduser -Identity <ServiceAccount> -properties servicePrincipalName

Где <ServiceAccount> — имя ранее созданной технической учетной записи (osmax_backend_svc).

Пример выполнения команды:

> get-aduser -Identity osmax_backend_svc -properties servicePrincipalName

DistinguishedName : CN=osmax_backend_svc,CN=Users,DC=demo,DC=osmax,DC=inno,DC=tech
Enabled : True
GivenName : lcm_backend_svc
Name : lcm_backend_svc
ObjectClass : user
ObjectGUID : d903b450-e6c3-4324-9770-0236b00f83f8
SamAccountName : lcm_backend_svc
servicePrincipalName : { OSMAX/core, HTTP/admin-console.osmax.mycompany.com, HTTP/application-shop.osmax.mycompany.com }
SID : S-1-5-21-1700660301-2837393460-1517524629-1105
Surname :
3. Создани
Создание keytab-файла

Чтобы создать keytab-файл, выполните команду:

ktpass -princ <ServiceClass>/<ServiceName>@<DomainName> -mapuser <ServiceAccount> -pass <ServiceAccountPassword> -crypto All -ptype KRB5_NT_PRINCIPAL -out <TargetPath>\<KeytabFilename>

Где:

  • <ServiceClass>/<ServiceName> — созданный ранее Arbitrary SPN (OSMAX/core);

  • <DomainName> — имя домена Active Directory;

  • <ServiceAccount> — имя ранее созданной технической учетной записи (osmax_backend_svc);

  • <ServiceAccountPassword> — пароль технической учетной записи;

  • <TargetPath>\<KeytabFilename> — полный путь генерируемого keytab-файла.

Пример выполнения команды:

> ktpass -princ OSMAX/core@DEMO.OSMAX.INNO.TECH -mapuser osmax_backend_svc -pass "Qwerty123" -crypto All -ptype KRB5_NT_PRINCIPAL -out C:\temp\osmax_ad.keytab

Targeting domain controller: dc-winsrv.osmax.inno.tech
Using legacy password setting method
Successfully mapped OSMAX/core to osmax_backend_svc.
Key created.
Key created.
Key created.
Key created.
Key created.
Output keytab to osmax_ad.keytab:
Keytab version: 0x502
keysize 65 OSMAX/core@DEMO.OSMAX.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x1 (DES-CBC-CRC) keylength 8 (0x894ca425cb159eb0)
keysize 65 OSMAX/core@DEMO.OSMAX.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x3 (DES-CBC-MD5) keylength 8 (0x894ca425cb159eb0)
keysize 73 OSMAX/core@DEMO.OSMAX.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x17 (RC4-HMAC) keylength 16 (0x59fc0f884922b4ce376051134c71e22c)
keysize 89 OSMAX/core@DEMO.OSMAX.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x12 (AES256-SHA1) keylength 32 (0x555027fe7864fdd549ea517ff1cff1077fb2bf83de7e6e28eeeb6ed66db556bc)
keysize 73 OSMAX/core@DEMO.OSMAX.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x11 (AES128-SHA1) keylength 16 (0xe8dfe5b65a4fdb3bc0c367637c5a0606)

При создании keytab-файла на контролере домена Active Directory в атрибутах сервисной учетной записи записывается актуальный KVNO ключей из состава keytab-файлов. Работа с ключами с устаревшей версией KVNO не поддерживается, поэтому после генерации новых keytab-файлов подключение с использованием сгенерированных ранее невозможно. Версию KVNO из ключей в keytab-файле можно уточнить командой в следующем разделе:

3
Команды для просмотра содержимого keytab-файла

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

klist -K -e -t -k <KeytabFilename>

Пример выполнения команды:

> klist -K -e -t -k /opt/osmax-core/osmax_ad.keytab

Keytab name: FILE:/opt/osmax-core/osmax_ad.keytab
KVNO Timestamp         Principal
---- ----------------- --------------------------------------------------------
  23 01/01/70 03:00:00 OSMAX/core@DEMO.OSMAX.INNO.TECH (DEPRECATED:des-cbc-crc)  (0x16cdc11ae5f83845)
  23 01/01/70 03:00:00 OSMAX/core@DEMO.OSMAX.INNO.TECH (DEPRECATED:des-cbc-md5)  (0x16cdc11ae5f83845)
  23 01/01/70 03:00:00 OSMAX/core@DEMO.OSMAX.INNO.TECH (DEPRECATED:arcfour-hmac)  (0x59fc0f884922b4ce376051134c71e22c)
  23 01/01/70 03:00:00 OSMAX/core@DEMO.OSMAX.INNO.TECH (aes256-cts-hmac-sha1-96)  (0x57576e3ab78065762d6b450134367b5f40427942827129eb7bcfc679faab1443)
  23 01/01/70 03:00:00 OSMAX/core@DEMO.OSMAX.INNO.TECH (aes128-cts-hmac-sha1-96)  (0x8330205fcc577afc946ac1dfc2c3e7c6)

Windows не предоставляет встроенных средств для просмотра содержимого keytab-файла. Однако, если у вас на компьютере установлена версия Java JRE/JDK, используйте утилиту klist.exe, которая входит в комплект программного продукта.

Например:

"c:\Program Files\Java\jre1.8.0_181\bin" klist.exe -K -e -t -k C:\temp\osmax_ad.keytab
Сохраните файл на сервере, на который будет устанавливаться бэкенд продукта. Путь к файлу необходимо будет указать на этапе его настройки. Также измените права доступа к файлу, предоставив доступ к нему только для пользователя, от имени которого будет запускаться systemd-служба osmax.
Настройка модуля osmax-core для интеграции с Microsoft Active Directory

В конфигурационном файле application.properties модуля osmax-core (см. раздел «Конфигурация модуля osmax-core» документа «Руководство по установке») задайте следующие параметры (пример приведен с учетом используемых в документе значений):

# Имя Arbitrary SPN
quarkus.kerberos.service-principal-name=OSMAX/core
# Домен Active Directory
quarkus.kerberos.service-principal-realm=DEMO.OSMAX.INNO.TECH

# Далее нужно либо указать пароль от технической учетной записи
quarkus.kerberos.service-principal-password=Qwerty123
# Либо абсолютный путь до keytab-файла
quarkus.kerberos.keytab-path=/opt/osmax-core/osmax_ad.keytab
Настройка LDAP over SSL (LDAPS) на контроллере домена под управлением Microsoft Active Directory
Установка центра сертификации, создание и экспорт сертификата
Ниже приведены инструкции для учетной записи с правами администратора домена.
Установка роли "Active Directory Certificate Services" через Server Manager.
  1. На компьютере с Windows Server выберите Start > Server Manager > Add Roles and Features:

    1 add roles and features
  2. На открывшейся форме Before you begin нажмите на кнопку Next:

    2 before you begin
  3. На открывшейся форме Select destination server выберите радио-кнопку Select a server from the server pool, выберите сервер ldap и нажмите на кнопку Next:

    3 select destination server
  4. На открывшейся форме Select server roles в списке ролей выберите опцию Active Directory Certificate Services и нажмите на кнопку Next:

    4 select server roles
  5. На открывшейся форме Select features нажмите на кнопку Next:

    5 select features
  6. На открывшейся форме Active Directory Certificate Services нажмите на кнопку Next:

    6 active directory certificate service
  7. На открывшейся форме Select role services в списке ролей выберите Certification Authority и нажмите на кнопку Next:

    7 select role services
  8. На открывшейся форме Installation progress выберите пункт Configure Active Directory Certificate Services on the destination server и нажмите на кнопку Close:

    8 installation progress
  9. На открывшейся форме Credentials нажмите на кнопку Next:

    Можно использовать текущего вошедшего в систему пользователя для настройки служб ролей, так как он принадлежит к локальной группе администраторов.
    9 credentials
  10. На открывшейся форме Role Services в списке ролей выберите Certification Authority и нажмите на кнопку Next:

    10 role services
  11. На открывшейся форме Setup Type выберите радио-кнопку Enterprise CA и нажмите на кнопку Next:

    11 setup type
  12. На открывшейся форме CA Type выберите радио-кнопку Root CA и нажмите на кнопку Next:

    12 ca type
  13. На открывшейся форме Private Key выберите радио-кнопку Create a new private key и нажмите на кнопку Next:

    13 private key
  14. На открывшейся форме Cryptography for CA из выпадающего списка Select the hash algorithm for signing certificates issued by this CA выберите в качестве алгоритма хеширования значение SHA256 и нажмите на кнопку Next:

    Рекомендуется выбирать самый последний алгоритм хеширования.
    14 cryptography for ca
  15. На открывшейся форме CA Name нажмите на кнопку Next:

    15 ca name
  16. На открывшейся форме Validity Period укажите срок действия сертификата, выбрав значение по умолчанию 5 years, и нажмите на кнопку Next:

    16 validity period
  17. На открывшейся форме CA Database выберите расположение базы данных по умолчанию и нажмите на кнопку Next:

    17 ca database
  18. На открывшейся форме Confirmation подтвердите свои действия, нажав кнопку Configure:

    18 confirmation
  19. На открывшейся форме Results убедитесь в успешной настройке и нажмите на кнопку Close:

    19 results
Создание шаблона сертификата
  1. Перейдите в Windows Key+R, запустите команду certtmpl.msc и выберите шаблон Kerberos Authentication:

    1 kerberos auth
  2. Щелкните правой кнопкой по Kerberos Authentication и из выпадающего списка выберите значение Duplicate Template:

    2 duplicate template
  3. В открывшейся форме Properties of New Template настройте параметры в соответствии с вашими требованиями.

  4. Перейдите на вкладку General и включите опцию Publish certificate in Active Directory:

    3 publish cert in ad
  5. Перейдите на вкладку Request Handling и включите опцию Allow private key to be exported:

    4 allow private key export
  6. Перейдите на вкладку Subject Name, включите формат имени субъекта как DNS Name и нажмите сначала кнопку Apply, а затем OK:

    5 dns name
Выпуск шаблона сертификата
  1. Выберите Start > Certification Authority.

  2. Щелкните правой кнопкой мыши по папке Certificate Templates и выберите New > Certificate Template to Issue:

    1 cert template to issue
  3. На открывшейся форме Enable Certificate Templates выберите созданный шаблон сертификата и нажмите на кнопку ОК:

    2 enable cert templates
Запрос нового сертификата для созданного шаблона сертификата
  1. Перейдите в Windows Key+R > mmc > File > Add/Remove snap-in — откроется форма Add or Remove Snap-ins.

  2. В поле Available snap-ins выберите Certificates, нажмите на кнопку Add и подтвердите свои действия, нажав кнопку ОК:

    1 certificates
  3. На открывшейся форме Certificates snap-in выберите радио-кнопку Computer account и нажмите кнопку Next:

    2 certificates snap in
  4. Щелкните правой кнопкой мыши по папке Certificates, выберите All Tasks > Request for new Certificate:

    3 request for new cert
  5. На открывшейся форме Before you begin нажмите на кнопку Next:

    4 cert enrollment
  6. На открывшейся форме Select Certificate Enrollment Policy нажмите на кнопку Next:

    5 select cert enrollment policy
  7. На открывшейся форме Request Certificates выберите сертификат и нажмите на кнопку Enroll:

    6 request certificates
  8. Завершите свои действия, нажав кнопку Finish:

    7 cert install results
Экспорт созданного сертификата
  1. Щелкните правой кнопкой мыши по созданному сертификату и выберите All tasks > Export:

    1 export
  2. На открывшейся форме приветствия нажмите на кнопку Next:

    2 cert export result
  3. На открывшейся форме Export Private Key выберите опцию Do not export the private key и нажмите на кнопку Next:

    3 export private key
  4. Выберите формат файла Base-64 encoded X.509 и нажмите Next:

    4 base 64 enoded
  5. Экспортируйте файл с сертификатом .CER в локальный путь и нажмите Next:

    5 file to export
  6. После того как сертификат будет успешно экспортирован, завершите ваши действия, нажав кнопку Finish:

    6 completing
Проверка работы LDAP over SSL
  1. Перейдите в Windows Key+R и выполните команду ldp.exe:

    1 ldap exe
  2. Выберите пункт меню Connection > Connect:

    2 connection
  3. На форме Connect:

    1. В поле Server укажите значение localhost.

    2. В поле Port укажите значение 636.

    3. Включите опцию SSL.

      3 connect
  4. Результатом корректной настройки LDAP over SSL будет успешное подключение и вывод подобный примеру:

    4 result
Настройка модуля osmax-provisioner для интеграции с Microsoft Active Directory

Интеграция модуля osmax-provisioner с Microsoft Active Directory выполняется в два этапа:

Настройка Kerberos-аутентификации

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

Имя домена (domain-name) ОС Роль IP-адрес

osmax.inno.tech

Windows Server 2022

Domain Controler Active Directory

10.31.1.64/16

  1. Установите пакет с Kerberos-клиентом. Для Debian-like ОС используйте команды:

    sudo apt update
    sudo apt install krb5-user
  2. Создайте или отредактируйте файл /etc/krb5.conf и укажите в нем следующие параметры:

    [libdefaults]
    dns_lookup_realm = false
    dns_lookup_kdc = false
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true
    rdns = false
    default_realm = OSMAX.INNO.TECH
    udp_preference_limit = 1
    
    [realms]
    osmax.inno.tech = {
    kdc = 10.31.1.64
    admin_server = 10.31.1.64
    }

    Пример:

    [libdefaults]
    dns_lookup_realm = false
    dns_lookup_kdc = false
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true
    rdns = false
    default_realm = OSMAX.INNO.TECH
    udp_preference_limit = 1
    
    [realms]
    OSMAX.INNO.TECH = {
    kdc = 10.31.1.64
    admin_server = 10.31.1.64
    }
  3. При конфигурировании

  4. В файле конфигурации модуля osmax-provisioner application.properties укажите параметры сервисной учетной записи:

quarkus.kerberos.service-principal-name=<service-account-name>
quarkus.kerberos.service-principal-realm=<domain-name>
quarkus.kerberos.service-principal-password=<service-account-password>

Пример:

quarkus.kerberos.service-principal-name=osmax_provisioner_svc
quarkus.kerberos.service-principal-realm=OSMAX.INNO.TECH
quarkus.kerberos.service-principal-password=Qwerty123
Настройка сервера по включению в домен Microsoft Active Directory для модуля osmax-provisioner

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

  • имя домена — osmax.inno.tech;

  • пользователь Microsoft Active Directory c правами администратора — adminuser.

Имя хоста ОС Роль IP-адрес

osmax-winsrv.osmax.inno.tech

Windows Server 2022

Domain Controler Active Directory

10.31.1.64/16

osmax-astra

Astra Linux SE Orel

Workstation

10.31.1.74/16

Настройка хоста Astra Linux
  1. В файле /etc/hostname укажите FQDN (Fully Qualified Domain Name) — имя системы:

    osmax-astra.osmax.inno.tech
  2. В файле /etc/hosts создайте запись с полным и коротким доменным именем, ссылающуюся на один из внутренних IP-хостов:

    127.0.0.1 localhost
    10.31.1.74 osmax-astra.osmax.inno.tech osmax-astra
  3. В файл /etc/resolv.conf внесите изменения, указав имя существующего домена AD, скоуп для поиска и серверы DNS (контроллеры домена Active Directory):

    domain osmax.inno.tech
    search osmax.inno.tech.
    nameserver 10.31.1.64
    Для корректной работы разница во времени между хостом и контроллером домена не должна превышать 5 минут, иначе получение тикета Kerberos будет невозможно. Настройте синхронизацию времени с контроллером домена.
  1. Установите необходимые пакеты:

    sudo apt install ntp ntpdate
  2. В файле /etc/ntp.conf укажите контроллер домена в качестве точки синхронизации, остальные параметры закомментируйте:

    # You do need to talk to an NTP server or two (or three).
    #server ntp2.ntp-servers.net iburst
    #server ntp.msk-ix.ru iburst
    
    server osmax-winsrv.osmax.inno.tech
    
    # pool.ntp.org maps to about 1000 low-stratum NTP servers.  Your server will
    # pick a different set every time it starts up.  Please consider joining the
    # pool: <http://www.pool.ntp.org/join.html>
    #pool 0.ru.pool.ntp.org iburst
    #pool 1.ru.pool.ntp.org iburst
    #pool 2.ru.pool.ntp.org iburst
    #pool 3.ru.pool.ntp.org iburst
  3. Выполните единовременную синхронизацию времени с контроллером домена и запустите службу:

    sudo systemctl stop ntp
    sudo ntpdate -bs osmax.inno.tech
    sudo systemctl start ntp
Ввод в домен
  1. Используйте команду realm из пакета realmd, чтобы присоединиться к домену и создать конфигурацию sssd. Для этого установите необходимые пакеты:

    sudo apt install realmd sssd sssd-tools libnss-sss libpam-sss adcli samba-common-bin oddjob oddjob-mkhomedir packagekit -y
  2. Проверьте доступность домена для обнаружения через DNS. Команда realm discover возвращает полную конфигурацию домена и список пакетов, которые необходимо установить, чтобы система была зарегистрирована в домене:

    user@osmax-astra:/home/user# realm discover osmax.inno.tech -v
    * Resolving: _ldap._tcp.osmax.inno.tech
    * Performing LDAP DSE lookup on: 10.31.1.64
    * Successfully discovered: osmax.inno.tech
    osmax.inno.tech
    type: kerberos
    realm-name: OSMAX.INNO.TECH
    domain-name: osmax.inno.tech
    configured: no
    server-software: active-directory
    client-software: sssd
    required-package: sssd-tools
    required-package: sssd
    required-package: libnss-sss
    required-package: libpam-sss
    required-package: adcli
    required-package: samba-common-bin
  3. Введите хост в домен Active Directory. Для выполнения операции требуется учетная запись AD с правами администратора домена (или пользователь, которому делегированы права на добавление хостов в домен):

    realm join -U adminuser osmax.inno.tech
    Пароль для adminuser:
  4. Проверьте, что хост находится в домене Active Directory:

    user@osmax-astra:/home/user# realm list
    osmax.inno.tech
    type: kerberos
    realm-name: OSMAX.INNO.TECH
    domain-name: osmax.inno.tech
    configured: kerberos-member
    server-software: active-directory
    client-software: sssd
    required-package: sssd-tools
    required-package: sssd
    required-package: libnss-sss
    required-package: libpam-sss
    required-package: adcli
    required-package: samba-common-bin
    login-formats: %U@osmax.inno.tech
    login-policy: allow-realm-logins
  5. Инструмент realmd после ввода хоста в домен создает файл конфигурации sssd /etc/sssd/sssd.conf.

    Файл /etc/sssd/sssd.conf должен иметь разрешения 600 и root:root, иначе демон sssd не будет запускаться:
    user@osmax-astra:/home/user# cat /etc/sssd/sssd.conf
    [sssd]
    domains = shadowutils, osmax.inno.tech
    config_file_version = 2
    services = nss, pam
    
    [nss]
    
    [pam]
    
    [domain/shadowutils]
    id_provider = files
    
    auth_provider = proxy
    proxy_pam_target = sssd-shadowutils
    
    proxy_fast_alias = True
    
    [domain/osmax.inno.tech]
    ad_domain = osmax.inno.tech
    krb5_realm = OSMAX.INNO.TECH
    realmd_tags = manages-system joined-with-adcli
    cache_credentials = True
    id_provider = ad
    krb5_store_password_if_offline = True
    default_shell = /bin/bash
    ldap_id_mapping = True
    use_fully_qualified_names = True
    fallback_homedir = /home/%u@%d
    access_provider = ad
  6. Выполните следующую команду, чтобы для пользователей Active Directory при входе в систему создавался домашний каталог:

    pam-auth-update --enable mkhomedir
Проверка работы
  1. Запросите информацию о пользователе Active Directory (adminuser@osmax.inno.tech):

    user@osmax-astra:/home/user# getent passwd adminuser@osmax.inno.tech
    adminuser@osmax.inno.tech:*:1762401001:1762400513:adminuser:/home/adminuser@osmax.inno.tech:/bin/bash
  2. Войдите в систему:

    user@osmax-astra:/home/user# login
    osmax-astra.osmax.inno.tech имя пользователя: adminuser
    
    Пароль:
    
    Создание каталога /home/adminuser@osmax.inno.tech.
    adminuser@osmax.inno.tech@osmax-astra:~$
Настройка с использованием прямого указания сервисной учетной записи

В файле конфигурации модуля osmax-provisioner application.properties задайте следующие параметры конфигурации:

quarkus.kerberos.service-principal-name=<service-account-name>
quarkus.kerberos.service-principal-realm=<domain-name>
quarkus.kerberos.service-principal-password=<service-account-password>

Пример:

quarkus.kerberos.service-principal-name=osmax_provisioner_svc
quarkus.kerberos.service-principal-realm=OSMAX.INNO.TECH
quarkus.kerberos.service-principal-password=Qwerty123

Работа с коллекциями устройств

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

Коллекция устройств — это множество устройств, которое формируется в результате фильтрации всех устройств по атрибутам самих устройств и атрибутам пользователей, ассоциированных с ними.

Коллекции могут быть статическими и динамическими. В статических коллекциях набор устройств обновляется вручную администратором, а в динамических — автоматически согласно расписанию, которое устанавливает создатель коллекции при условии, что фильтры в коллекции остаются неизменными.

Основные операции по работе с пользователями, устройствами и коллекциями выполняются в графическом интерфейсе администратора. Подробнее см. раздел «Основные сценарии использования» в документе «Руководство администратора»).

Сбор данных по аппаратной конфигурации устройств

В рамках инвентаризации в БД продукта импортируются следующие технические характеристики устройств из модуля координации:

  • актуальные данные по аппаратной конфигурации устройства;

  • актуальные данные системного ПО устройства;

  • список фактически развернутого прикладного и системного ПО на устройстве.

Данные поступают от агентов (minions) с помощью механизма Grains на сервер управления (master) согласно заданному расписанию.

Сервер управления (master) публикует их в виде события в канале REST endpoint Events, который прослушивается бэкендом продукта. Каждое из таких событий содержит технические характеристики по одному из агентов (minions), которые актуализируются в БД:

Параметр устройства из ответа модуля координации Параметр в БД Описание

id

machines.minion_id

Идентификатор агента (minion)

nodename

machines.node_name

Короткое имя устройства (NetBIOS name)

fqdn

machines.fqdn

Полное доменное имя устройства

fqdn_ip4

machines.domain_ip

Набор доменных адресов IPv4

domain

machines.domain

Имя домена

num_cpus

machines.cpu_num

Количество ядер процессора

cpu_model

machines.cpu_model

Модель процессора

cpuarch

machines.cpu_arc

Архитектура процессора

mem_total

machines.ram

Объем ОЗУ

swap_total

machines.swap

Общий физический размер свопинга

hwaddr_interfaces

machine_networks.mac

Физические адреса сетевого оборудования (MAC)

ip4_gw

machines.ip4_gw

Шлюз Ipv4

ip4_interfaces

machine_networks.ipv4_list

Сетевые интерфейсы IPv4

ip6_interfaces

machine_networks.ipv6_list

Сетевые интерфейсы IPv6

ssds

machine_disks

Диски SSD

disks

machines.machine_disks

Диски HDD

serialnumber

machines.serial_number

Серийный номер устройства

kernel

machines.kernel

Ядро ОС

kernelrelease

machines.kernel_release

Релиз ядра ОС

lsb_distrib_codename

machines.distrib_codename

Код дистрибутива ОС

lsb_distrib_description

machines.os_description

Описание версии ОС

oscodename

machines.os_codename

Код версии ОС

osarch

machines.cpu_arc

Архитектура ОС

osfullname

machines.os_fullname

Полное наименование ОС

osmajorrelease

machines.os_major_release

Мажорная версия релиза ОС

osrelease

machines.os_release

Версия релиза ОС

saltversion

machines.salt_version

Версия модуля координации на агенте (minion)

master

machines.salt_master

Имя сервера управления (master)

pythonversion

machines.python_version

Версия Python для модуля координации на агенте (minion)

_stamp

machines.updated_at

Дата и время актуализации характеристик

Настройка расписания синхронизации агентов (minions) с сервером управления (master)

Расписание синхронизации агентов (minions) с сервером управления (master) с настройками по умолчанию задается в БД для всей системы при установке продукта.

Настройки определяют:

  • операции, для которых выполняется синхронизация:

    • инвентаризации устройств (highstate);

    • синхронизации параметров Grains (grains);

    • применения назначенных конфигураций на устройствах (grainsSync);

    • синхронизации хранилища Pillar (refreshPillar);

  • интервал в секундах, через который выполняется операция (seconds);

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

Значения по умолчанию:

{
  "highstate": {
    "seconds": 84400,
    "splay": 14400
  },
  "grains": {
    "seconds": 14400,
    "splay": 2400
  },
  "grainsSync": {
    "seconds": 84400,
    "splay": 14400
  },
  "refreshPillar": {
    "seconds": 14400,
    "splay": 2400
  }
}

Чтобы просмотреть текущие настройки или изменить их, используйте соответствующие API-методы (см. раздел «API логического модуля «Инвентаризация»» документа «Описание API»).

Диагностика работоспособности модулей продукта

В разделе описывается диагностика работоспособности модулей продукта:

Диагностика работоспособности модуля osmax-core

Диагностика работоспособности модуля osmax-core осуществляется одним из следующих способов:

  1. Проверка логов системы. В случае успешного запуска и работы модуля в логах должно присутствовать сообщение:

    osmax-core <version> on JVM (powered by Quarkus <quarkus_version>) started in <some_time>

    Где:

    • <version> — версия установленного deb/rpm-пакета;

    • <quarkus_version> — версия Quarkus;

    • <some_time> — время запуска работы модуля.

      Пример:

      osmax-core 1.1.0 on JVM (powered by Quarkus 3.12.3) started in 13.321s.
  2. Выполнение HTTP-запросов к автоматически созданным конечным точкам на машине с установленным osmax-core с помощью библиотеки SmallRye Health для Quarkus, реализующей спецификацию MicroProfile Health. Этот способ позволяет проводить проверку соединения модуля с базой данных и Apache Kafka:

    • GET http://localhost:<port>/q/health/live — проверяет работоспособность системы;

    • GET http://localhost:<port>/q/health/ready — проверяет, готова ли система обрабатывать запросы.

      Например:

    • GET http://localhost:8081/q/health/live;

    • GET http://localhost:8081/q/health/ready.

      Для проверки установки соединения с LDAP-сервером, модулем «Удаленный доступ», модулем координации (SaltStack) и S3-совместимым хранилищем см. логи системы.

      Пример ответа на запрос к конечной точке http://172.28.15.253:8081/q/health/live:

      {
          "status": "UP",
          "checks": [
              {
                  "name": "SmallRye Reactive Messaging - liveness check",
                  "status": "UP",
                  "data": {
                      "salt-events-kafka": "[OK]",
                      "provisioner-os-installed-events-kafka": "[OK]"
                  }
              }
          ]
      }

      Пример ответа на запрос к конечной точке http://172.28.15.253:8081/q/health/ready:

      {
          "status": "UP",
          "checks": [
              {
                  "name": "Database connections health check",
                  "status": "UP",
                  "data": {
                      "lcm-db-readonly": "UP",
                      "lcm-db": "UP"
                  }
              },
              {
                  "name": "Reactive PostgreSQL connections health check",
                  "status": "UP",
                  "data": {
                      "lcm-db-readonly": "UP",
                      "lcm-db": "UP"
                  }
              },
              {
                  "name": "SmallRye Reactive Messaging - readiness check",
                  "status": "UP",
                  "data": {
                      "salt-events-kafka": "[OK]",
                      "provisioner-os-installed-events-kafka": "[OK]"
                  }
              }
          ]
      }

Диагностика работоспособности модуля osmax-provisioner

Диагностика работоспособности модуля osmax-provisioner осуществляется одним из следующих способов:

  1. Проверка логов системы. В случае успешного запуска и работы модуля в логах должно присутствовать сообщение:

    osmax-provisioner <version> on JVM (powered by Quarkus <quarkus_version>) started in <some_time>

    Где:

    • <version> — версия установленного deb/rpm-пакета;

    • <quarkus_version> — версия Quarkus;

    • <some_time> — время запуска работы модуля.

      Пример:

      osmax-provisioner 1.1.0 on JVM (powered by Quarkus 3.12.3) started in 13.321s.
  2. Выполнение HTTP-запросов к автоматически созданным конечным точкам на машине с установленным osmax-provisioner с помощью библиотеки SmallRye Health для Quarkus, реализующей спецификацию MicroProfile Health. Этот способ позволяет проводить проверку соединения модуля с базой данных и Apache Kafka:

    • GET http://localhost:<port>/q/health/live — проверяет работоспособность системы;

    • GET http://localhost:<port>/q/health/ready — проверяет, готова ли система обрабатывать запросы.

      Например:

    • GET http://localhost:8082/q/health/live;

    • GET http://localhost:8082/q/health/ready.

      Пример ответа на запрос к конечной точке http://172.28.15.253:8082/q/health/live:

      {
        "status": "UP",
        "checks": [
          {
            "name": "SmallRye Reactive Messaging - liveness check",
            "status": "UP",
            "data": {
              "reinstallation-machines-import": "[OK]",
              "machine-installation-status": "[OK]",
              "reinstallation-machines-import-result": "[OK]"
            }
          }
        ]
      }

      Пример ответа на запрос к конечной точке http://172.28.15.253:8082/q/health/ready:

      {
        "status": "UP",
        "checks": [
          {
            "name": "SmallRye Reactive Messaging - readiness check",
            "status": "UP",
            "data": {
              "reinstallation-machines-import": "[OK]",
              "machine-installation-status": "[OK]",
              "reinstallation-machines-import-result": "[OK]"
            }
          },
          {
            "name": "Reactive PostgreSQL connections health check",
            "status": "UP",
            "data": {
              "<default>": "UP"
            }
          },
          {
            "name": "Database connections health check",
            "status": "UP"
          }
        ]
      }

Журналирование

Журналирование — это процесс записи хронологии событий, сообщений или действий программного обеспечения или пользователей, происходящих в системе, в специальные лог-файлы заданного формата. События записываются в режиме, при котором каждая новая запись добавляется в конец файла, а сам файл называется оперативным. При достижении/превышении определенного размера файла содержимое файла автоматически копируется в исторический файл.

Для просмотра лог-файлов рекомендуется использовать специальные утилиты по работе с логами, например, Log File Navigator (lnav).

Для действий, происходящих во внешних системах, например, БД, системы хранения контента, веб-сервера, службы каталогов, события в журнал не регистрируются.

Параметры лог-файлов

Оперативный и исторические файлы — это файлы формата JSONL, которые создаются автоматически при установке продукта и хранятся на устройствах, на которых они были сгенерированы, в каталогах:

  • /var/log/osmax/core — каталог для хранения файлов модуля бэкенда osmax-core;

  • /var/log/osmax/provisioner — каталог для хранения файлов модуля osmax-provisioner;

  • /var/log/osmax/salt/master — каталог для хранения файлов сервера управления (master);

  • /var/log/osmax/salt/minion — каталог для хранения файлов агентов (minions).

Имена файлов задаются согласно шаблонам:

  • шаблон имени оперативного файла:

    log{-applicationAlias}.log

    Где applicationAlias — название приложения, например: log-osmax-core.log.

  • шаблон имени исторического файла:

    log{-applicationAlias}.log.yyyy-MM-dd.{N}

    Где:

    • N — индекс файла;

    • applicationAlias — название приложения;

    • yyyy-MM-dd — дата ротации файла.

Исторические лог-файлы архивируются и имеют расширение .gz.

По умолчанию предельный размер оперативного файла составляет 10 МБ. Для лог-файлов бэкенда при необходимости можно задать другое значение. Для лог-файлов сервера управления (master) и агентов (minions) значение параметра не конфигурируется.

Описание полей лог-файла

Код поля Описание

Timestamp

Время фиксации события приложением/сервисом в формате: 2024-04-26T12:37:23.000Z

Level

Уровень логирования; возможные значения:

  • бэкенд:

    • ALL  —  все сообщения будут записываться в лог-файл;

    • INFO — информационные сообщения о ходе работы приложения/сервиса;

    • WARN — сообщения, содержащие предупреждение о потенциальной проблеме или необычном состоянии, которое не является ошибкой, но требует внимания;

    • DEBUG — сообщения, содержащие отладочную информацию;

    • TRACE — сообщения, содержащие детальную отладочную информацию;

    • ERROR — сообщения об ошибке, которая привела к некритическому сбою;

    • FATAL — сообщения об ошибке, которая привела к критическому сбою;

    • OFF — сообщения в лог-файл записываться не будут;

  • модуль координации (SaltStack):

    • all —  все сообщения будут записываться в лог-файл;

    • warning — сообщения, содержащие предупреждение о потенциальной проблеме или необычном состоянии, которое не является ошибкой, но требует внимания;

    • info — информационные сообщения о ходе работы модуля;

    • profile — профильная информация о производительности модуля координации (SaltStack);

    • debug — сообщения, содержащие отладочную информацию;

    • trace — сообщения, содержащие детальную отладочную информацию;

    • garbage — сообщения, содержащие детальную (чем trace) отладочную информацию;

    • error — сообщения об ошибке, которая привела к некритическому сбою;

    • critical — сообщения об ошибке, которая привела к критическому сбою;

    • quiet — сообщения в лог-файл записываться не будут

AppName

Логическое наименование модуля, инициировавшего событие; возможные значения:

  • osmax-core — бэкенд (ядро);

  • osmax-provisioner — бэкенд (модуль установки ОС);

  • salt-master — сервер управления (master);

  • salt-minion — агент (minion)

HostName

Наименование устройства, на котором производится запись событий.

В текущей версии продукта значение HostName будет указываться только для событий бэкенда

Message

Сообщение, описывающее произошедшее событие

Аудит

Аудит в продукте выполняется для модулей бэкенда osmax-core и osmax-provisioner.

Для действий, происходящих внутри внешних систем, например, БД, системы хранения контента, веб-сервера, службы каталогов, события аудита не регистрируются.

В ходе аудита модули бэкенда собирают и записывают информацию о важных событиях, таких как аутентификация и авторизация пользователей, доступ к защищенным ресурсам или изменение конфигурации системы, в специальные лог-файлы заданного формата. События регистрируются в режиме, при котором каждая новая запись добавляется в конец оперативного файла. При достижении/превышении определенного размера содержимое оперативного файла автоматически копируется в исторический файл.

Для каждого регистрируемого события указываются:

  • тип;

  • идентификационные данные пользователя, инициировавшего регистрируемое событие;

  • успешность или не успешность осуществляемых действий;

  • дата и время события;

  • другие данные, достаточные для однозначной интерпретации события (см. раздел «Описание полей лог-файла»).

Для отслеживания записей лог-файлов, обогащения, преобразования их в необходимый формат и передачи в Kafka используется система сбора и передачи данных журналов Fluent Bit.

Параметры лог-файлов

Оперативный и исторические файлы — это файлы формата JSONL, которые создаются автоматически при установке продукта и хранятся в каталоге /var/log/osmax/core.

Имена файлов задаются согласно шаблонам:

  • шаблон имени оперативного файла:

    audit{-applicationAlias}.log

    Где applicationAlias — название приложения, например: audit-osmax-core.log.

  • шаблон имени исторического файла:

    audit{-applicationAlias}.log.yyyy-MM-dd.{N}

    Где:

    • N — индекс файла;

    • applicationAlias — название приложения;

    • yyyy-MM-dd — дата ротации файла.

По умолчанию предельный размер оперативного файла аудита составляет 10 МБ. При необходимости можно задать иное значение.

Описание полей лог-файла

Родительский элемент Элемент Описание Запись в лог-файле Запись в Fluent Bit

$

timestamp

Дата и время сообщения. Формат: YYYY-MM-DD’T’hh:mm:ss.SSSXXX

Дата и время генерации события на сервере

Значение переносится из лог-файла

$

id

Идентификатор события

Каждый раз генерируется новый UUID

Значение переносится из лог-файла

$

correlationId

Идентификатор группы событий (например, начало и окончание фоновой процедуры)

Каждый раз генерируется новый UUID

Значение переносится из лог-файла

Данные об информационной системе клиента

$

infoSystemCode

Код информационной системы

Не заполняется

Константа со значением информационной системы

$

infoSystemId

Идентификатор информационной системы

Не заполняется

Константа со значением информационной системы

Данные о типе событий

$

version

Версия сообщений (версия схемы)

Не заполняется

Константа со значением информационной системы

$

type

Тип события

Заполняется на русском языке. См. колонку type в таблицах ниже

Значение переносится из лог-файла

$

code

Код события

См. колонку code в таблицах ниже

Значение переносится из лог-файла

$

mandatory

Не заполняется

Константа со значением true

$

object

Объект с дочерними атрибутами

Не заполняется

Значение создается при обработке

Данные об объекте и операции

$.object

id

Идентификатор бизнес-объекта, над которым выполняется действие, например 765. Если у бизнес-объекта нет идентификатора, указывается символ "-"

См. колонку object.id в таблицах ниже

Значение переносится из лог-файла

$.object

name

Название типа объекта, над которым выполняется действие. Например, "конфигурация"

Заполняется, только если объект в колонке operation выделен жирным шрифтом. Заполняется на русском языке

Значение переносится из лог-файла (если присутствует в лог-файле); создается с пустым значением (если отсутствует в лог-файле)

$

operation

Название бизнес-операции, например, «создание конфигурации»

Не заполняется

Заполняется значением, указанным в поле message, без преобразований и на русском языке

Данные о событии, связанные с классом сообщения о событии

$

class

Класс сообщения о событии. Возможные значения:

  • SUCCESS;

  • FAILURE

См. колонку class в таблицах ниже

Значение переносится из лог-файла

$

title

Краткое описание сообщения

Не заполняется

Заполняется на русском языке значением, указанным в поле message

$

message

Подробное описание события

Описание параметров события передается в поле additionalParams

См. колонку message в таблицах ниже. Заполняется на русском языке

Значение переносится из лог-файла (если в лог-файле нет параметра exception) или заполняется (с полным замещением текущего значения) значением, указанным в поле exception, (если оно присутствует в лог-файле)

$

initiator

Объект с дочерними атрибутами

Не заполняется

Объект создается при обработке

$

sub

Имя пользователя, например, iivanov@inno.tech

Если событие — это вызов конечной точки (end point), то указываются данные из тикета Kerberos (Principal.simpleName и Principal.realm), в остальных случаях указывается символ "-"

Значение переносится из лог-файла

$

ipAddress

IP-адрес пользователя, выполнившего операцию

  • если событие — это вызов конечной точки (end point), то указывается первое значение из заголовка запроса X-Forwarded-For;

  • если событие — это задача по расписанию, то не заполняется.

Значение переносится из лог-файла

Данные о контексте события

$

context

Объект с дочерними атрибутами

Не заполняется

Объект создается при обработке

$.context

sessionId

сессия JWT-токена

Не заполняется

Значение переносится из лог-файла

$.context

url

URL-адрес конечной точки, указанный вместе с протоколом и параметрами.

Поле заполняется, только если событие — это вызов конечной точки (end point). В остальных случаях указывается символ "-"

$.context

method

HTTP-метод

Поле заполняется, только если событие — это вызов конечной точки (end point). В остальных случаях указывается символ "-"

Значение переносится из лог-файла

$.context

traceId

Идентификатор трассировки

Не заполняется

Значение переносится из лог-файла

$.context

spanId

Идентификатор шага трассировки

Не заполняется

Значение переносится из лог-файла

$

ipNearbyNode

IP-адрес, на который выполняется вызов от клиента

Не заполняется

$

ipRecepient

IP-адрес получателя

Не заполняется

Данные о развертывании информационной системы

$

deploymentContext

Объект с дочерними атрибутами

Не заполняется

Создается при обработке

$.deploymentContext

namespace

Пространство имен платформы (OpenShift/Kubernetes), в которой развёрнут сервис, генерирующий логи

Не заполняется

$.deploymentContext

podName

Имя текущей поды (POD) (OpenShift/Kubernetes), в которой развёрнут сервис, генерирующий логи

Не заполняется

Дополнительные параметры

$

additionalParams

Все дополнительные параметры сообщения

См. колонку additionalParams в таблицах ниже

переносится из лог-файла (если параметр присутствует). Если в лог-файле не указаны параметры`additionalParams.*`, то в Kafka ничего не отгружается. Если присутствует хотя бы один параметр, то формируется объект вида:

"additionalParams":
  {"configurationVersionName": "1.1",
  "configurationId": 8765, "configurationName": "Пакет программ для бухгалтерии"
  },

$

exception

Информация об ошибке в произвольном формате, если действие завершилось неудачно (success = failure)

Заполняется, только если в лог-файле была зарегистрирована информация об ошибке

Если параметр задан в лог-файле, значением этого поля заменяется объект message

Данные для интеграции с системой централизованного мониторинга событий безопасности клиента

$

scmCategory

Возможные значения:

  • ENTRY_EXIT_OPERATIONS — операции входа/выхода в пользовательский интерфейс;

  • ACCOUNT_MANAGEMENT_OPERATIONS — управление учётными записями;

  • PRIVELEGES_MANAGEMENT_OPERATIONS — управление ролями и привилегиями;

  • SYSTEM_ERRORS — системные ошибки/сбои

В текущей версии продукта используется только значение PRIVELEGES_MANAGEMENT_OPERATIONS для событий ROLES-*. В остальных случаях указывается значение null

Значение переносится из лог-файла или создается параметр со значением ""

Пример лог-файла:

{
  "timestamp": "2024-06-27T15:37:45.943Z",
  "sequence": 27003,
  "loggerClassName": "io.github.oshai.kotlinlogging.slf4j.internal.LocationAwareKLogger",
  "loggerName": "AUDIT",
  "level": "INFO",
  "message": "Авторизация в приложении",
  "threadName": "executor-thread-321",
  "threadId": 520,
  "initiator.sub": "iivanov@OSMAX.TERRA.INNO.TECH",
  "context.method": "-",
  "correlationId": "7422db8a-fd80-4780-8ffe-56d46587eb49",
  "class": "SUCCESS",
  "code": "AUTH-003",
  "type": "Авторизация",
  "context.url": "-",
  "id": "2780d3db-4377-402f-b784-4a3814273578",
  "object.id": "-",
  "componentName": "osmax-core",
  "ipAddress": "-",
  "hostName": "dev-osmax-a50",
  "processName": "io.quarkus.runner.GeneratedMain",
  "processId": 52785
}

События аудита

События аутентификации

type code object.id message object.name class additionalParams Описание

Аутентификация

AUTH-001

-

Аутентификация в приложении

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибки с кодом 401)

сomponentName — компонент продукта (osmax-core)

Проверка валидности Kerberos-тикета при любом запросе от фронтенда, который поступает в модуль osmax-core

Аутентификация

AUTH-002

-

Аутентификация в приложении

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибки с кодом 401)

сomponentName — компонент продукта (osmax-provisioner)

Проверка валидности Kerberos-тикета при любом запросе от фронтенда, который поступает в модуль osmax-provisioner

События авторизации

type code object.id message object.name class additionalParams Описание

Авторизация

AUTH-003

-

Авторизация в сервисном приложении

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибки с кодом 403)

сomponentName — компонент продукта (osmax-core)

Получение ролей для пользователя и проверка доступности объектов БД при любом запросе от фронтенда, который поступает в модуль osmax-core

Авторизация

AUTH-004

-

Авторизация в сервисном приложении

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибки с кодом 403)

сomponentName — компонент продукта (osmax-provisioner)

Получение ролей для пользователя и проверка доступности объектов БД при любом запросе от фронтенда, который поступает в модуль osmax-provisioner

События управления ролевым доступом

type code object.id message object.name class additionalParams Описание

Создание

ROLES-001

Id роли из ответа

Создание роли

роль

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • roleName — имя роли; для методов POST и PUT указывается значение из запроса; для методов PUT и DELETE указывается значение из поля name таблицы БД lcm.roles; поиск выполняется по идентификатору, указанному в запросе;

  • roleId — идентификатор роли

Создание роли, которая не привязана к пользователю/группе

Изменение

ROLES-002

Id роли из запроса

Изменение роли

роль

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • roleName — имя роли; для методов POST и PUT указывается значение из запроса; для методов PUT и DELETE указывается значение из поля name таблицы БД lcm.roles; поиск выполняется по идентификатору, указанному в запросе;

  • roleId — идентификатор роли

Изменение характеристик роли без изменения состава полномочий роли и без изменения привязки к пользователям/группам

Удаление

ROLES-003

Id роли из запроса

Удаление роли

роль

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • roleName — имя роли; для методов POST и PUT указывается значение из запроса; для методов PUT и DELETE указывается значение из поля name таблицы БД lcm.roles; поиск выполняется по идентификатору, указанному в запросе;

  • roleId — идентификатор роли

Удаление и отвязка роли от пользователей/групп

Изменение

ROLES-004

Id роли из запроса

Изменение списка доступных действий над объектами в рамках роли

роль

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • roleName — имя роли; для методов POST и PUT указывается значение из запроса; для методов PUT и DELETE указывается значение из поля name таблицы БД lcm.roles; поиск выполняется по идентификатору, указанному в запросе;

  • roleId — идентификатор роли

Изменение полномочий роли. Если роль привязана к пользователю/группе, то у пользователя/группы появляются полномочия в системе

Изменение

ROLES-005

Id роли из запроса

Назначение роли пользователю или группе

роль

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • userName — имя пользователя;

  • roleName — имя роли; для методов POST и PUT указывается значение из запроса; для методов PUT и DELETE указывается значение из поля name таблицы БД lcm.roles; поиск выполняется по идентификатору, указанному в запросе;

  • roleId — идентификатор роли

Роль привязывается к пользователю/группе. У пользователя/группы через роль появляются полномочия в системе

Изменение

ROLES-006

Id роли из запроса

Отзыв роли у пользователя или группы

роль

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • userName — имя пользователя;

  • roleName — имя роли; для методов POST и PUT указывается значение из запроса; для методов PUT и DELETE указывается значение из поля name таблицы БД lcm.roles; поиск выполняется по идентификатору, указанному в запросе;

  • roleId — идентификатор роли

Роль отвязывается от пользователя/группы. У пользователя/группы из-за отвязки роли пропадают полномочия в системе

Системные события

type code object.id message object.name class StartTime и EndTime additionalParams Описание

Процедура

OBJ-010

-

Автоматическое сопоставление

null

Возможные значения:

  • succes — в случае успешного выполнения;

  • failure — в случае неуспешного выполнения

По заданному расписанию

trigger — расписание

Автоматическое сопоставление устройства и пользователей, которое выполняется по заданному расписанию

Установка

SOFT-003

-

Установка, обновление, удаление ПО, запуск или остановка служб, настройка ОС в фоновом режиме

null

Возможные значения:

  • succes — в случае успешного выполнения;

  • failure — в случае неуспешного выполнения

Значение, указанное в поле _stamp в сообщении (значение указано в UTC)

  • installation — название отработавшего пакета;

  • minion — имя агента (minion)

Установка, обновление, удаление ПО, запуск или остановка служб, настройка ОС в фоновом режиме. Событие генерируется из сообщения топика Kafka salt-topic

Установка

SOFT-004

-

Установка, обновление, удаление ПО, запуск или остановка служб, настройка ОС в push-режиме

null

Возможные значения:

  • succes — в случае успешного выполнения;

  • failure — в случае неуспешного выполнения

Значение, указанное в поле _stamp в сообщении (значение указано в UTC)

  • installation — название отработавшего пакета;

  • minion — имя агента (minion)

Установка, обновление, удаление ПО, запуск или остановка служб, настройка ОС в push-режиме. Событие генерируется из сообщения топика Kafka salt-topic

Установка

SOFT-005

-

Установка агента на устройство

null

Возможные значения:

  • succes — в случае успешного выполнения;

  • failure — в случае неуспешного выполнения

Значение, указанное в поле _stamp в сообщении (значение указано в UTC)

minion — имя агента (minion)

Установка агента (minion) на устройство. Событие генерируется из сообщения топика Kafka salt-topic

Процедура

OBJ-102

-

Автоматический пересчёт коллекции

null

Возможные значения:

  • succes — в случае успешного выполнения;

  • failure — в случае неуспешного выполнения

По расписанию

trigger — расписание

Автоматический пересчет коллекции устройств. Событие запускается по расписанию. Изменения сохраняются в БД

Интеграция

INTEG-001

-

Cинхронизация данных по пользователям, устройствам, группам c хранилищем

null

Возможные значения:

  • succes — в случае успешного выполнения;

  • failure — в случае неуспешного выполнения

По расписанию

  • trigger — расписание;

  • store — LDAP-сервер

Cинхронизация данных по пользователям, устройствам, группам c данными на LDAP-сервере. Событие запускается по расписанию. Пользователи, устройства, группы сохраняются в БД

Процедура

BLOCK-002

-

Автоматическое снятие пессимистичных блокировок по таймауту

null

Возможные значения:

  • succes — в случае успешного выполнения;

  • failure — в случае неуспешного выполнения

По расписанию

trigger — расписание

Удаление записей о блокировках, которые старше заданного значения

События, связанные с действиями администратора в КА

type code object.id message object.name class additionalParams Описание

Действия администратора, связанные с интеграцией (osmax-core)

Загрузка

INTEG-004

-

Загрузка формул отдельно от конфигурации

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

formula — имя файла из запроса

Загрузка формул, в которых описана установка ПО, запуск служб, настройка ОС и т.д., в S3-совместимое хранилище

Загрузка

INTEG-005

-

Загрузка файла в хранилище

файл

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

fileName — имя файла (параметр originalFileName из запроса)

Загрузка файла с изображением, которое будет использоваться как обложка для графического интерфейса «Магазин администратора» в S3-совместимое хранилище

Интеграция

INTEG-009

-

Принудительный запуск синхронизации пользователей, устройств, групп c хранилищем

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • trigger — ручной запуск;

  • store — LDAP-сервер

Принудительный запуск синхронизации пользователей, устройств, групп c данными LDAP-сервера. Группы, устройства, пользователи сохраняются в БД

Действия администратора, связанные с инвентаризацией (osmax-core)

Редактирование

OBJ-001

-

Редактирование настроек загрузки пользователей из хранилища

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • datasourceName — datasourceName из запроса;

  • action — возможные значения: New, Edit или Delete;

  • store — LDAP-сервер

Изменения настроек загрузки пользователей с сервера LDAP:

  • создание поискового запроса для источника данных LDAP при синхронизации пользователей;

  • удаление поискового запроса для источника данных LDAP при синхронизации пользователей;

  • изменение поискового запроса для источника данных LDAP при синхронизации пользователей

Редактирование

OBJ-002

-

Изменение расписания синхронизации всех сущностей

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • datasourceName — datasourceName из запроса;

  • action — возможные значения: New, Edit или Delete;

  • store — LDAP-сервер

Изменение расписания синхронизации всех сущностей с сервера LDAP

Редактирование

OBJ-003

-

Редактирование настроек загрузки устройств

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • datasourceName — datasourceName из запроса;

  • action — возможные значения: New, Edit или Delete;

  • store — LDAP-сервер

Изменение настроек загрузки устройств с сервера LDAP:

  • добавление нового запроса синхронизации устройств для заданного LDAP-сервера;

  • удаление фильтра синхронизации устройств для заданного LDAP-сервера;

  • изменение фильтра синхронизации устройств для заданного LDAP-сервера

Редактирование

OBJ-005

-

Редактирование настроек загрузки групп

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • datasourceName — datasourceName из запроса;

  • action — возможные значения: New, Edit или Delete;

  • store — LDAP-сервер

Изменение настроек загрузки групп с сервера LDAP:

  • cоздание поискового запроса для LDAP-сервера при синхронизации групп;

  • удаление поискового запроса для LDAP-сервера при синхронизации пользователей;

  • изменение поискового запроса для LDAP-сервера при синхронизации групп

Настройка

OBJ-007

-

Включение или отключение автоматического сопоставления пользователей и устройств

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

turn — возможные значения: on и off

Включение или отключение режима автоматического сопоставления пользователей и устройств

Настройка

OBJ-008

-

Изменение параметров автоматического сопоставления

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

Изменение атрибутов режима автоматического сопоставления пользователей и устройств

Процедура

OBJ-009

-

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

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

trigger — ручной запуск

Ручной запуск автоматического сопоставления пользователей и устройств

Загрузка

OBJ-011

-

Импорт файла соответствия пользователей и машин

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

fileName — имя файла, указанное в запросе

Импорт файла соответствия пользователей и устройств

Настройка

OBJ-012

-

Редактирование значений настроек агентов

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

schedule — параметр scheduleType из запроса

Изменение настроек расписаний для SaltStack и сохранение их в S3-совместимом хранилище

Выгрузка

OBJ-016

-

Экспорт в файл

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • object — имя ресурса; в зависимости от конечной точки (end point) может принимать одно из значений:

    • users;

    • machines;

    • collections;

    • groups;

  • format — формат файла (CSV-формат)

Выгрузка данных на устройство пользователя:

  • экспорт данных пользователей по критериям в CSV-формате;

  • экспорт данных устройств по критериям в CSV-формате;

  • экспорт данных коллекций по критериям в CSV-формате;

  • выгрузка отчета по группам в CSV-формате

Редактирование

OBJ-017

-

Редактирование значений настроек (параметров) пользователей при синхронизации с LDAP

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • action — действие (Edit);

  • store — БД (LDAP);

  • все параметры, которые были изменены пользователем, с новыми значениями (true/false), например, "sn": "false"

Изменение значений настроек (параметров) пользователей при синхронизации с LDAP

Редактирование

OBJ-018

-

Редактирование значений настроек параметров сбора данных по ПО

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • action — действие (Edit);

  • store —  ПО (inventory_software)

Изменение настроек сбора данных по ПО (перечень игнорируемого ПО для сбора) на устройстве:

  • создание списка пакетов, исключенных из инвентаризации;

  • создание списка исполняемых файлов, исключенных из инвентаризации;

Действия администратора, связанные с коллекциями (osmax-core)

Редактирование

OBJ-101

Идентификатор коллекции. Для методов DELETE и PUT указывается идентификатор из path-параметра. Для метода POST указывается идентификатор из ответа

Редактирование коллекций

коллекция

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

collectionName — имя коллекции (для методов POST и PUT указывается значение поля name из тела запроса; для метода DELETE —  из поля name таблицы БД machine_collections; поиск выполняется по значению collectionId)

Операции с коллекциями устройств:

  • создание коллекций устройств;

  • получение информации о коллекции устройств;

  • удаление коллекции устройств

Процедура

OBJ-106

-

Запуск процедуры пересчета коллекции в ручном режиме

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • trigger — ручной запуск (manual);

  • collectionName — имя коллекции; указывается значение поля name таблицы БД lcm.machine_collections; поиск выполняется по параметру collectionId из запроса

Запуск процедуры пересчета коллекции устройств в ручном режиме

Редактирование

OBJ-107

Идентификатор пресета. Для метода DELETE указывается значение из path-параметра. Для метода POST — из ответа

Редактирование пресета коллекций

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

presetName  — имя пресета; для метода POST указывается значение поля name из тела запроса; для метода DELETE указывается значение поля name таблицы БД machine_collection_presets; поиск выполняется по параметру presetId из запроса

Операции с пресетами коллекций:

  • создание пресета (предустановки) коллекции;

  • удаление пресета по идентификатору

Действия администратора, связанные с конфигурациями (osmax-core)

Редактирование

OBJ-201

Идентификатор конфигурации. Для методов DELETE и PUT указывается значение из path-параметра. Для метода POST — из ответа

Редактирование конфигураций

конфигурация

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

configurationName  — имя конфигурации; для методов POST и PUT указывается значение поля displayName из тела запроса; для метода DELETE — поля display_name таблицы БД configurations; поиск выполняется по параметру configurationId, указанному в запросе

Операции с конфигурациями:

  • создание конфигурации;

  • изменение конфигурации по идентификатору;

  • удаление конфигурации по идентификатору

Редактирование

OBJ-202

Идентификатор версии конфигурации. Для методов DELETE и PUT указывается значение из path-параметра. Для метода POST — из ответа

Редактирование версий конфигурации

версия конфигурации

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • configurationVersionName  — имя версии конфигурации; для методов POST и PUT указывается значение поля displayName из тела запроса; для метода DELETE — поля display_name таблицы БД configuration_versions; поиск выполняется по параметру versionId, указанному в запросе;

  • configurationId  — идентификатор конфигурации; указывается значение из path-параметра;

  • configurationName — имя конфигурации; указывается значение поля display_name таблицы БД configurations; поиск выполняется по параметру configurationId, указанному в запросе

Операции с версиями конфигураций:

  • создание версии конфигурации;

  • изменение версии конфигурации по идентификатору;

  • удаление версии конфигурации по идентификатору

Редактирование

OBJ-203

Идентификатор пакета конфигурации. Для методов DELETE и PUT указывается значение из path-параметра. Для метода POST — из ответа

Редактирование пакетов конфигурации

пакет конфигурации

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • relativeConfigurationId — идентификатор родительской конфигурации; указывается значение поля configuration_id таблицы БД configuration_packages;

  • configurationPackageName — имя пакета конфигурации; для методов POST и PUT указывается значение поля displayName из тела запроса; для метода DELETE — из БД: 1) выполняется поиск записи таблицы configuration_packages по параметру packageId из запроса 2) выполняется поиск записи configurations по параметру configuration_packages.configuration_id 3) указывается значение из поля display_name

Операции с пакетами конфигураций:

  • создание пакета конфигураций;

  • обновление пакета конфигураций;

  • удаление пакета конфигураций

Выгрузка

OBJ-204

-

Экспорт в файл

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • reportName — название отчета (configurations);

  • format — формат файла (csv)

Экспорт списка конфигураций

Загрузка

OBJ-205

Наименование конфигурации из загружаемого архива

Импорт из файла

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

fileName — имя архива

Импорт конфигурации

Действия администратора, связанные со связками коллекция-конфигурация (osmax-core)

Редактирование

OBJ-211

Идентификатор применения. Для метода DELETE указывается значение из path-параметра; для метода POST — из ответа

Редактирование применения конфигурации или пакета конфигурации к коллекции

применение конфигурации

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • collectionId — идентификатор коллекции; указывается значение из БД, которое вычисляется по алгоритму: collectionConfigId → запись collection_configurations → поле collection_id;

  • collectionName — имя коллекции; поиск значения выполняется в несколько этапов: collectionId (см. выше) → запись machine_collections → поле name;

  • configurationVersionId  — идентификатор версии конфигурации; указывается значение из БД, которое вычисляется по алгоритму: collectionConfigId → запись collection_configurations → поле configuration_version_id; для метода POST указывается значение из запроса;

  • configurationName — имя конфигурации; указывается значение из БД, которое вычисляется по алгоритму: configurationVersionId см. выше) → запись таблицы configuration_versions → запись таблицы configurations → поле display_name;

  • configurationVersionName — имя версии конфигурации; указывается значение из БД, которое вычисляется по алгоритму: configurationVersionId (см. выше) → запись таблицы configuration_versions → поле display_name

Операции с сущностью коллекция-конфигурация:

  • применение конфигурации к коллекции;

  • удаление соответствия конфигурации и коллекции

Установка

OBJ-212

Идентификатор применения. Для метода POST указывается значение из ответа

Запуск/остановка применения конфигурации или пакета конфигурации к коллекции

применение конфигурации

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • action:

    • start — если выполняется запрос на возобновление применения конфигурации к коллекции;

    • stop — если выполняется запрос на остановку применения конфигурации к коллекции;

  • collectionId — идентификатор коллекции; указывается значение из БД, которое вычисляется по алгоритму: collectionConfigId → запись collection_configurations → поле collection_id;

  • collectionName — имя коллекции; поиск значения выполняется в несколько этапов: collectionId (см. выше) → запись machine_collections → поле name;

  • configurationVersionId  — идентификатор версии конфигурации; указывается значение из БД, которое вычисляется по алгоритму: collectionConfigId → запись collection_configurations → поле configuration_version_id; для метода POST указывается значение из запроса;

  • configurationName — имя конфигурации; указывается значение из БД, которое вычисляется по алгоритму: configurationVersionId см. выше) → запись таблицы configuration_versions → запись таблицы configurations → поле display_name;

  • configurationVersionName — имя версии конфигурации; указывается значение из БД, которое вычисляется по алгоритму: configurationVersionId (см. выше) → запись таблицы configuration_versions → поле display_name

Операции с сущностью коллекция-конфигурация:

  • возобновление применения конфигурации к коллекции;

  • остановка применения конфигурации к коллекции

Выгрузка

OBJ-213

-

Экспорт в файл

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • reportName — название отчета (collection_configurations);

  • format — формат файла (csv)

Операции с сущностью коллекция-конфигурация:

  • экспорт списка применений конфигураций к коллекциям;

  • получение статусов установки конфигурации по каждой машине из соответствующей коллекции

Редактирование

OBJ-214

-

Настройка параметров успешности применения конфигурации или пакета конфигурации к коллекции

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

action — действие (Edit)

Запрос для изменения настроек неуспешности применения конфигураций

Действия администратора, связанные с сессиями (osmax-core)

Удаление

OBJ-301

-

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

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

Удаление истории сессий

Выгрузка

OBJ-302

-

Получение информации о сессиях

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • minion — значение, указанное в запросе в поле minionId;

  • user — имя пользователя; указывается значение из поля full_domain_name таблицы БД lcm.users; поиск выполняется по идентификатору, указанному в запросе;

  • fqdn — значение поля fqdn, указанное в запросе.

Если какое-то поле не указано в запросе, то поле детализации события аудита не заполняется

Операции по получению исторических данных о сессиях пользователей на устройствах:

  • получение сессий пользователей на указанном устройстве;

  • получение данных по устройствам, на которых есть активная сессия заданного пользователя;

  • получение списка активных сессий пользователя на устройстве;

  • экспорт исторической информации о сессиях

Действия администратора, связанные с настройкой отчётов (osmax-core)

Редактирование

OBJ-401

Идентификатор отчёта в БД. Для методов DELETE и PUT указывается значение из path-параметра. Для метода POST — из ответа

Регистрация шаблона отчета

отчет

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

reportName — имя отчёта; для методов POST и PUT указывается значение поля name из тела запроса; для метода DELETE указывается значение поля name таблицы БД reports; поиск выполняется по reportId, указанному в запросе

Операции с отчетами:

  • создание отчета на основе SQL-запроса;

  • изменение отчета на основе SQL-запроса;

  • удаление отчета по идентификатору

Выгрузка

OBJ-403

Идентификатор отчёта в БД. Указывается значение поля reportId из запроса

Выгрузка отчета

отчет

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

name — имя отчёта; указывается значение поля name таблицы БД lcm.report; поиск выполняется по reportId, указанному в запросе

Исполнение отчета

Действия администратора, связанные с установкой ОС (osmax-provisioner)

Редактирование

OBJ-501

Идентификатор Дистрибутива (installation_distros). Для методов DELETE и PUT указывается значение из path-параметра. Для метода POST — из ответа

Редактирование Дистрибутива

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

name — имя дистрибутива; для методов POST и PUT указывается значение поля name из тела запроса; для метода DELETE указывается значение поля name таблицы БД installation_distros; поиск выполняется по installationDistroId, указанному в запросе

Операции по работе с установочными дистрибутивами операционных систем, содержащих информацию об операционной системе и путях до репозиториев, в которых хранятся дистрибутивы:

  • создание установочного дистрибутива;

  • изменение установочного дистрибутива;

  • удаление установочного дистрибутива

Редактирование

OBJ-502

Идентификатор Профиля установки (installation_profiles). Для методов DELETE и PUT указывается значение из path-параметра; для метода POST — из ответа

Редактирование Профиля установки

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

name — имя профиля установки; для методов POST и PUT указывается значение поля name из тела запроса; для метода DELETE указывается значение поля name таблицы БД installation_profiles; поиск выполняется по installationProfileId, указанному в запросе

Операции по работе с профилями установки операционных систем, которые содержат информацию об установочном дистрибутиве и набор шаблонов для конфигурации процесса установки:

  • создание профиля установки;

  • изменение профиля установки;

  • удаление профиля установки

Редактирование

OBJ-503

Идентификатор способа развертывания (Installation_recipes). Для методов DELETE и PUT указывается значение из path-параметра; для метода POST — из ответа

Редактирование Развертывания

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

name — имя способа развертывания; для методов POST и PUT указывается значения поля name из тела запроса; для метода DELETE указывается значение поля name таблицы БД Installation_recipes; поиск выполняется по installationRecipeId, указанному в запросе

Операции по работе со способами развертывания операционных систем, которые описывают профиль установки, метод развертывания, а также дополнительные атрибуты развертывания, с которыми необходимо производить установку операционных систем на устройства:

  • создание способа развертывания;

  • изменение способа развертывания;

  • удаление способа развертывания

Редактирование

OBJ-504

Идентификатор Загрузочного образа (bootable_images). Для методов DELETE и PUT указывается значение из path-параметра; для метода POST — из ответа

Редактирование Загрузочного образа

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

name — имя загрузочного образа; для методов POST и PUT указывается значение поля name из тела запроса; для метода DELETE указывается значение поля name таблицы БД bootable_images; поиск выполняется по bootableImageId, указанному в запросе

Cоздание загрузочного образа

Выгрузка

OBJ-505

Идентификатор Загрузочного образа (значение bootable_image, указанное в path-параметре)

Выгрузка файла Загрузочного образа

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

name — имя загрузочного образа; указывается значение поля name таблицы БД bootable_images; поиск выполняется по bootableImageId

Скачивание сформированного ISO-файла загрузочного образа операционной системы. Полученный файл сохраняется на ПК клиента

Редактирование

OBJ-506

Идентификатор Шаблона (Installation_templates). Для методов DELETE и PUT указывается значение из path-параметра. Для метода POST — из ответа

Редактирование Шаблона конфигурации установки

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

name — имя шаблона; для методов POST и PUT указывается значение поля name из тела запроса; для метода DELETE указывается значение поля name таблицы БД templates; поиск выполняется по templateId, указанному в запросе

Операции по работе с файлами шаблонов, необходимых для установки операционных систем, например для формирования конфигурационных файлов, файлов ответов или скриптов пост-установки:

  • создание шаблона;

  • изменение шаблона;

  • удаление шаблона

Редактирование

OBJ-507

Идентификатор Нового устройства (unprovisioned_machines). Для методов DELETE и PUT указывается значение из path-параметра. Для POST — из ответа

Редактирование Нового устройства для установки ОС

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

hostName — имя хоста нового устройства; для методов POST и PUT указывается значение поля name из тела запроса; для метода DELETE указывается значение поля host_name таблицы БД unprovisioned_machines; поиск выполняется по unprovisioned_machine_id, указанному в запросе

Операции по работе с устройствами, физическими или виртуальными, на которых необходимо произвести установку операционной системы:

  • создание устройства;

  • изменение устройства;

  • удаление устройства

Редактирование

OBJ-508

Идентификатор процесса установки (installation_process). Для метода POST указывается значение из path-параметра

Фиксация состояния процесса установки

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

installationProcessId — идентификатор процесса установки на устройство. Для метода POST указывается значение из поля installationProcessId

Получение истории процесса по уникальному идентификатору устройства

Редактирование

OBJ-509

-

`Экспорт в файл отчета `

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • object — имя ресурса; в зависимости от вызванной конечной точки (endpoint) может принимать одно из значений:

    • bootable_images — загрузочный образ;

    • templates — шаблон;

    • installation_distros — установочный дистрибутив;

    • unprovisioned_machines  — устройство, на которое необходимо установить ОС;

    • Installation_recipes — план развертывания;

    • installation_profiles-- профиль установки;

  • format —  CSV-файл

Изменения сохраняются в БД. Событие создается при выполнении запросов с фронтенда:

  • экспорт загрузочных образов по критериям в CSV-файл;

  • экспорт шаблонов по критериям в CSV-файл;

  • экспорт дистрибутивов по критериям в CSV-файл;

  • экспорт новых устройств по критериям в CSV-файл;

  • экспорт планов развертывания по критериям в CSV-файл;

  • экспорт профилей установки по критериям в CSV-файл

Действия администратора, связанные с модулями grain, state, execution (osmax-core)

Редактирование

MODULES-001

Идентификатор файла (saltFileId). Для метода DELETE указывается значение из path-параметра. Для POST — из ответа

Загрузка модулей grain modules, state modules, execution modules

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • module_file_name — имя файла; для метода POST указывается имя file_name из тела запроса; для метода DELETE указывается значение поля file_name таблицы БД salt_files; поиск выполняется по saltFileId, указанному в запросе;

  • salt_file_status — указывается значение поля status из ответа (содержит информацию об общем статусе загрузки файла в S3-совместимое хранилище)

  • import_result — указывается значение поля import_result из ответа (содержит информацию по записи/удалению для каждого S3-совместимого хранилища)

Операции с пользовательскими файлами SaltStack (grains, states, execution modules):

  • загрузка файла SaltStack;

  • удаление файла SaltStack

Grain, State, Execution modules — это модули SaltStack, представленные в виде файлов python. Они могут быть загружены и удалены из S3-совместимого хранилища и БД. В БД содержится информация о файле, статус загрузки в S3-совместимое хранилище и статус по каждому хранилищу

Процедура

GRAIN-003

-

Принудительный запуск расчета состояния агентов на машинах

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

Получение информации о состоянии агентов (minions) из БД

Действия администратора, связанные с запросом удаленного доступа (osmax-core)

Запрос

RA-001

-

Запрос для получения удаленного доступа на устройство по выбранному протоколу

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • minion — значение поля minionId, указанное в запросе;

  • protocol — значение поля protocol, указанное в запросе;

  • user — полное доменное имя пользователя

Запрос для получения удаленного доступа на устройство по выбранному протоколу

Действия администратора, связанные с удаленными операциями (osmax-core)

Процедура

RO-001

-

Создание заявки на выполнение удаленной операции

null

  • remote_operation — поле remoteOperationId из запроса;

  • minion_list — поле machineFqdns из запроса

Создание заявок на выполнение удаленной операции

Редактирование

RO-002

Указывается значение из параметра пути {id}

Редактирование параметров операции

null

parameters — поле remoteOperationParameters из запроса

Изменение параметров удаленной операции

Действия администратора, связанные с разблокировкой заблокированных пессимистичной блокировкой сущностей (osmax-core, osmax-provisioner)

Редактирование

BLOCK-001

Идентификатор разблокировываемой сущности. Указывается значение из тела запроса

Ручное снятие блокировки с экземпляра сущности.

Необходимо различать разблокировку, связанную с сохранением заблокированной сущности, такая разблокировка не аудируется

null

Удаление произвольной блокировки по идентификатору. Используется для удаления любой блокировки захваченной любым пользователем. Для использования требуется специальное разрешение: locked_objects:delete

Действия администратора, связанные с удалением данных из БД

Редактирование

CLDB-01

Идентификатором является имя таблицы из запроса (entity_name)

Редактирование параметров удаления данных из БД

null

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • enabled — поле enabled из тела запроса;

  • schedule — поле schedule из тела запроса;

  • history_depth_days — поле historyDepthDays из тела запроса

Изменение параметров автоматического удаления неактуальных данных из БД по уникальному внутреннему наименованию сущности

Процедура

CLDB-02

Идентификатором является имя таблицы, на которой производится удаление данных (поле name в таблице cleanable_entities)

Периодическая очистка данных из БД

null

Возможные значения:

  • success;

  • failure

execution_status — поле last_execution_status из таблицы cleanable_entities

Событие запускается после выполнения задания на удаление, если удаление производилось

События, связанные с действиями пользователя в МП

type code object.id message object.name class StartTime и EndTime additionalParams

Описание

Запрос

SOFT-001

Идентификатор заказа, указанный в ответе

Создание заказа на установку или обновление или удаление версии ПО

заказ

Возможные значения:

  • success;

  • failure (в случае HTTP-ошибок с кодом 4хх или 5xx, кроме 401 и 403)

  • configurationName — указывается значение поля display_name таблицы БД lcm.configurations; поиск выполняется по configurationId, указанному в запросе;

  • configurationVersionName-- указывается значение поля display_name таблицы БД lcm.configuration_versions; поиск выполняется по configurationVersionId, указанному в запросе;

  • configurationVersionId — значение поля configurationVersionId, указанное в запросе;

  • softName — указывается значение поля formula_name таблицы БД lcm.configurations; поиск выполняется по configurationId, указанному в запросе;

  • action — значение поля action, указанное в запросе

Мониторинг

Для мониторинга работы модулей продукта используются метрики в формате Prometheus.

Метрики модулей бэкенда: osmax-core и osmax-provisioner

Сбор метрик осуществляется средствами расширения для Quarkus, которое включает в себя автоматическую интеграцию с библиотеками сбора метрик Micrometer и экспорт метрик в формате Prometheus.

Пример метрики:

# HELP http_server_requests_seconds_max
# TYPE http_server_requests_seconds_max gauge
http_server_requests_seconds_max{method="GET",outcome="CLIENT_ERROR",status="404",uri="NOT_FOUND",} 0.0

В приведенном примере:

  • HELP — словесное описание метрики, указывающее на предмет измерений;

  • TYPE — тип метрики, возможные значения:

    • counter — простой счетчик, значение которого монотонно возрастает;

    • gauge — счетчик, значение которого может произвольно изменяться как в большую, так и в меньшую сторону;

    • histogram — распределение значений измеряемой величины по настраиваемым группам с указанием количества измерений и общей суммы значений величины по всем измерениям;

    • summary — распределение значений измеряемой величины по настраиваемому набору квантилей в рамках определенного интервала времени с указанием количества изменений и общей суммы значений величины по всем измерениям;

  • http_server_requests_seconds_max — наименование метрики;

  • {method="GET",outcome="CLIENT_ERROR",status="404",uri="NOT_FOUND",} — набор меток или тегов (label в терминологии Prometheus), представляющих собой пары «ключ — значение» и содержащих детализированную информацию в рамках отдельной метрики;

    В приведенном примере содержится информация о запросе к HTTP-серверу.
  • 0.0 — значение метрики.

Quarkus предоставляет следующие метрики для используемого набора библиотек:

  • system — информация о хосте (дублирует метрики Linux);

  • process — информация о процессе;

  • jvm — информация о виртуальной машине Java;

  • http — информация о http-сервере;

  • worker-pool — информация о пуле рабочих потоков vert.x;

  • netty — информация о сетевом асинхронном фреймворке netty;

  • postgresql — информация о работе клиента БД;

  • kafka — информация о работе клиента kafka.

В таблице ниже описаны метрики, используемые для работы и диагностики модулей бекэнда.

Метрика Описание

process_cpu_usage

Процент использования процессора виртуальной машиной

process_files_open_files

Количество открытых десекрипторов файлов

jvm_memory_max_bytes

Максимальный объем памяти для использования (разделяется по типам)

jvm_memory_used_bytes

объем используемой памяти

jvm_memory_usage_after_gc_percent

Размер памяти (%), освобожденной после последнего GC heap

jvm_gc_max_data_size_bytes

Максимальный размер heap-памяти

jvm_gc_pause_seconds

Паузы на сборку мусора

jvm_gc_pause_seconds_max

Максимальное время, потраченное на GC

jvm_gc_overhead_percent

Процент времени, затрачиваемого на сборку мусора

jvm_threads_live_threads

Количество потоков

jvm_threads_peak_threads

Пиковое количество потоков

jvm_threads_states_threads

Число потоков по состоянию

jvm_classes_loaded_classes

Количество классов, загруженных в данный момент в виртуальную машину Java

jvm_buffer_total_capacity_bytes

Максимальный размер буферной памяти JVM

jvm_buffer_memory_used_bytes

Размер используемой буферной памяти JVM

http_server_active_requests

Активные запросы

http_server_requests_seconds_count

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

http_server_requests_seconds_sum

Время, затраченное на обработку запросов

http_server_requests_seconds_max

Максимальное время обработки запроса

worker_pool_active

Число используемых в данный момент ресурсов из пула

worker_pool_idle

Количество ресурсов из пула, которые в данный момент не используются

worker_pool_queue_delay_seconds_max

Максимальное время ожидания в очереди на выполнение

worker_pool_queue_size

Размер очереди ожидания

worker_pool_usage_seconds

Время использования ресурсов и пула

worker_pool_usage_seconds_max

Максимальное время использования ресурсов и пула

netty_allocator_memory_used

Размер используемой памяти Netty

netty_eventexecutor_tasks_pending

Количество ожидающих задач

postgresql_queue_delay_seconds

Время ожидания в очереди на выполнение

postgresql_queue_delay_seconds_max

Максимальное время ожидания в очереди на выполнение

postgresql_queue_size

Число элементов в очереди на выполнение

postgresql_current

Количество исполняемых в данный момент запросов

postgresql_processing_seconds

Время исполнения запроса

postgresql_processing_seconds_max

Максимальное время исполнения запроса

kafka_consumer_fetch_manager_records_consumed_rate

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

kafka_consumer_node_response_rate

Число ответов, полученных в секунду

kafka_consumer_time_between_poll_max

Максимальная задержка между вызовами poll()

kafka_consumer_node_request_rate

Число запросов, отправленных в секунду

kafka_consumer_fetch_manager_fetch_latency_avg

Среднее время на запросы fetch

kafka_consumer_fetch_manager_bytes_consumed_rate

Среднее число байт, потребляемое в секунду

kafka_consumer_fetch_manager_records_per_request_avg

Среднее число записей в запросах

kafka_consumer_incoming_byte_rate

Количество байтов, прочитанных из всех сокетов в секунду

kafka_consumer_request_size_avg

Средний размер отправленных запросов

kafka_consumer_request_rate

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

kafka_consumer_fetch_manager_fetch_rate

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

kafka_consumer_fetch_manager_fetch_size_avg

Среднее количество байтов, полученных за один запрос

kafka_consumer_fetch_manager_fetch_latency_max

Максимальное время, необходимое для запроса на получение

kafka_consumer_network_io_rate

Количество сетевых операций (чтение или запись) для всех подключений в секунду

Метрики модуля «Шлюз удаленного доступа»

  • system.cpu.load[all, avg5] —  загрузка CPU за последние 5 минут для всех процессоров;

  • vm.memory.size[pavailable] — процент доступной оперативной памяти (RAM);

  • proc.num[guacd] [u|1] — жизнеспособность компоненты Guacamole server;

  • net.tcp.service[http,,8080] — жизнеспособность компоненты Appache tomcat;

  • net.tcp.service[tcp,,1024] — жизнеспособность компоненты Postgresql;

  • proc.num[syslog_ng] [u|1] — жизнеспособность компоненты Syslog-ng.

Метрики модуля координации (SaltStack)

SaltStack не предоставляет метрики своего внутреннего состояния, поэтому для отслеживания работы модуля координации (SaltStack) можно использовать только метрики linux-сервера, на котором он будет запущен.

Метрики Linux

В таблице ниже перечислены метрики мониторинга и анализа работы серверов и компьютеров под управлением Linux, на которых запускаются модули: osmax-core, osmax-provisioner, salt-master.

Метрика

Оповещение

Описание

Warning

Average

High

Disaster

System uptime

Время работы системы с последней загрузки

Number of running processes

Число запущенных процессов

Number of CPUs

Количество ядер процессора

CPU utilization %

80

85

90

95

Утилизация ЦПУ

CPU system time

Время, которое процессор потратил на работу ядра и его процессов

CPU user time

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

CPU iowait time

Время, которое ЦП потратил на ожидание завершения ввода-вывода

Total memory

Количество оперативной памяти

Memory utilization %

80

85

90

95

Утилизация памяти

Total swap space

Общий объем тома/файла подкачки в байтах

Free swap space

Свободное пространство тома/файла подкачки в %

Disk size

Размер диска (раздела на котором работает приложение (логи, аудит, временные файлы и тп))

Disk utilization %

80

85

90

95

Утилизация диска

Disk read rate

Количество операций чтения в секунду

Disk write rate

Количество операций записи в секунду

Network interface operational status

Статус сетевой карты

Interface speed

Скорость сетевой карты

Interface utilization

80

85

90

95

Утилизация сетевой карты

Outbound packets with errors

Исходящие пакеты с ошибками

Inbound packets with errors

Входящие пакеты с ошибками

Outbound packets discarded

Отброшенные исходящие пакеты

Inbound packets discarded

Отброшенные входящие пакеты

Дополнительные метрики

Мониторинг и оповещения о критических ситуациях для сервисов PostgreSQL, S3, Kafka, Redis, Nginx настраиваются администраторами этих сервисов.

Ниже перечислены метрики, важные с точки зрения работы продукта, которые рекомендуется выводить на дашборд.

Метрики PostgreSQL

  • Total Connections — общее количество соединений с базой данных;

  • Active Сonnections — общее количество соединений с базой данных;

  • Idle Сonnections — количество неактивных (ожидающих использования) соединений;

  • TPS (Transactions Per Second) — количество транзакций в базе данных за одну секунду;

  • Database Size — размер БД.

Метрики S3

  • Read Bandwidth — пропускная способность для чтения данных из бакета;

  • Write Bandwidth — пропускная способность для записи данных в бакет;

  • Read Operations Per Second — количество операций чтения в бакете за одну секунду;

  • Write Operations Per Second — количество операций записи в бакет за одну секунду;

  • Bucket Size — размер бакета;

  • S3 Storage Object Count — количество объектов в бакете.

Метрики Kafka

  • Max Unread Topic Messages — максимальное количество непрочитанных сообщений в топике;

  • Current Unread Topic Messages — текущее количество непрочитанных сообщений в топике;

  • Topic File Size on Disk — размер файла(ов) топика на диске;

  • Messages In Per Second — скорость записи сообщений в топик;

  • Messages Out Per Second — скорость считывания сообщений из топика;

  • Client Fetch Request Failed Per Second — количество неудачных запросов клиента на получение сообщений за одну секунду;

  • Produce Requests Failed Per Second — количество неудачных запросов на запись сообщений за одну секунду.

Метрики Redis

  • Max Clients  — максимальное количество клиентов, которое может быть подключено к Redis;

  • Connected Clients — количество текущих подключенных клиентов;

  • Rejected Connections — количество соединений, которые были отклонены из-за достижения максимального количества клиентов;

  • Keyspace Hit — количество успешных обращений к ключам в кэше;

  • Keyspace Misses — количество неудачных обращений к ключам в кэше;

  • Evicted Keys — количество ключей, вытесненных из-за ограничения памяти;

  • Input Bytes Per Second — скорость входящего сетевого трафика в Redis;

  • Output Bytes Per Second — скорость исходящего сетевого трафика из Redis;

  • Operations Per Second — общее количество операций (например, чтение, запись) в Redis за одну секунду;

  • Total System Memory — общий объем системной памяти, используемой Redis;

  • Used Memory — количество используемой памяти Redis;

  • Used Memory Peak — максимальное количество памяти, которое использовалось Redis с момента последнего сброса;

  • Memory Fragmentation Ratio — отношение фрагментации памяти к общему объему памяти.

Метрики Nginx

  • Service Status — статус сервиса Nginx (например, "запущен" или "остановлен");

  • Active Connections — количество активных соединений с сервером Nginx;

  • Waiting — количество запросов, ожидающих обработки сервером Nginx;

  • Requests Per Second — количество запросов к серверу Nginx за одну секунду;

  • Connections Accepted Per Second — скорость принятых соединений веб-сервером Nginx за одну секунду;

  • Connections Handled Per Second — скорость обработанных соединений веб-сервером Nginx за одну секунду;

  • Connections Dropped Per Second — скорость отброшенных соединений веб-сервером Nginx за одну секунду.

Рекомендации по сбору и предоставлению информации о проблеме/ошибке

В случае возникновения проблемы/ошибки в работе продукта «Служба управления конфигурациями "Осмакс"» сообщите о ней в службу поддержки по электронному адресу osmax_support@inno.tech.

В обращении:

  1. Укажите максимально детально, в чем заключается проблема/ошибка и в каких условиях она возникла:

    • какие действия выполнялись перед возникновением проблемы/ошибки;

    • какой результат ожидалось получить;

    • к какому фактическому результату привели выполненные действия;

    • если проблема возникла при использовании пользовательского интерфейса, если есть техническая возможность, сделайте скриншот/видеозапись экрана, на котором видно некорректное поведение приложения.

  2. Предоставьте логи на момент возникновения проблемы/ошибки, а также за 10 минут до и после ее возникновения без изменения существующего уровня логирования.

    Логи для продукта снимаются отдельно:

Сбор логов пользовательского интерфейса

Сбор логов пользовательского интерфейса включает сбор консольных и HAR-логов (логов взаимодействия браузера и сервера во время загрузки веб-страницы) в браузере.

Пример сбора логов для Яндекс Браузера:

  • HAR-логи

  • Консольные логи

  1. Нажмите F12 на клавиатуре, чтобы открыть окно инструментов разработчика.

  2. Перейдите на вкладку Сеть.

  3. Нажмите на кнопку Запись сетевого журнала.

  4. Воспроизведите проблему.

  5. Нажмите на кнопку Остановить запись сетевого журнала.

  6. Нажмите на правую кнопку мыши в сетевой таблице и выберите Сохранить все как HAR с контентом.

  7. Выберите папку для сохранения логов и нажмите на кнопку Сохранить.

HAR-логи будут собраны и сохранены в указанной папке.

  1. Нажмите F12 на клавиатуре, чтобы открыть окно инструментов разработчика.

  2. Перейдите на вкладку Консоль.

  3. Нажмите правой кнопкой мыши на любой строке и выберите в контекстном меню Сохранить страницу как.

  4. Выберите папку для сохранения логов и нажмите на кнопку Сохранить.

Консольные логи будут собраны и сохранены в указанной папке.

Пример сбора логов для Chrome:

  • HAR-логи

  • Консольные логи

  1. Нажмите F12 на клавиатуре, чтобы открыть окно инструментов разработчика.

  2. Перейдите на вкладку Network.

  3. Нажмите на кнопку chrome clear, чтобы очистить сетевой журнал.

  4. Выберите чек-боксы Preserve log и Disable cache.

  5. Воспроизведите проблему.

  6. Нажмите chrome export har, чтобы сохранить HAR-логи.

  7. Выберите папку для сохранения логов и нажмите на кнопку Сохранить.

HAR-логи будут собраны и сохранены в указанной папке.

  1. Нажмите F12 на клавиатуре, чтобы открыть окно инструментов разработчика.

  2. Перейдите на вкладку Console.

  3. Нажмите правой кнопкой мыши в любой области окна и выберите в контекстном меню Save as.

  4. Выберите папку для сохранения логов и нажмите на кнопку Сохранить.

Консольные логи будут собраны и сохранены в указанной папке.

Пример сбора логов для Firefox:

  • HAR-логи

  • Консольные логи

  1. Нажмите F12 на клавиатуре, чтобы открыть окно инструментов разработчика.

  2. Перейдите на вкладку Сеть.

  3. Воспроизведите проблему.

  4. Нажмите на правую кнопку мыши в сетевой таблице после воспроизведения проблемы и выберите Сохранить все как HAR.

  5. Выберите папку для сохранения логов и нажмите на кнопку Сохранить.

HAR-логи будут собраны и сохранены в указанной папке.

  1. Нажмите F12 на клавиатуре, чтобы открыть окно инструментов разработчика.

  2. Перейдите на вкладку Консоль.

  3. Нажмите правой кнопкой мыши на любой строке и выберите в контекстном меню Экспортировать видимые сообщения в и выберите Файл.

  4. Выберите папку для сохранения логов и нажмите на кнопку Сохранить.

Консольные логи будут собраны и сохранены в указанной папке.

Сбор логов серверной части

Информацию о сборе логов серверной части см. в разделе «Журналирование».

Таблицы базы данных

Раздел содержит описание таблиц базы данных (включая описание полей и связей между ними), которые могут быть использованы в SQL-запросах по созданию коллекций устройств, а также при формировании отчетов.

agent_installation

Таблица содержит информацию о статусе установки агента (minion) на устройстве.

Параметр Описание Тип данных Обязательный Пример значения

machine_fqdn

Имя устройства. Первичный ключ

text

Да

osmax-vdvjf0941

state

Статус установки. Возможные значения:

  • ACTIVE — установлен;

  • IN_PROGRESS — в процессе установки;

  • ERROR — ошибка установки

text

Да

ACTIVE

error_message

Сообщение об ошибке

text

Нет

error code 1

config_version

Версия конфигурации

bigint (64)

Нет

10

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

app_config

Таблица содержит конфигурационные параметры приложения, которые задаются в разделе «Настройки» в пользовательском интерфейсе «Кабинет Администратора».

Параметр Описание Тип данных Обязательный Пример значения

key

Ключ, содержащий префикс, по которому параметр можно отнести к определенному разделу продукта, например: параметры управления агентом или параметры синхронизации устройств. Формируется по маске: <префикс>.<наименование-параметра>.

Первичный ключ

text

Да

inventory.job.sync-partial.cron.expr

value

Значение параметра (например, Cron-выражение формата Quartz для выполнения частичной синхронизации) (см. описание формата в разделе «Cron-выражение в формате Quartz» документа «Руководство по эксплуатации»)

text

Да

0 0 3 * * ? *

created_at

Дата создания параметра

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления параметра

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

updated_by

Имя пользователя, который изменил параметр

text

Да

iivanov@osmax.company-name

categories

Таблица содержит информацию о категориях ПО для пользовательского интерфейса «Магазин Приложений».

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор категории. Первичный ключ

character varying (64)

Да

network

color

Код цвета иконки категории

character varying (6)

Да

0046E2

name

Название категории

text

Да

Сеть

icon_code

Название иконки категории

text

Да

network

description

Описание категории

text

Нет

Программы для работы с веб-ресурсами сети, доступа к интернет-страницам

created_at

Дата и время создания категории

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления категории

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

cleanable_entities

Таблица содержит перечень сущностей для автоматического удаления данных с настройками расписания по каждой сущности.

Параметр Описание Тип данных Обязательный Пример значения

name

Внутреннее уникальное название сущности. Первичный ключ

text

Да

remoteOperationOrders

display_name

Отображаемое наименование сущности в пользовательском интерфейсе «Кабинет Администратора»

text

Да

Заявки на выполнение удаленных операций

schedule

Расписание выполнения задания по удалению данных в виде Cron-выражения в формате Quartz (см. описание формата в разделе «Cron-выражение в формате Quartz» документа «Руководство по эксплуатации»)

text

Да

0 0 3 * * ? *

enabled

Метка включения/выключения автоматического удаления данных по сущности. Возможные значения:

  • true;

  • false

boolean

Да

true

history_depth_days

Глубина истории хранения данных в днях

integer (32)

Да

9999

last_execution_timestamp

Дата последнего запуска задания на удаление данных

timestamp with time zone

Нет

2024-09-13 00:00:13.112441+00

last_execution_log

Информация о результате выполнения последнего запуска задания на удаление данных. Возможные значения:

  • текст ошибки — задание выполнено с ошибкой;

  • текст, означающий, что задание выполнено успешно: Успешно удалено N записей. Время выполнения запроса H, где:

    • N — количество удаленных записей;

    • H — время в формате h-часов, m-минут, s-секунд;

  • null — задание не выполнялось

text

Нет

Успешно удалено 0 записей. Время выполнения запроса 0-часов, 0-минут, 0-секунд

last_execution_status

Статус последнего запуска задания на удаление данных. Возможные значения:

  • ERROR — задание выполнено с ошибкой;

  • SUCCESS — задание выполнено успешно;

  • NULL — задание не выполнялось

text

Нет

SUCCESS

next_execution_timestamp

Дата следующего запуска задания на удаление данных

timestamp with time zone

Да

2024-09-14 00:00:00+00

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

created_by

Автор создания записи

timestamp with time zone

Да

iivanov

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

updated_by

Автор изменения записи

text

Да

iivanov@osmax.some.company

collection_configurations

Таблица содержит информацию о версиях конфигурации, назначенных на коллекцию устройств.

Параметр Описание Тип данных Обязательный Пример значения

id

Уникальный идентификатор коллекции. Первичный ключ

uuid

Да

3e0aabbc-4252-4468-82b2-4cae2670d4df

configuration_version_id

Идентификатор версии конфигурации

bigint (64)

Нет

805

config_id

Идентификатор конфигурации

bigint (64)

Нет

976

collection_id

Идентификатор коллекции

text

Да

7f9d6c8e-33a9-4b43-81bd-e00489c86214

configuration_id

Идентификатор конфигурации

bigint (64)

Нет

976

formula

Наименовании формулы SaltStack

text

Да

tigervnc

state

Статус применения конфигурации к коллекции. Возможные значения:

  • ACTIVE

  • INACTIVE

  • ERROR

text

Да

ACTIVE

custom_schedule

Пользовательское расписание применения конфигурации к коллекции

jsonb

Нет

{
  "seconds": 3600,
  "minutes": 30,
  "hours": 12,
  "days": 14,
  "range": {
    "start": "09:00",
    "end": "18:00"
  },
  "splay": 10,
"when": null
}

schedule_type

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

  • STANDARD — стандартное расписание;

  • INDIVIDUAL — индивидуальное расписание;

  • ONE_TIME — одноразовое расписание

text

Да

ONE_TIME

err_message

Сообщение об ошибке

text

Нет

Error occurred processing prepared storage data on collection-configuration activation

author

Автор изменения записи

text

Да

iivanov@LCM.SOME.COMPANY

created_at

Дата и время создания записи

timestamp with time zone

Да

2024-07-15 14:15:18.214+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2024-07-15 14:15:18.214+00

configuration_categories

Таблица отображает соотношение между конфигурациями типа «Программное обеспечение» и категориями.

Параметр Описание Тип данных Обязательный Пример значения

configuration_id

Идентификатор конфигурации. Первичный ключ

bigint (64)

Да

6

category_id

Идентификатор категории. Первичный ключ

character varying (64)

Да

develop

created_at

Дата и время создания записи

timestamp with time zone

Да

2024-07-15 14:15:18.214+00

configuration_package_steps

Таблица описывает шаги пакетов формул SaltStack.

Параметр Описание Тип данных Обязательный Пример значения

package_id

Идентификатор пакета формул. Первичный ключ

uuid

Да

30bdabad-278e-4c6c-abae-bb1275bc34fc

version_id

Идентификатор версии конфигурации для шага. Первичный ключ

bigint (64)

Да

804

step_order

Порядковый номер шага, уникальный в рамках пакета формул

integer (32)

Да

1

stop_on_error

Признак необходимости прекращения выполнения формулы при ошибке шага. Возможные значения:

  • true;

  • false

boolean

Нет

false

apply_on_error

Признак зависимости от предыдущих шагов. Возможные значения:

  • true — при ошибке одного из перечисленных;

  • n/a, false — при успехе всех перечисленных

boolean

Нет

false

name

Название шага

text

Да

Ark

apply_on_steps

Массив идентификаторов шагов, при условии (ошибки/успеха) которых выполняется текущий шаг

text

Нет

configuration_packages

Таблица содержит информацию о пакетах формул SaltStack.

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор пакета формул. Первичный ключ

uuid

Да

30bdabad-278e-4c6c-abae-bb1275bc34fc

configuration_id

Идентификатор конфигурации

bigint (64)

Да

982

is_active

Признак активности. Возможные значения:

  • true;

  • false

boolean

Да

true

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

created_by

Автор создания записи

timestamp with time zone

Да

iivanov

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

updated_by

Автор изменения записи

text

Да

iivanov@osmax.SOME.COMPANY

configuration_tags

Таблица содержит информацию о метках (tags) конфигураций любого типа, кроме ПО.

Параметр Описание Тип данных Обязательный Пример значения

cfg_id

Идентификатор конфигурации. Первичный ключ

bigint (64)

Да

985

tag_name

Имя метки (tag). Первичный ключ

text

Да

doc

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

configuration_versions

Таблица содержит информацию о версиях конфигураций.

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор версии конфигурации. Первичный ключ

bigint (64)

Да

808

installation_recipe_id

Идентификатор способа развертывания

text

Нет

configuration_id

Идентификатор конфигурации

bigint (64)

Да

979

release_date

Дата выпуска версии

date

Да

2024-06-05

pillar_property

Параметры формулы SaltStack

jsonb

Нет

{
  "get-hostname": {
    "lookup": {
      "pkg": {
        "version": "1.0.0"
      }
    }
  }
}

is_active

Признак активности. Возможные значения:

  • true;

  • false

boolean

Нет

true

available_in_app_store

Признак присутствия в пользовательском интерфейсе «Магазин Приложений». Возможные значения:

  • true;

  • false

boolean

Нет

false

script_id

Идентификатор скрипта

bigint (64)

Нет

3

version_attributes

Атрибуты версии

jsonb

Нет

display_name

Наименование версии, отображаемой в пользовательском интерфейсе

text

Да

1.0.0

software_requirements

Требования к ПО

text

Нет

formula_name

Наименование формулы SaltStack

text

Да

openssh

pillar_file_name

Название pillar-файла

text

Нет

pillar_get-hostname_1_0_0

features

text

Нет

changelog

История изменения версий

text

Нет

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата последнего изменения записи

timestamp with time zone

Да

2024-07-09 05:57:37.667+00

created_by

Автор создания записи

timestamp with time zone

Да

osmax_core

updated_by

Автор изменения записи

text

Да

iivanov@osmax.SOME.COMPANY

configurations

Таблица содержит информацию о конфигурациях.

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор конфигурации

bigint (64)

Да

1222

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

default_version

Версия по умолчанию

bigint (64)

Нет

923

is_active

Признак активности. Возможные значения:

  • true;

  • false

boolean

Нет

false

available_in_app_store

Признак присутствия в пользовательском интерфейсе «Магазин Приложений». Возможные значения:

  • true;

  • false

boolean

Нет

false

display_name

Название, которое отображается в пользовательском интерфейсе «Кабинет Администратора»

text

Да

2EOt9Nmldv

description

Описание конфигурации

text

Нет

Конфигурация агента 49

icon_path

Путь к файлу с иконкой

text

Нет

icons/formula-configuration.svg

images_paths

Путь к файлу с изображением

text

Нет

images/formula-configuration.png,images/formula-configuration.jpeg

full_description

Подробное описание конфигурации

text

Нет

Ark1 — графическая утилита для упаковки и распаковки файлов, поддерживающая множество форматов архивов, включая TAR, GZIP, BZip2, RAR, ZIP и образы компакт-дисков

guide

Инструкция

text

Нет

Установка

created_by

Автор создания записи

timestamp with time zone

Да

iivanov

updated_by

Автор изменения записи

text

Да

iivanov@osmax.SOME.COMPANY

type

Тип конфигурации

text

Да

reinstallOs

grain_files

Таблица является справочником для хранения grain-файлов, загруженных в S3-совместимое хранилище.

Параметр Описание Тип данных Обязательный Пример значения

grain_file_id

Идентификатор grain-файла

uuid

Да

c11d5385-35ec-4f04-961a-653f0f75115c

file_name

Имя файла

character varying

Да

custom_grain_e2e_1.py

description

Описание

text

Нет

Размер внешнего жесткого диска

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

Таблица содержит информацию о ссылках LDAP-групп.

Параметр Описание Тип данных Обязательный Пример значения

group_full_name

Полное название родительской группы. Соответствует полю full_name таблицы groups

text

Да

CN=Performance Monitor Users,CN=Builtin,DC=lcm,DC=terra,DC=inno,DC=tech

child_full_name

Полное название дочерней группы. Соответствует полю full_name таблицы groups

text

Нет

CN=Server Operators,CN=Builtin,DC=lcm,DC=terra,DC=inno,DC=tech

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-1808:32:15.045738+00

groups

Таблица содержит информацию об LDAP-группах.

Параметр Описание Тип данных Обязательный Пример значения

id

Уникальный идентификатор группы. Первичный ключ

uuid

Да

bfd305c4-fa7d-41c4-b841-1fc37cee06b1

name

Название группы

text

Да

Performance Monitor Users

full_name

Полное название группы

text

Да

CN=Performance Monitor Users,CN=Builtin,DC=lcm,DC=terra,DC=inno,DC=tech

object_sid

Идентификатор безопасности

varchar(255)

Да

S-1-5-32-549

description

Описание группы

text

Нет

Members of this group can access performance counter data locally and remotely

scope

Область действия:

  • BUILT_IN — группа, встроенная по умолчанию;

  • DOMAIN_LOCAL — локальная группа в домене;

  • GLOBAL — глобальная группа;

  • UNIVERSAL — универсальная группа

varchar(16)

Да

BUILT_IN

type

Тип группы:

  • SECURITY — группа безопасности, которая используется для предоставления доступа к ресурсам;

  • DISTRIBUTION — группа распространения, которая используется для создания групп почтовых рассылок

varchar(16)

Да

SECURITY

datasource

Источник данных

text

Нет

DC=lcm,DC=terra,DC=inno,DC=tech

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-1808:32:15.045738+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-1808:32:15.045738+00

install_agent_task_queue

Таблица содержит информацию о статусе работы скриптов установки на устройства.

Параметр Описание Тип данных Обязательный Пример значения

machine_fqdn

Полное доменное имя устройства. Первичный ключ

text

Да

my-computer.osmax.domain

configuration_version

Версия конфигурации

bigint (64)

Да

858

invoked_times

Количество попыток

integer

Да

1

state

Статус установки

text

Да

ACTIVE

last_error_comment

Описание последней ошибки

text

Нет

salt_master

Имя сервера управления (master)

text

Нет

osmax-KF0761

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

lcm_job_execution

Таблица содержит результаты выполнения всех запланированных задач, которые есть в системе. Записи в таблице не изменяются после вставки.

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор задачи. Первичный ключ

uuid

Да

e17f89cc-68bb-425f-8154-0f86c360c48a

params

Параметры задачи

jsonb

Нет

{
  "minion_mapping_hash": "-2122467810",
  "new_active_collections": ""
}

type

Тип задачи

text

Да

SYNC_COLLECTION_PILLARS_TASK

state

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

text

Да

SKIP

log

text

Нет

finished_at

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

timestamp with time zone

Нет

2024-09-13 22:00:36.766+00

created_at

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

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

lcm_task_queue

Таблица используется для хранения очереди задач.

Параметр Описание Тип данных Обязательный Пример значения

entity_id

Идентификатор сущности

uuid

Да

task_type

Тип задачи

text

Да

params

Параметры задачи

text

Нет

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

ldap_attr_settings

Таблица содержит параметры синхронизации по пользователям из LDAP.

Параметр Описание Тип данных Обязательный Пример значения

entity_type

Указывает на принадлежность настройки. В текущей версии используется только для пользователей. Первичный ключ

character varying (32)

Да

USER

attribute_name

Перечень параметров пользователей, собираемых при синхронизации с LDAP, некоторые из которых доступны администратору для просмотра и редактирования. Первичный ключ. Возможные значения:

  • objectGUID — уникальный идентификатор пользователя;

  • displayName — отображаемое имя пользователя;

  • objectSID — идентификатор безопасности;

  • sAMAaccountName — имя пользователя для входа в систему (логин);

  • memberOf — группы пользователя, связь один к многим;

  • mail — адрес электронной почты пользователя;

  • commonName — общее имя пользователя;

  • givenName — имя пользователя;

  • sn — фамилия;

  • title — должность пользователя;

  • department — подразделение;

  • company — организация;

  • userPrincipalName — полное доменное имя пользователя (например, ivanov@inno.tech или petrov@samara.vtb.ru);

  • userAccountControl — указывает, что учетная запись пользователя выключена

text

Да

sn

is_synchronized

Признак, указывающий, стоит ли забирать это поле при синхронизации. Возможные значения:

  • true — да;

  • false — нет;

boolean

Да

true

display_name

text

Да

Общее имя

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

updated_by

Автор изменения записи

text

Да

iivanov@osmax.SOME.COMPANY

ldap_settings

Таблица содержит параметры LDAP-запросов для автоматического обнаружения объектов из LDAP.

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор LDAP-запроса. Первичный ключ

uuid

Да

09571bbc-0d66-4680-a545-f891f8d646c8

dir_sync_cookie

bytea

Нет

datasource

LDAP-сервер

text

Да

osmax.some.company

type

Тип запроса. Возможные варианты:

  • SYNC_LDAP_MACHINES — для устройств;

  • SYNC_GROUPS — для пользователей

text

Да

SYNC_GROUPS

filter

LDAP-фильтр

text

Да

(objectClass=group)

directory

Директория поиска устройств

text

Да

CN=Group,DC=example,DC=com

dir_sync_server_address

text

Нет

172.28.15.144:636

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

created_by

Автор создания записи

timestamp with time zone

Да

iivanov

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

updated_by

Автор изменения записи

text

Да

iivanov@osmax.some.company

locked_objects

Таблица содержит список заблокированных пессимистичной блокировкой сущностей.

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор сущности. Первичный ключ

uuid

Да

16c4e33b-2787-4231-b025-705679c9d9f8

blocked_at

Дата и время блокировки

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

object_name

Название объекта

text

Да

pk_for_admininstrator

blocked_by

Пользователь, выполнивший блокировку

text

Да

iivanov@osmax.some.company

object_type

Тип объекта

text

Да

COLLECTION

object_id

Идентификатор объекта

text

Нет

4b8e2b86-06eb-43f8-bfb8-8ea3988ae33d

Таблица содержит информацию о связях дополнительных (настраиваемых) атрибутов устройств и разделов.

Параметр Описание Тип данных Обязательный Пример значения

link_id

Уникальный идентификатор связки атрибут-раздел. Первичный ключ

uuid

Да

c6ea2283-cb9b-48b6-8b15-49251aaf9200

machine_attribute_id

Уникальный идентификатор атрибута устройств

uuid

Да

2145c6e8-cfe5-4950-8d9c-66a2c1dae786

machine_attribute_section_id

Уникальный идентификатор атрибута устройств

uuid

Да

7ede0b20-5f78-4100-a27c-b0c7955237c6

priority

Приоритет порядка отображения атрибута в пользовательском интерфейсе внутри раздела

integer(32)

Да

0

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

machine_attributes

Таблица содержит информацию о дополнительных атрибутах устройств, настраиваемых через ПО «Кабинет администратора».

Параметр Описание Тип данных Обязательный Пример значения

attribute_id

Идентификатор атрибута. Первичный ключ

uuid

Да

2145c6e8-cfe5-4950-8d9c-66a2c1dae786

code

Код атрибута

varchar(30)

Да

attr2-2

name

Наименование атрибута

varchar(50)

Да

Атрибут раздела 2 - 2

json_path

Путь к элементу в JSON-структуре grains-event.

text

Да

$.demo.attr2-2

data_type

Тип данных. Возможные значения:

  • string — строка;

  • datetime — дата

text

Да

datetime

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

machine_attributes_sections

Таблица содержит информацию о разделе (способе группировки) настраиваемых атрибутов устройства.

Параметр Описание Тип данных Обязательный Пример значения

section_id

Уникальный идентификатор раздела атрибутов устройств. Первичный ключ

uuid

Да

7ede0b20-5f78-4100-a27c-b0c7955237c6

name

Название раздела, которое отображается в пользовательском интерфейсе

varchar(30)

Да

Р-1

description

Описание раздела атрибута

text

Может оставаться пустым

Раздел 1

show_in_short_list

Признак отображения раздела в короткой информации об устройстве

boolean

Да

false

priority

Приоритет порядка отображения в пользовательском интерфейсе

integer(32)

Да

0

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

machine_collection_dependencies

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

Параметр Описание Тип данных Обязательный Пример значения

collection_id

Идентификатор родительской коллекции устройств. Часть составного первичного ключа вместе с параметром depends_on_collection_id

uuid

Да

0c17adcf-ff9b-4f78-bc7b-fcaba2be7182

depends_on_collection_id

Идентификатор дочерней коллекции устройств. Часть составного первичного ключа вместе с параметром collection_id

uuid

Да

27754b16-3273-4bcb-a87c-7124ad50c91f

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

machine_collection_minions

Таблица содержит информацию об идентификаторах устройств, составляющих коллекцию. Периодически обновляется, согласно настройкам коллекций.

Параметр Описание Тип данных Обязательный Пример значения

collection_id

Уникальный идентификатор коллекции. Часть составного первичного ключа вместе с параметром minion_id

uuid

Да

0a53d7f2-dcaf-41b5-bcec-3e262e51a64b

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

dev-lcm-vm0101.lcm.terra.inno.tech

minion_id

Наименование агента (minion)

text

Да. Часть составного первичного ключа вместе с параметром collection_id

dev-lcm-vm0101.lcm.terra.inno.tech

machine_collection_presets

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

Параметр Описание Тип данных Обязательный Пример значения

id

Уникальный идентификатор пресета. Первичный ключ

uuid

Да

ae710ccf-6105-409a-8b25-7929f5c2bc49

name

Название коллекции

text

Да

preset-1

type

Тип пресета. Возможные значения:

  • RULES — набор правил;

  • SQL — SQL-текст

text

Да

RULES

sql

SQL-текст

text

Да

select distinct "machines".* from "machines"

rules

Набор правил

jsonb

Нет

{"base": [], "exclude": [], "intersect": []}

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

machine_collections

Таблица содержит информацию о коллекции устройств, их свойствах, расписаниях и правилах создания.

Параметр Описание Тип данных Обязательный Пример значения

id

Уникальный идентификатор коллекции. Первичный ключ

uuid

Да

bdbf09a5-631d-4337-8098-38e7b68de6c0

last_sync

Дата и время последней синхронизации с агентом (minion). Учитывается только для динамических коллекций, для статических коллекций указанная дата будет совпадать с датой создания коллекции

timestamp with time zone

Нет

2023-09-18 10:15:48.519831+00

size

Количество элементов в коллекции

integer(32)

Нет

5

name

Название коллекции

text

Да

ПК администратора

state

Статус коллекции. Служебное поле для использования внутри API. Возможные значения:

  • CREATED — коллекция создана;

  • ACTIVE — коллекция используется;

  • DELETED — коллекция удалена

text

Да

CREATED

description

Описание коллекции

text

Нет

Ноутбуки

author

Автор создания коллекции

text

Поле остается пустым до тех пор, пока не пройдена проверка Kerberos

vivanov@domain.local

sql

SQL-запрос

text

Да

select* from machines

schedule

Расписание, по которому запускается обновление динамических коллекций. Для статических коллекций поле остается пустым.

text

Нет

0 0 10 * * ? *

last_sync_log

Журнал синхронизаций

text

Нет

rules

Правила создания коллекции

jsonb

Нет

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

machine_disks

Таблица содержит информацию о дисках.

Параметр Описание Тип данных Обязательный Пример значения

minion_id

Идентификатор агента (minion). Соответствует полю minion_id таблицы machines

text

Да

lcm-salt-minion-01-u

disk_name

Имя диска

text

Да

sdb

disk_type

Тип диска. Возможные значения: HDD и SSD

text

Нет

HDD

total_space

Общий объем памяти на диске

bigint(64)

Нет

30562713600

used_space

Используемый объем памяти на диске

bigint(64)

Нет

7084609536

free_space

Свободное место на диске

bigint(64)

Нет

21901991936

file_system

Тип файловой системы

text

Нет

ext4

device

Имя устройства

text

Нет

/dev/sda1

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

machine_executable_files

Таблица содержит все найденные на агентах (minions) исполняемые файлы (в привязке к устройству) и их параметры в рамках инвентаризации ПО на устройствах.

Параметр Описание Тип данных Обязательный Пример значения

machine_fqdn

Доменное имя устройства. Первичный ключ

text

Да

osmax-pf0762.osmax.some.company

file_path

Абсолютный путь к исполняемому файлу. Первичный ключ

text

Да

/home/iivanov/.mozilla/firefox/dfafkj.default-release/lock

file_size

Размер исполняемого файла

integer (32)

Да

16

detected_at

Дата и время обнаружения файла

timestamp with time zone

Да

2024-08-13 11:08:33.971+00

file_created_at

Дата и время создания файла

timestamp with time zone

Да

2023-10-13 11:12:19.930612+00

file_updated_at

Дата и время обновления содержимого файла

timestamp with time zone

Да

2023-10-13 11:12:19.930612+00

file_properties_updated_at

Дата и время обновления прав доступа или владельца файла

timestamp with time zone

Да

2023-10-13 11:12:19.930612+00

`file_last_access_at#

Дата и время последнего обращения к исполняемому файлу

timestamp with time zone

Да

2024-08-13 11:05:55.15777+00

file_type

Тип файла

text

Да

symbolic_link

machine_groups

Таблица содержит информацию о группах устройств.

Параметр Описание Тип данных Обязательный Пример значения

machine_fqdn

Полное доменное имя устройства. Первичный ключ

text

Да

laptop123.spb.inno.tech

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-1808:32:15.045738+00

is_direct

Возможные значения:

  • true;

  • false

boolean

Да

false

group_full_name

Полное доменное имя устройства. Соответствует полю fqdn таблицы machines

text

Да

CN=Performance Monitor Users,CN=Builtin,DC=osmax,DC=terra,DC=inno,DC=tech

machine_networks

Таблица содержит информацию о сетях устройств.

Параметр Описание Тип данных Обязательный Пример значения

minion_id

Идентификатор агента (minion). Соответствует полю minion_id таблицы machines

text

Да

lcm-salt-minion-01-u

net_name

Имя сети

text

Да

eth0

mac

MAC-адрес

text

Нет

02:42:ac:13:00:03

ipv4_list

Сетевые интерфейсы IPv4 (может быть указано несколько значений через запятую)

text

Нет

172.19.0.3,192.168.0.1

ipv6_list

Сетевые интерфейсы IPv6 (может быть указано несколько значений через запятую)

text

Нет

2a02:f680:1:1100::3d60,2604:a880:800:c1::2ae:d001

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-1808:39:52.209881+00

machine_software_packages

Таблица содержит все найденные на агентах (minions) пакеты (в привязке к устройству) и их некоторые параметры в рамках инвентаризации ПО на устройствах. Записи ссылаются на справочник ПО организации — software_packages, в котором содержатся дополнительные параметры пакетов.

Параметр Описание Тип данных Обязательный Пример значения

package_id

Идентификатор пакета. Первичный ключ

uuid

Да

a5d97fea-5fa6-4557-9f9f-cdbbca6cb5b5

detected_at

Дата и время обнаружения пакета на устройстве

timestamp with time zone

Да

2024-08-02 21:33:04.388+00

installed_at

Дата и время установки пакета

timestamp with time zone

Нет

2023-08-23 15:30:39+00

machine_fqdn

Имя устройства. Первичный ключ

text

Да

osmax-pf0762.osmax.inno.tech

version

Версия пакета

text

Да

0.143-5astra4

machines

Таблица содержит информацию об устройствах.

Параметр Описание Тип данных Обязательный Пример значения

minion_id

Идентификатор агента (minion). Значение по умолчанию должно совпадать с полным доменным именем устройства из поля fqdn. Первичный ключ

text

Нет

DEV-osmax-VM0104.osmax.terra.inno.tech

node_name

Имя устройства

text

Да

DEV-osmax-VM0104

fqdn

Полное доменное имя устройства

text

Да

dev-osmax-vm0104.osmax.terra.inno.tech

domain

Имя домена

text

Нет

osmax.terra.inno.tech

domain_ip

Набор доменных адресов IPv4

text

Нет

127.0.1.1

ip4_gw

Шлюз Ipv4

text

Нет

172.28.15.254

cpu_model

Модель процессора

text

Нет

Intel® Xeon® Gold 6246R CPU @ 3.40GHz

cpu_arc

Архитектура процессора

text

Нет

x86_64

cpu_num

Количество ядер процессора

integer(32)

Нет

2

ram

Объем ОЗУ в мегабайтах

integer(32)

Нет

3891

swap

Общий физический размер свопинга в мегабайтах

integer(32)

Нет

974

serial_number

Серийный номер устройства

text

Нет

VMware-42 16 5a 2a ad 4f 3c 5c-3d 9f 8c b4 a1 10 d1 e5

kernel

Ядро ОС

text

Нет

Linux

kernel_release

Релиз ядра ОС

text

Нет

5.15.0-33-generic

os_codename

Код версии ОС

text

Нет

1.7_x86-64

os_fullname

Полное наименование ОС

text

Нет

AstraLinux

os_description

Описание версии ОС

text

Нет

Astra Linux 1.7 x86-64

distrib_codename

Код дистрибутива ОС

text

Нет

1.7_x86-64

os_arch

Архитектура ОС

text

Нет

amd64

os_major_release

Мажорная версия релиза ОС

text

Нет

1

os_release

Версия релиза

text

Нет

1.7_x86-64

salt_master

Имя сервера управления (master)

text

Нет

DEV-osmax-VM0101.osmax.terra.inno.tech

salt_version

Версия SaltStack на агенте (minion)

text

Нет

3005.1

python_version

Версия Python для SaltStack на агенте (minion)

text

Нет

3.7.3.final.0

bios_uefi

Указывает, включена ли опция UEFI в BIOS

bool

Нет

false

bios_version

Версия BIOS

text

Нет

6.00

bios_vendor_name

Имя производителя BIOS

text

Нет

Phoenix Technologies LTD

bios_uuid

Идентификатор BIOS

text

Нет

2a5a1642-4fad-5c3c-3d9f-8cb4a110d1e5

bios_release_date

Дата выпуска BIOS

text

Нет

11/12/2020

minion_is_active

Метка активности агента (minion). Возможные значения:

  • true;

  • false

boolean

Нет

true

minion_is_installed

Метка установки агента (minion). Возможные значения:

* true; * false

boolean

Нет

true

attributes

Атрибуты устройства

jsonb

Нет

``

present_in_ldap

Метка, указывающая, что устройство существует в LDAP

boolean

Да

true

last_seen_in_ldap_at

Дата и время последней синхронизации с LDAP

timestamp with time zone

Нет

2023-09-18 10:13:31.548795+00

salt_minion_id

Идентификатор агента (minion)

text

Да

DEV-osmax-VM0104.osmax.terra.inno.tech

object_sid

Идентификатор безопасности. Значение параметра передается из LDAP только при первичном обнаружении устройства и в дальнейшем не синхронизируется

varchar(255)

Нет

S-1-5-21-1184408154-1736440087-3158576400-68380

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

machines_view

Таблица содержит сокращенную информацию об устройствах.

Параметр Описание Тип данных Обязательный Пример значения

cpu_num

Количество ядер процессора

integer(32)

Нет

2

ram

Объем ОЗУ в мегабайтах

integer(32)

Нет

3891

swap

Общий физический размер свопинга в мегабайтах

integer(32)

Нет

974

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

minion_is_active

Метка активности агента (minion). Возможные значения:

  • true;

  • false

boolean

Нет

true

minion_is_installed

Метка установки агента (minion). Возможные значения:

  • true;

  • false

boolean

Нет

true

last_activity_date

Дата и время, когда агент (minion) в последний раз находился в активном статусе

timestamp with time zone

Нет

2024-09-17 10:09:44.770394+00

minion_id

Идентификатор агента (minion). Значение по умолчанию обычно совпадает с полным доменным именем устройства из поля fqdn. Первичный ключ

text

Нет

DEV-LCM-VM0104.lcm.terra.inno.tech

node_name

Имя устройства

text

Да

DEV-osmax-VM0104

fqdn

Полное доменное имя устройства

text

Да

dev-osmax-vm0104.osmax.terra.inno.tech

domain

Имя домена

text

Нет

osmax.terra.inno.tech

domain_ip

Набор доменных адресов IPv4

text

Нет

127.0.1.1

ip4_gw

Шлюз Ipv4

text

Нет

172.28.15.254

cpu_model

Модель процессора

text

Нет

Intel® Xeon® Gold 6246R CPU @ 3.40GHz

cpu_arc

Архитектура процессора

text

Нет

x86_64

serial_number

Серийный номер устройства

text

Нет

VMware-42 16 5a 2a ad 4f 3c 5c-3d 9f 8c b4 a1 10 d1 e5

kernel

Ядро ОС

text

Нет

Linux

kernel_release

Релиз ядра ОС

text

Нет

5.15.0-33-generic

os_codename

Код версии ОС

text

Нет

1.7_x86-64

os_fullname

Полное наименование ОС

text

Нет

AstraLinux

os_description

Описание версии ОС

text

Нет

Astra Linux 1.7 x86-64

distrib_codename

Код дистрибутива ОС

text

Нет

1.7_x86-64

os_arch

Архитектура ОС

text

Нет

amd64

os_major_release

Мажорная версия релиза ОС

text

Нет

1

os_release

Версия релиза

text

Нет

1.7_x86-64

salt_master

Имя сервера управления (master)

text

Нет

DEV-osmax-VM0101.osmax.terra.inno.tech

salt_version

Версия SaltStack на агенте (minion)

text

Нет

3005.1

python_version

Версия Python для SaltStack на агенте (minion)

text

Нет

3.7.3.final.0

master_fqdn

Идентификатор сервера управления (master)

text

Нет

DEV-osmax-VM0101.osmax.inno.tech

minion_formulas

Таблица содержит результаты применения формул к агентам (minions).

Параметр Описание Тип данных Обязательный Пример значения

minion_id

Идентификатор агента (minion). Первичный ключ

text

Да

dev-osmax-vm0104.osmax.terra.inno.tech

formula

Имя формулы. Первичный ключ

text

Да

tigervnc

configuration_version_id

Идентификатор версии конфигурации

bigint(64)

Нет

808

config_id

Идентификатор конфигурации

bigint(64)

Нет

981

configuration_id

Идентификатор конфигурации

text

Нет

981

state

Статус применения формулы. Возможные значения:

  • PENDING

  • ERROR

  • ACTIVE

  • IN_PROGRESS

text

Да

ERROR

comment

Комментарий к ошибке

text

Нет

- sls: tigervnc.package.install
error:
An error was encountered while installing package(s): E: Failed to fetch https://nexus.inno.tech/repository/osmax-hosted-apt/dists/1.7_x86-64/InRelease  403  Forbidden [IP: 172.28.15.16 443]
E: The repository 'https://nexus.inno.tech/repository/osmax-hosted-apt 1.7_x86-64 InRelease' is no longer signed.
- sls: tigervnc.package.install
error: Parent directory not present
- sls: tigervnc.package.install
error: "One or more requisite failed: tigervnc.package.install.tigervnc-package-install-pkg-installed,\
\ tigervnc.package.install.tigervnc-package-install-file-managed"

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

minion_health_states

Таблица содержит информацию о сетевом статусе агента (minion).

Параметр Описание Тип данных Обязательный Пример значения

minion_id

Идентификатор агента (minion). Первичный ключ

text

Да

dev-lcm-vm0103.lcm.terra.inno.tech

master_fqdn

Идентификатор сервера управления (master)

text

Да

DEV-LCM-VM0101.lcm.terra.inno.tech

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

last_active_date

Дата и время, когда агент в последний раз находился в активном статусе

timestamp with time zone

Да

2024-05-15 10:15:48.519831+00

multimedia_tokens

Таблица содержит актуальные токены, которые дают доступ к скачиванию мультимедиа через GET-запросы. Используется для скриптов и архивов скриптов.

Параметр Описание Тип данных Обязательный Пример значения

token

Токен, который должен быть добавлен в Query-параметры HTTP-запроса, чтобы запрос был успешным. Время жизни токена по умолчанию — 1 час. Первичный ключ

text

Да

abc123xyz456

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

orders

Таблица содержит заказы ПО «Магазин приложений».

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор заказа. Первичный ключ

uuid

Да

0f7e3ac4-71ba-4ce7-af07-0edcb7c2cc45

requested_completion_date

Запрашиваемые дата и время выполнения заказа

timestamp with time zone

Да

2024-03-19 23:41:45.902555+00

completion_date

Дата и время выполнения заказа

timestamp with time zone

Нет

2024-03-19 11:41:45.902555+00

configuration_id

Идентификатор конфигурации

bigint (64)

Да

4

configuration_version_id

Идентификатор версии конфигурации

bigint (64)

Да

4

jid

Уникальный идентификатор пользователя в сети

test

Нет

20244151244567081

state

Статус выполнения заказа. Возможные значения:

  • ERROR — в процессе выполнения заказа произошла ошибка;

  • COMPLETED — заказ создан

text

Да

COMPLETED

formula

Имя формулы

text

Да

ark

machine_id

Идентификатор устройства

text

Да

od0873.osmax.inno.tech

action

Действие. Возможные значения:

  • delete — удаление ПО;

  • add — установка ПО;

  • modify — изменение версии ПО

text

Да

add

err_message

Сообщение об ошибке

text

Нет

The order was canceled due to exceeding the execution time

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

permission_actions

Таблица содержит значения всех возможных действий для функциональностей для ролевой модели, например просмотр списка сущностей раздела «Коллекции» или редактирование коллекции.

Параметр Описание Тип данных Обязательный Пример значения

permission

Раздел, в рамках которого выдается разрешение. Первичный ключ

text

Да

collections

code

Код разрешенного действия. Первичный ключ

text

Да

create

name

Описание разрешенного действия

text

Да

Создание

order

integer (32)

Да

2

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

permissions

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

Параметр Описание Тип данных Обязательный Пример значения

code

Код раздела, в рамках которого выдано разрешение. Первичный ключ

text

Да

machines

name

Описание раздела, в рамках которого выдано разрешение. Первичный ключ

text

Да

Устройства

order

integer (32)

Да

2

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

remote_operation_orders

Таблица содержит заявки на удаленные операции в привязке к устройствам.

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор устройства. Первичный ключ

uuid

Да

1da03c76-c095-409d-bcd2-b15288329f8a

remote_operation_id

Идентификатор удаленной операции

uuid

Да

258a07a2-3ece-4946-9a7d-72f21acd00f1

remote_operation_parameters

Переданные параметры удаленной операции

jsonb

Да

{
  "rebootTime": "9999",
  "rebootForce": "false",
  "userMessage": "123",
  "orderOperationDeadline": "10"
}

expire_at

Максимальное время выполнения, после которого заявка переводится в статус ошибки выполнения

timestamp with time zone

Да

2024-08-08 20:38:08.619+00

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

completed_at

Дата и время выполнения удаленной операции

timestamp with time zone

Нет

2024-08-09 08:10:00.708+00

machine_fqdn

Полное доменное имя устройства

text

Да

dev-osmax-rf0102.osmax.inno.tech

job_id

Идентификатор задания (job)

text

Нет

20240808193736178658

state

Статус выполнения

text

Да

COMPLETED

error_message

Сообщение об ошибке

text

нет

The order was canceled due to exceeding the execution time

created_by

Автор создания заявки

timestamp with time zone

Да

iivanov

remote_operation_parameters

Таблица содержит настройки удаленных операций (перезагрузки устройства).

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор удаленной операции. Первичный ключ

uuid

Да

1c623ca5-788f-4d06-b2ca-ddae016a8ccd

remote_operation_id

Идентификатор удаленной операции

uuid

Да

258a07a2-3ece-4946-9a7d-72f21acd00f1

priority

Приоритет расположения на форме (от 1 до 9999, где 1 — наивысший)

integer (32)

Да

2

validation_parameters

Параметры валидации

jsonb

Нет

{
  "max": 1440, "min": 1,
  "enabled": true,
  "message": "Поле 'Перезагрузить через, минут' должно быть заполнено и может быть от 1 до 1440",
  "onChange": {"fill": [], "clear": []},
  "isRequired": true
}

name

Название операции (уникальное в рамках remote_operation_id)

text

Да

rebootTime

display_name

Название операции, отображаемое в пользовательском интерфейсе

text

Да

Перезагрузить через, минут

data_type

Тип данных параметра, возможные значения:

  • NUMBER;

  • STRING;

  • BOOLEAN

text

Да

NUMBER

default_value

Значение параметра по умолчанию

text

Да

1

control_type

Тип поля на UI, возможные значения:

  • CHECKBOX;

  • COUNTER;

  • TEXT;

  • TEXTAREA

text

Да

TEXT

remote_operations

Таблица содержит список удаленных операций и путь к скриптам, выполняющим эти операции.

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор удаленной операции. Первичный ключ

uuid

Да

258a07a2-3ece-4946-9a7d-72f21acd00f1

name

Название удаленной операции

text

Да

Перезагрузка устройства

script_path

Путь до скрипта, выполняющего удаленную операцию

text

Да

salt://_remote_operations/notify-and-reboot.sh

reports

Таблица содержит созданные отчетов.

Параметр Описание Тип данных Обязательный Пример значения

report_id

Идентификатор отчета. Первичный ключ

uuid

Да

a368024b-5737-4737-a3d4-0d47d06cdd2f

name

Название отчета

text

Да

Report_1

description

Описание отчета

text

Нет

Отчет 1

sql

SQL-запрос

text

Да

select * from machines

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

created_by

Автор создания записи

timestamp with time zone

Да

iivanov

updated_by

Автор изменения записи

text

Да

iivanov@osmax.SOME.COMPANY

Таблица содержит информацию о связи между ролями и пользователями или группами пользователей.

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор пользователя или группы пользователей. Первичный ключ

uuid

Да

9135ae02-a87e-4e79-8c52-340b39d91da2

role_id

Идентификатор роли

uuid

Да

455ab83f-a639-4e2c-a7b0-49d668b232ae

link_type

Тип ссылки. Возможные значения:

USER — пользователь; GROUP — группа пользователей

text

Да

USER

linked_subject_fullname

Полное имя объекта, для которого разрешается доступ к зоне видимости

text

Да

admin@inno.tech

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

created_by

Автор создания записи

timestamp with time zone

Да

iivanov

role_permissions

Таблица содержит информацию о связи роли, вида разрешения и действия (например, Роли 1 доступен для просмотра раздел Устройства).

Параметр Описание Тип данных Обязательный Пример значения

role_id

Идентификатор роли. Первичный ключ

uuid

Да

8d35ba91-9abf-4748-92ce-c0a48e1a2ebb

allowed

Признак разрешения. Возможные значения:

  • true — доступно роли;

  • false — недоступно роли

boolean

Да

true

permission

Вид разрешения. Первичный ключ

text

Да

templates

permission_action

Разрешенное действие. Первичный ключ

text

Да

view

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

created_by

Автор создания записи

timestamp with time zone

Да

iivanov

updated_by

Автор изменения записи

text

Да

iivanov@osmax.SOME.COMPANY

roles

Таблица содержит перечень всех ролей в системе.

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор роли. Первичный ключ

uuid

да

455ab83f-a639-4e2c-a7b0-49d668b232ae

name

Название роли

text

да

Администратор

description

text

нет

Пользователи, наделенные правами на выполнение всех операций в пользовательском интерфейсе «Кабинет Администратора»

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

created_by

Автор создания записи

timestamp with time zone

Да

iivanov

updated_by

Автор изменения записи

text

Да

iivanov@osmax.some.company

salt_files

Содержит информацию о grain-файлах, файлах состояний и модулях выполнения, загруженных в S3-совместимое хранилище.

Параметр Описание Тип данных Обязательный Пример значения

id

Уникальный генерируемый идентификатор. Первичный ключ

uuid

Да

590c94e0-5116-40ab-ae83-7717d9ca05b9

import_result

Результат импорта в виде массива json-объектов

jsonb

Нет

{
  "result": [
    {
      "server": "http://172.28.15.145:9000",
      "status": "imported",
      "description": "software.amazon.awssdk.http.DefaultSdkHttpFullResponse@2246d1b4"
    }
  ]
}

name

Название файла

text

Да

grain_1.py

type

Тип файла. Возможные значения:

  • grain_module — grain-файл;

  • state_module — файл состояния;

  • execution_module — модуль выполнения

text

Да

grain

status

Статус загрузки файла. Возможные значения:

  • imported — файл загружен;

  • partially_imported файл частично загружен;

  • error — ошибка

text

Да

imported

description

Пользовательское описание

text

Нет

grain-файл

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

created_by

Автор создания записи

timestamp with time zone

Да

iivanov

updated_by

Автор изменения записи

text

Да

iivanov@osmax.SOME.COMPANY

salt_formula_configuration_types

Таблица содержит информацию, к какому типу конфигурации может применяться формула SaltStack.

Параметр Описание Тип данных Обязательный Пример значения

formula_name

Имя формулы. Первичный ключ

text

Да

yandex-15

configuration_type

Определяет, к какой конфигурации может применяться. Возможные значения:

  • application — установка ПО;

  • default — конфигурация;

  • reinstallOs - переустановка ОС;

  • package — пакет

text

Да

default

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

salt_formulas

Таблица содержит информацию о формулах, загруженных в S3-совместимое хранилище через пользовательский интерфейс «Кабинет Администратора».

Параметр Описание Тип данных Обязательный Пример значения

name

Имя формулы. Первичный ключ

text

Да

Okular

status

Статус формулы

text

Да

imported

import_result

Результат импорта формулы

jsonb

нет

{
  "result": [
    {
      "server": "http://172.28.15.145:9000",
      "status": "imported",
      "description": "Object was pushed to server successfully."
    }
  ]
}

description

Описание формулы

text

Нет

Okular — универсальный инструмент для просмотра документов

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

created_by

Автор создания записи

timestamp with time zone

Да

iivanov

updated_by

Автор изменения записи

text

Да

iivanov@osmax.SOME.COMPANY

scripts

Таблица содержит информацию о скриптах установки на агенты (minions).

Параметр Описание Тип данных Обязательный Пример значения

id

Уникальный генерируемый идентификатор скрипта. Первичный ключ

bigint (64)

Да

3

description

Описание скрипта

text

Нет

Default script by startup

installation_link

Ссылка на файл, загруженный в S3-совместимое хранилище

text

Да

/v1/multimedia/scripts/bootstrapDefault

is_deleted

Признак удаления. Возможные значения:

  • true;

  • false

boolean

Да

false

is_default

Признак стандартного скрипта. Возможные значения:

  • true;

  • false

boolean

Да

true

display_name

Имя, отображаемое в пользовательском интерфейсе

text

Да

bootstrapDefault

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время изменения записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

created_by

Автор создания записи

timestamp with time zone

Да

iivanov

updated_by

Пользователь, который загрузил скрипт

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

software_executable_files_blacklist

Таблица содержит список исполняемых файлов, исключенных из инвентаризации.

Параметр Описание Тип данных Обязательный Пример значения

path

Абсолютный путь к исполняемому файлу, исключенному из инвентаризации. Первичный ключ

text

Да

/var/lib/qweqwe

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

created_by

Автор создания записи

timestamp with time zone

Да

iivanov

software_packages

Таблица содержит информацию по всем установленным пакетам на всех агентах (minions) системы без привязки к устройству.

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор записи. Первичный ключ

uuid

Да

cff27f52-59d0-48c1-9aba-cdc73fda682d

hash

Хэш-сумма файла

integer

Да

675274246

package_manager

Пакетный менеджер, которым установили пакет

text

Да

apt

description

Описание пакета

text

Нет

shared libraries that salt requires for all packages

manufacturer

Производитель пакета

text

Нет

Debian Salt Team

section

Раздел ПО

text

Нет

admin

name

Название пакета

text

Да

salt-common

created_at

Дата и время появления записи о наличии пакета хотя бы на одном агенте (minion)

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

software_packages_blacklist

Таблица содержит список пакетов, исключенных из инвентаризации.

Параметр Описание Тип данных Обязательный Пример значения

name

Наименование пакета, исключенного из инвентаризации. Первичный ключ

text

Да

acpi

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

created_by

Автор создания записи

timestamp with time zone

Да

iivanov

store_machine_state_snapshots

Таблица содержит детальную информацию о статусе установки определенных конфигураций на устройстве. Отражает связь между конфигурацией/версией и заданием на установку в SaltStack, а также статус этой операции.

Параметр Описание Тип данных Обязательный Пример значения

id

Идентификатор сущности снапшота. Первичный ключ

bigint (64)

Да

443

config_id

Идентификатор конфигурации

bigint (64)

Да

4

config_version_id

Идентификатор версии конфигурации

bigint (64)

Да

4

state

Статус операции. Возможные значения:

  • ACTIVE;

  • INACTIVE

text

Да

ACTIVE

jid

Уникальный идентификатор, используемый в протоколе XMPP (Extensible Messaging and Presence Protocol), который применяется для обмена сообщениями и присутствия в реальном времени

text

Да

5bbc9aae-d7af-4793-a24b-879cbd5f2ec9

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

store_machine_states

Таблица содержит информацию о статусе установки определенных конфигураций на устройстве.

Параметр Описание Тип данных Обязательный Пример значения

configuration_id

Идентификатор конфигурации. Первичный ключ

bigint (64)

Да

3

snapshot_current

Текущее состояние конфигурации/версии

bigint (64)

Нет

446

snapshot_future

Планируемое состояние, которое станет текущим в случае получения статуса из SaltStack об успешной установке

bigint (64)

Нет

machine_id

Идентификатор устройства. Первичный ключ

text

Да

dev-osmax-vm0103.osmax.inno.tech

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

user_attributes

Таблица содержит информацию о дополнительных (настраиваемых) атрибутах пользователей.

Параметр Описание Тип данных Обязательный Пример значения

attribute_id

Уникальный идентификатор атрибута пользователя. Первичный ключ

uuid

Да

4447944b-91bc-4e97-8f4c-112109d0f3c9

code

Уникальный код атрибута пользователя

varchar(30)

Да

whenChanged

name

Имя атрибута пользователя, которое отображается в пользовательском интерфейсе

varchar(50)

Да

Дата изменения

data_type

Тип данных. Возможные значения:

  • string — строка;

  • list — список

text

Да

string

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

Таблица содержит информацию о связях дополнительных (настраиваемых) атрибутов пользователей и разделов.

Параметр Описание Тип данных Обязательный Пример значения

link_id

Уникальный идентификатор связки атрибут-раздел. Первичный ключ

uuid

Да

fd14d65c-83d9-4e55-8e2f-3875123ccebc

attribute_id

Уникальный идентификатор атрибута пользователя

uuid

Да

3d827c86-64c1-4e72-b5f6-65530cdd4db8

section_id

Уникальный идентификатор раздела атрибутов пользователя

uuid

Да

138af805-50b6-4487-811d-26a37ec03bcf

attribute_priority

Приоритет порядка отображения атрибута в пользовательском интерфейсе внутри раздела

integer(32)

Да

0

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

user_attributes_sections

Таблица содержит информацию о разделе (способе группировки) настраиваемых атрибутов пользователя.

Параметр Описание Тип данных Обязательный Пример значения

id

Уникальный идентификатор раздела атрибутов пользователя. Первичный ключ

uuid

Да

30061d40-66d5-445c-a559-a13be830808c

section_name

Название раздела, которое отображается в пользовательском интерфейсе

text

Да

ПР-1

description

Описание раздела атрибута

text

Да

Пользовательский атрибут 1

show_in_short_list

Признак отображения раздела в короткой информации о пользователе

boolean

Да

false

priority

Приоритет порядка отображения в пользовательском интерфейсе

integer(32)

Да

0

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

user_groups

Таблица содержит информацию о группах пользователя.

Параметр Описание Тип данных Обязательный Пример значения

user_id

Уникальный идентификатор пользователя. Часть составного первичного ключа вместе с параметром group_name. Соответствует полю id таблицы users

uuid

Да

efbfbd2b-7417-d089-efbf-bd4befbfbdef

group_name

Наименование группы пользователя. Часть составного первичного ключа вместе с параметром user_id. Соответствует полю full_name таблицы groups

text

Да

CN=Администраторыдомена,CN=Users,DC=vlev,DC=test

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-1808:32:15.045738+00

user_last_app_accesses

Таблица содержит записи о последних успешных входах пользователей в пользовательские интерфейсы «Кабинет администратора» и «Магазин приложений».

Параметр Описание Тип данных Обязательный Пример значения

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

user_full_domain_name

Полное доменное имя пользователя. Первичный ключ

text

Да

Administrator@INNO.TECH

user_application

Название пользовательского приложения. Первичный ключ. Возможные значения:

  • webadmin — «Кабинет Администратора»;

  • store —  «Магазин Приложений»

character varying

Да

webadmin

user_machine_mappings

Таблица содержит данные сопоставления пользователей и устройств.

Параметр Описание Тип данных Обязательный Пример значения

user_fdn

Полное доменное имя пользователя. Часть составного первичного ключа вместе с параметром machine_fqdn. Может использоваться для связи с таблицей users по полю full_domain_name

text

Да

login25497@vlev.test

machine_fqdn

Полное доменное имя устройства. Часть составного первичного ключа вместе с параметром user_fdn. Может использоваться для связи с таблицей machines по полю fqdn

text

Да

lcm-salt-minion-01-u

mapping_type

Тип сопоставления. Возможные значения:

  • MANUAL — ручное;

  • AUTOMATIC — автоматическое

varchar(20)

Нет

MANUAL

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-1808:45:18.000127+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-1808:45:18.000127+00

user_sessions

Таблица содержит данные об истории пользовательских сессий на устройствах.

Параметр Описание Тип данных Обязательный Пример значения

pid_tty_login_stamp

Составное поле, которое представляет собой строку, где сконкатенированы значения из трех колонок pid, tty, loginTime, и объединены с использованием специального разделителя VALUE_SEPARATOR ("Record Separator" в Unicode). Первичный ключ

text

Да

user113698183-1777-416f-ab60-0cfe2f79efb5tty

machine_fqdn

Полное доменное имя устройства. Первичный ключ

text

Да

machine1

login_time

Дата и время входа пользователя в систему

timestamp with time zone

Да

2024-02-26 12:37:28.850136+00

logout_time

Дата и время выхода пользователя из системы

timestamp with time zone

Нет

2024-02-26 21:26:29.850136+00

session_length

Продолжительность сессии

interval

Нет

08:49:01

session_pid

integer (32)

Нет

83313

user_login

Логин пользователя

text

Да

user1

tty

Обозначение устройства, которое взаимодействует с операционной системой через текстовый ввод и вывод (от "teletypewriter")

text

Нет

tty

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-18 10:13:31.548795+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-18 10:15:48.519831+00

users

Таблица содержит информацию о системных пользователях.

Параметр Описание Тип данных Обязательный Пример значения

id

Уникальный идентификатор пользователя. Первичный ключ

uuid

Да

8c69bf10-5231-35be-a7be-b27938a4127b

login

Имя пользователя для входа в систему (Логин)

text

Да

login67163

domain

Имя домена в короткой форме записи

text

Да

vlev.local

full_domain_name

Полное доменное имя пользователя в формате <логин_пользователя@имя_домена>

text

Да

login67163@vlev.local

email

Адрес электронной почты пользователя

text

Нет

email79740@inno.tech

first_name

Имя пользователя

text

Нет

Иван

last_name

Фамилия пользователя

text

Нет

Иванов

common_name

Общее имя пользователя

text

Нет

Иван Иванов

display_name

Отображаемое имя пользователя

text

Нет

Иван Иванов

title

Должность пользователя

text

Нет

технический писатель

department

Отдел, в котором работает пользователь

text

Нет

отдел технической документации

company

Компания, в которой работает пользователь

text

Нет

ООО "ТехДокс"

disabled

Указывает, является ли пользователь активным или нет

boolean

Да

true

created_at

Дата и время создания записи

timestamp with time zone

Да

2023-09-1807:46:41.019274+00

updated_at

Дата и время обновления записи

timestamp with time zone

Да

2023-09-1808:27:54.048487+00

attributes

Атрибуты пользователя

json

Нет

{"4447944b-91bc-4e97-8f4c-112109d0f3c9": {"value": "20231027143352.0Z"}}

object_sid

Идентификатора безопасности

varchar(255)

Нет

S-1-5-21-1184408154-1736440087-3158576400-53463

Информационно-справочные материалы

Раздел содержит дополнительную информацию, справочные материалы и инструкции, которые могут быть полезны при работе с продуктом.

Подготовка сертификатов для настройки TLS(SSL)-шифрования

Для включения TLS(SSL)-шифрования в продукте необходимо предварительно сформировать хранилища доверенных корневых сертификатов УЦ (truststore) и хранилища ключей (keystore), в которых будут содержаться подписанные корневым сертификатом УЦ ключи в формате пар «сертификат-приватный ключ».

При установке бэкенда продукта автоматически формируется хранилище доверенных корневых сертификатов УЦ (truststore) по пути: /etc/ssl/certs/java/cacerts.

По умолчанию путь к хранилищу задается в соответствующих конфигурационных параметрах бэкенда в файле application.properties.

Для добавления нового доверенного корневого сертификата в truststore используйте утилиту keytool, поставляемую вместе с JRE.

Для создания хранилища ключей (keystore):

  1. Обратитесь в УЦ, который предоставил доверенный корневой сертификат, с запросом на формирование подписанной пары «сертификат-приватный ключ».

  2. (Опционально), если пара «сертификат-приватный ключ» предоставлена в виде отдельных файлов, запакуйте ее в Java-совместимое хранилище, используя утилиту keytool.

После того как вы создадите хранилища сертификатов и ключей, укажите пути до них и пароли в соответствующих конфигурационных параметрах бэкенда в файле application.properties.
Подробнее об установке и конфигурировании бэкенда см. в разделах «Установка бэкенда продукта» и «Конфигурация бэкенда».

Получение сертификата SSL для синхронизации пользователей по протоколу LDAPS

  1. Для извлечения сертификата LDAP-сервера выполните команду в консоли:

    openssl s_client -showcerts -connect <active_directory_domain_controller_address>:<ldap_ssl_port>

    Пример команды:

    openssl s_client -showcerts -connect 10.169.20.3:636

    Пример вывода команды:

    Connecting to 172.28.15.144
    CONNECTED(00000004)
    Can't use SSL_get_servername
    depth=0 O=Samba Administration, OU=Samba - temporary autogenerated HOST certificate, CN=DEV-LCM-VM0106.lcm.terra.inno.tech
    verify error:num=20:unable to get local issuer certificate
    verify return:1
    depth=0 O=Samba Administration, OU=Samba - temporary autogenerated HOST certificate, CN=DEV-LCM-VM0106.lcm.terra.inno.tech
    verify error:num=21:unable to verify the first certificate
    verify return:1
    depth=0 O=Samba Administration, OU=Samba - temporary autogenerated HOST certificate, CN=DEV-LCM-VM0106.lcm.terra.inno.tech
    verify return:1
    ---
    Certificate chain
     0 s:O=Samba Administration, OU=Samba - temporary autogenerated HOST certificate, CN=DEV-LCM-VM0106.lcm.terra.inno.tech
       i:O=Samba Administration, OU=Samba - temporary autogenerated CA certificate, CN=DEV-LCM-VM0106.lcm.terra.inno.tech
       a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA256
       v:NotBefore: Oct 19 14:59:09 2023 GMT; NotAfter: Sep 18 14:59:09 2025 GMT
    -----BEGIN CERTIFICATE-----
    MIIF0DCCA7igAwIBAgIEPUQxZTANBgkqhkiG9w0BAQsFADCBhTEdMBsGA1UEChMU
    U2FtYmEgQWRtaW5pc3RyYXRpb24xNzA1BgNVBAsTLlNhbWJhIC0gdGVtcG9yYXJ5
    IGF1dG9nZW5lcmF0ZWQgQ0EgY2VydGlmaWNhdGUxKzApBgNVBAMTIkRFVi1MQ00t
    Vk0wMTA2LmxjbS50ZXJyYS5pbm5vLnRlY2gwHhcNMjMxMDE5MTQ1OTA5WhcNMjUw
    OTE4MTQ1OTA5WjCBhzEdMBsGA1UEChMUU2FtYmEgQWRtaW5pc3RyYXRpb24xOTA3
    BgNVBAsTMFNhbWJhIC0gdGVtcG9yYXJ5IGF1dG9nZW5lcmF0ZWQgSE9TVCBjZXJ0
    aWZpY2F0ZTErMCkGA1UEAxMiREVWLUxDTS1WTTAxMDYubGNtLnRlcnJhLmlubm8u
    dGVjaDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANnnfyyW1P1I80Cw
    t/TVWTZTRXIHKNPECGz3flV7XzxECUwMN/TZoft3uucukWs6jsa53REmIsjIgUrQ
    3FiQn4lo/fzuC5gbwF9RE7jA3OcankaDjL5exB8FHtVUFy0hjAKulsZ1L1bO2Z49
    2SAZpK64B9IOI092rV2DyiBkkVh3xCRHUpm97Buzvt8ERQsDEGWx8lYJl66F/Zi4
    2QnIlMn1D7Q1VVp5OggqPaua3il9s3q7uoS6hXuin/AD6i3ddT3tHeBP/L/j3bdr
    oesfQl5xd15d0xCdUqMteyMpa+aMj1Sln32hpaM4U4Q8sIn4cLOd+8ZjRclyZyFe
    wRyV4Ox9WKfOlwh+vRNE28zNbhU0ljJM4qIj8mXTAewHCI6xLQEYFjy1GJf7KS6C
    o2Ub5+FwnZ72tXvB99STgvhyD6JhoSThy0OHjqx5Z9HK6Pjx+QPlkk4JEO/KRl0s
    zneehA06XdUUQc2G/Cn5wVMdZpfo3OXiePsEKZKg2AA979TvsqqqCWAbNG4RbXyK
    riCtFyJqqwEiUEOeYr0y65AHV/jD1NlPIYGUzXlFhBnFJlLOoXN04J58p4UbTcdd
    mBBHPmGk69W6Oxf5oF7HJsfZrxHVe8j4lpNH/Ybh54g9otoqpxP157H26dqcRvZM
    mxXDJtg4AoWsoGQXM1ej4S7kwJclAgMBAAGjRDBCMAwGA1UdEwEB/wQCMAAwEwYD
    VR0lBAwwCgYIKwYBBQUHAwEwHQYDVR0OBBYEFOP4eYlKWA77ur5P4ys0xE57aRGj
    MA0GCSqGSIb3DQEBCwUAA4ICAQCHDPbmgIpfqXoKh0x3FtNt6EecJvdLtRPHrBO+
    MHXL9o7SZyqtbXs4mhsoMbP8GGGcJtem02ELZosWLr1/2cg0d9uQuhpB5zLwrTiV
    E7u7ZVADXJc75gMxulBPHDLaUT8AdP0GEVt6W6dw1xQULT1CGI9728vsZ+q9VetK
    3qgtx/lAB16wJKhm0LMxS9FAR2iOfHgnVYHqKMQKkNUecV95imo10G44P6sj4wSt
    L7lB+Za2EA//7OdGvQYeCQCSbpQQbNPV0g1LHXJ/eO5y1EEIRm4gtsTyipg/52fC
    VRTmGw5jZUEzUZBCUY/A4XiyoczqfuO+tGT0rLBZVmP7EC7/KJt3EKnu1CQgkv8w
    gPkgYNX6+2zuOCUirXY8QqciQqD44SSyS2+LNk5qfftoxcNZ5yBiOiJDZ9KayW+F
    t0OwfgTAvGBoBDQ5Gkop1sAEXFEoEhRO8ktOFLjnG6vxEPc35Wj3qX9K3Tye03ue
    hbxv5qrzs5STOF1fqbTuckuP+91ysuNbKvivlB1nlXBXgycoqYRF6/uU/sK1Xesb
    YJ8oYR+7edrYyRpz1WECR9MAS9iH49RfaEVO+8pSxuGwUMtaiKA4BQo02aGLMKDW
    hFtNhfVEmARoKPkuqdIoxjWL9bltPal6mr1ku2P5TwIyQIWHfI1C+mqnxlh2Z78Z
    MDjQmQ==
    -----END CERTIFICATE-----
  2. Скопируйте сертификат из вывода команды и создайте файл с сертификатом.

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

Использование стороннего Java Runtime Environment (JRE)

По умолчанию Java Runtime Environment (JRE) уже включен в устанавливаемый deb-/rpm-пакет osmax-core, с бэкендом продукта.

При установке и запуске модуля osmax-core автоматически происходит создание службы osmax.service и запуск бэкенда через встроенный JRE. В данном случае не требуется предпринимать дополнительные действия.

Версия Java должна быть не ниже 17.

Для запуска модуля osmax-core через стороний JRE, выполните действия:

Если вы устанавливаете продукт на Astra Linux, используйте инструкцию:

  1. Установите на сервер, на котором будет производиться запуск, JRE не ниже версии 17.

    Убедитесь, что переменная JAVA_HOME содержит путь к актуальной JRE не ниже версии 17.
  2. Загрузите и распакуйте архив *.tar.gz с deb-пакетом osmax-core.

  3. Перенесите deb-пакет в требуемую директорию, например, выполнив команду:

    dpkg-deb -R osmax.core-<version>.deb osmax-core /opt/osmax-core
  4. Перейдите в директорию с исполняемыми файлами *.jar модуля osmax-core:

    cd /opt/osmax-core/lib/app
  5. Запустите исполняемый файл osmax-app-runner.jar удобным способом, например, выполнив команду:

    java -Dquarkus.config.locations=/opt/osmax-core/application.properties -jar osmax-app-runner.jar

Если вы устанавливаете продукт на РЕД ОС, используйте инструкцию:

  1. Установите на сервер, на котором будет производиться запуск, JRE не ниже версии 17.

    Убедитесь, что переменная JAVA_HOME содержит путь к актуальной JRE не ниже версии 17.
  2. Загрузите и распакуйте архив *.tar.gz с rpm-пакетом osmax-core.

  3. Перенесите rpm-пакет в требуемую директорию, например, выполнив команду:

    cd /opt/osmax-core
    rpm2cpio osmax-core-<version>.x86_64.rpm | cpio -idmv
  4. Перейдите в директорию с исполняемыми файлами *.jar модуля osmax-core:

    cd /opt/osmax-core/lib/app
  5. Запустите исполняемый файл osmax-app-runner.jar удобным способом, например, выполнив команду:

    java -Dquarkus.config.locations=/opt/osmax-core/application.properties -jar osmax-app-runner.jar

Cron-выражение формата Quartz

Cron-выражение формата Quartz относится к формату временных интервалов, которые используются в системе планирования задач Quartz. Этот формат представляет собой строку, содержащую шесть или семь полей, разделенных пробелами или табуляцией. В каждом поле задано значение времени или даты, когда задача должна быть выполнена. Поля могут содержать любые разрешенные значения, а также различные комбинации разрешенных специальных символов для этого поля.

Описание полей:

Поле Обязательность заполнения Допустимые значения Допустимые специальные символы

Секунды

Да

0-59

, - * /

Минуты

Да

0-59

, - * /

Часы

Да

0-23

, - * /

День месяца

Да

1-31

, - * ? / L W

Месяц

Да

1-12 или JAN-DEC, где:

  • (1) JAN — январь;

  • (2) FEB — февраль;

  • (3) MAR — март;

  • (4) APR — апрель;

  • (5) MAY — май;

  • (6) JUN — июнь;

  • (7) JUL — июль;

  • (8) AUG — август;

  • (9) SEP — сентябрь;

  • (10) OCT — октябрь;

  • (11) NOV — ноябрь;

  • (12) DEC — декабрь

, - * /

День недели

Да

1-7 или SUN-SAT, где:

  • (1) SUN — воскресенье;

  • (2) MON — понедельник;

  • (3) TUE — вторник;

  • (4) WED — среда;

  • (5) THU — четверг;

  • (6) FRI — пятница;

  • (7) SAT — суббота

, - * ? / L #

Год

Нет

1970-2099

, - * /

Описание специальных символов:

Значение Расшифровка Описание

*

Все значения

Используется для выбора всех значений в поле. Например, если в поле Минуты указано значение *, — это будет означать, что задание должно выполняться каждую минуту

?

Нет специального значения

Используется, когда не важно, какой это должен быть день месяца или день недели. Например, если в поле День месяца указано значение 10, а в поле День недели — ?, — это будет означать, что задание должно выполняться 10-го числа месяца, независимо от того, какой это будет день недели

-

Используются для указания диапазона. Например, если в поле Часы указано значение 10-12, — это будет означать, что задание будет выполняться в 10:00, 11:00 и 12:00 часов

,

Используется для поочередного указания значений. Например, если в поле День недели указано значение MON,WED,FRI, — это будет означать, что задание будет выполняться в понедельник, среду и пятницу

/

Используется для указания приращения. Например, если в поле Секунды указано значение 0/15, — это будет означать, что задание будет выполняться в 0, 15, 30 и 45 секунд; а если указано значение 5/15 — в 5,20,35 и 50 секунд

L

От англ. — last (последний)

Используется для указания значений:

  • в поле День месяца — последнего дня месяца; например, для января — это будет 31 января, а для февраля — 28 февраля в не високосный год;

  • в поле День недели — субботы; однако если значение L используется после другого значения, оно будет означать последние n-дней месяца, например, значение 6L будет означать последнюю пятницу месяца.

Также может использоваться для указания смещения от последнего дня месяца, например, L-3 будет означать третий день до конца месяца.

При использовании символа L важно не указывать списки или диапазоны значений, это может привести к некорректным данным

W

От англ. — weekday (рабочий день)

Используется для указания ближайшего рабочего дня недели (понедельник-пятница) к указанному дню. Например, если в поле День месяца указано значение 15W, — это будет означать, что задание будет выполняться в ближайший рабочий день к 15-му числу месяца. Если 15-е число выпадает на субботу, задание будет запущено в пятницу 14-го числа, а если 15-е число выпадает на воскресенье, то в понедельник 16-го числа. Если 15-е число выпадает на вторник, то задание будет запущено во вторник 15-го числа. Однако, если указано значение 1W для дня месяца, и 1-е число выпадает на субботу, то задание будет запущено в понедельник 3-го числа, так как оно не может пересекать границы дней месяца.

Можно объединить символ W с символом L (LW), чтобы задать значение, которое будет означать последний будний день месяца.

При использовании символа W важно не указывать списки или диапазоны значений, это может привести к некорректным данным

#

Используется для указания n-ного дня месяца. Например, если в поле День недели указано значение 6#3, — это будет означать, что задание будет выполняться в третью пятницу месяца.

Если указано значение #5, а в месяце нет пяти заданных дней недели, то в этом месяце задание выполнено не будет

Примеры выражений:

  • * * * ? * * — задача выполнятся каждую секунду;

  • 0 * * ? * * — задача выполнятся каждую минуту;

  • 0 */2 * ? * * — задача выполнятся каждую четную минуту;

  • 0 0 12 ? * 5#3 — задача выполнятся каждый месяц в третий четверг месяца с 00:00 до 12:00.

Больше примеров вы можете найти, перейдя по ссылке.

Глоссарий

Basic Input/Output System (BIOS)

Набор программного обеспечения, который управляет базовыми функциями компьютера, такими как загрузка операционной системы, управление периферийными устройствами и настройка системных параметров.

Certificate Revocation List (CRL)

Список отозванных сертификатов, который используется для проверки действительности сертификата. CRL содержит информацию о сертификатах, которые больше не должны использоваться, например, если они были скомпрометированы или утеряны.

Deb-пакет (Debian package)

Формат упаковки программного обеспечения для операционной системы Debian и ее производных, таких как Ubuntu. Deb-пакет содержит программу или библиотеку, а также информацию о зависимостях и конфигурации. Он может быть установлен с помощью менеджера пакетов, например, apt-get или dpkg. Deb-пакеты облегчают установку и обновление программного обеспечения в системе, а также позволяют управлять зависимостями между пакетами.

Har-логи (HTTP Archive logs)

Файлы, которые содержат записи о том, как браузер взаимодействует с сервером во время загрузки веб-страницы. Эти логи могут быть использованы для анализа производительности веб-страницы и выявления проблем, таких как медленная загрузка или ошибки при загрузке. Har-логи могут быть созданы с помощью инструментов разработчика веб-браузера или специальных программ для записи HTTP-трафика.

Internet Preboot eXecution Environment (iPXE)

Реализация PXE с открытым исходным кодом, свободное ПО для создания загрузочных ПЗУ для загрузки Linux и других операционных систем на компьютерах с архитектурой x86 по сети с использованием межсетевых протоколов.

Java Runtime Environment (JRE)

Программное обеспечение, необходимое для запуска Java-приложений на компьютере. Оно содержит в себе виртуальную машину Java (JVM), классы Java API и другие необходимые библиотеки. JRE позволяет пользователям запускать Java-приложения без необходимости установки полного JDK (Java Development Kit).

Kafka returner

Модуль сервера управления (master), который позволяет отправлять результаты выполнения команд и состояний, полученные от агентов (minions), в топик Apache Kafka для дальнейшей обработки или хранения.

Network Security Services (NSS)

Набор библиотек, предназначенных для разработки защищённых кросс-платформенных клиентских и серверных приложений. Приложения, построенные при помощи NSS, могут использовать и поддерживать SSLv3, TLS и многие другие стандарты безопасности.

Network Security Services Database (NSSDB)

База данных, используемая для хранения сертификатов и ключей шифрования в системах, использующих библиотеку Network Security Services (NSS).

Privacy Enhanced Mail (PEM)

Формат кодирования данных, который используется для хранения и передачи сертификатов, закрытых ключей, а также других конфиденциальных данных в виде текста. Формат PEM был разработан для безопасной передачи электронной почты, но сейчас широко используется в SSL/TLS-сертификатах и других системах безопасности.

Preboot eXecution Environment (PXE)

Cпецификация UEFI, поддерживающая загрузки по сети.

Simple Storage Service (S3)

Cервис хранения данных в облаке, предоставляемый Amazon Web Services (AWS). Он позволяет хранить и извлекать любой объем данных из любой части мира. S3 используется для хранения статических файлов, таких как изображения, видео, аудио, документы и т.д. Этот сервис также предоставляет возможность управления доступом к данным и автоматического резервного копирования данных. S3 является одним из самых популярных сервисов AWS и широко используется в различных приложениях и сервисах.

System Security Services Daemon (SSSD)

Клиентский компонент централизованных решений для управления идентификацией, таких как Microsoft Active Directory, Kerberos, OpenLDAP и других серверов каталогов. Обслуживает и кэширует информацию, хранящуюся на удаленном сервере каталогов, и предоставляет услуги идентификации, аутентификации и авторизации хост-машине.

Realm Discovery (Realmd)

xref:[] Сервис D-Bus, позволяющий производить настройку сетевой аутентификации и членства в домене (Active Directory). Информация о домене обнаруживается автоматически. Для аутентификации и проверки учетных записей realmd использует SSSD (через Kerberos и LDAP) или Winbind.

Unified Extensible Firmware Interface (UEFI)

Интерфейс между операционной системой и микропрограммами, управляющими низкоуровневыми функциями оборудования, его основное предназначение: корректно инициализировать оборудование при включении системы и передать управление загрузчику или непосредственно ядру операционной системы. EFI — технология, предназначенная для замены BIOS которая обеспечивает более быструю загрузку компьютера, улучшенную безопасность и более простую настройку системы. Она также позволяет использовать жесткие диски большого объема и поддерживает новые технологии, такие как Secure Boot, которая обеспечивает защиту от вредоносных программ.

Unified Extensible Firmware Interface Compatibility Support Mode (UEFI CSMC)

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

Unified Extensible Firmware Interface Hypertext Transfer Protocol (UEFI HTTP)

Протокол прикладного уровня передачи данных, который предоставляет возможность загрузки операционных систем и других ресурсов через HTTP(S) непосредственно из среды UEFI.

Автоматизированное рабочее место (АРМ)

Программно-технический комплекс, предназначенный для автоматизации деятельности сотрудника из состава пользователей автоматизированных систем.

Операционная система (ОС)

Программное обеспечение, управляющее компьютерами (включая микроконтроллеры) и позволяющее запускать на них прикладные программы. Предоставляет программный интерфейс для взаимодействия с компьютером, управляет прикладными программами и занимается распределением предоставляемых ресурсов, в том числе между прикладными программами. В широком смысле под операционной системой понимается совокупность ядра операционной системы и работающих поверх него программ и утилит, предоставляющих интерфейс для взаимодействия пользователя с компьютером.

Программное обеспечение (ПО)

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