Служба управления конфигурациями "Осмакс"

Руководство по эксплуатации

Версия 1.8.0

Содержание

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

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

    Настройка режима мульти-мастер с автоматическим переключением (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), выбрав следующий в порядке очереди или случайным образом, в зависимости от заданных настроек.

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

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

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

    Формула — это обычная директория, которая именуется согласно шаблону: <top_level_dir>-formula.

    Директория обязательно содержит поддиректорию <top_level_dir>, имя которой совпадает с именем формулы, и файлы:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • top_level_dir — имя поддиректории, где расположены файлы с расширением .sls.

    SLS-файлы формулы составлены в синтаксисе YAML и содержат описания состояний, которые достигает система при применении формулы. Имена SLS-файлов не могут содержать точки, кроме точки между именем и расширением .sls.

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

    Добавление формулы в S3-совместимое хранилище, на использование которого настроен сервер управления (master)

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

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

    Также формулу можно загрузить при помощи API-метода importFormulas. Метод описан в разделе «Метод importFormulas» документа «Описание API».

    Создание и импорт конфигурации

    Конфигурация описывается в файле формата 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-файл с конфигурацией, импортируйте его в кабинете администратора, используя метод createConfiguration. Метод описан в документе «Описание API» в разделе «Метод createSpecification».

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

    Добавление версии конфигурации

    Версия конфигурации описывается в файле формата 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
            # Set the specific version of a package. If value is an empty string then used latest version
            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' ]

    После того как вы подготовите JSON-файл с версией конфигурации, импортируйте его, используя метод createConfigurationVersion. Метод описан в документе «Описание API» в разделе «Метод createSpecificationVersion».

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

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

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

    Формула 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
          # Set the specific version of a package. If value is an empty string then used latest version
          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' ]

    Формула 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
          # Set the specific version of a package. If value is an empty string then used latest version
          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
          # Set the specific version of a package. If value is an empty string then used latest version
          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: inno-ira-tigervnc
          # Укажите конкретную версию пакета. Если значение представляет собой пустую строку, используется последняя версия
          version: '1.0.0'
        # Задайте параметры x0vncserver
        x0vncserver_options:
          QueryConnect: 1
          QueryConnectTimeout: 15
          ShowRemoteConnect: 1
       # Задайте ip-адреса для доступа к tigervnc
       tigervnc_access_ips: []
       # Задайте группы доступа к tigervnc
       tigervnc_access_groups: []

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      Например: +199.35.209.1/32.

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

    Формула 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: inno-ira-xrdp
          # Укажите конкретную версию пакета. Если значение представляет собой пустую строку, используется последняя версия
          version: '0.9.24-1-543141.6e94b8a0'
        # Задайте параметры xrdp
        xrdp_ini:
          port: 3389
        # Задайте параметры sesman
        sesman_ini:
          # Завершение сеанса пользователя после его отключения
          KillDisconnected: false
          # время в минутах, через которое сеанс пользователя будет завершен после отключения (если для параметра
          # KillDisconnected установлено значение true)
          DisconnectedTimeLimit: 0
          # время в минутах, в течение которого пользователь не совершал никаких действий; по истечении этого времени сеанс будет завершен
          IdleTimeLimit: 0
        # Задайте ip-адреса для доступа к xrdp
        xrdp_access_ips: []
        # Задайте группы доступа к xrdp
        xrdp_access_groups: []

    Формула 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: inno-ira-openssh
          # Укажите конкретную версию пакета. Если значение представляет собой пустую строку, используется последняя версия
          version: '1.1.0'
        # Задайте параметры openssh
        # Игнорировать/не игнорировать группы доступа при аутентификации. Значение true указывает на то, что группы
        # доступа не будут учитываться при определении прав доступа
        access_groups_ignore: false
        # Дополнительные настройки, связанные с пользовательской настройкой SSH
        config_customize: ''
        # 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: []

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

    Пользовательские формулы — это готовые формулы, для которых необходимо переопределить в конфигурации параметры, описанные в файле 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/inno-lcm-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/inno-lcm-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/inno-lcm-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/inno-lcm-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/inno-lcm-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/inno-lcm-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') %}
    После того как формула будет написана, следуйте инструкциям по работе с формулой в разделе «Работа с формулами».

    Работа с модулем установки ОС

    Модуль установки операционных систем (ОС) позволяет устанавливать ОС на устройства, поддерживающие BIOS (Basic Input/Output System) и UEFI (Unified Extensible Firmware Interface), с помощью USB или носителя СD-ROM. При этом установка осуществляется по сети с использованием установщика iPXE.

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

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

    Дистрибутив операционной системы

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

    Включает:

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

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

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

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

    Включает:

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

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

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

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

    Cпособ развертывания

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

    Включает:

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

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

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

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

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

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

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

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

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

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

    Поддерживаемые переменные подстановки:

    • переменные подстановки, которые задаются через конфигурационный файл — при указании значений таких переменных в конфигурационном файле к их именам необходимо добавить префикс lcm.provisioner.template-engine.template-placeholders;

      Пример:

      • в файле конфигурации модуля lcm-provisioner:

        lcm.provisioner.template-engine.template-placeholders.unattended_install_file_url=/v1/unattended_install_files
      • в шаблоне:

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

      • lcm.provisioner.template-engine.template-placeholders.osmax_provisioner_base_url=http://<osmax-provisioner-host>:<port>;

      • lcm.provisioner.template-engine.template-placeholders.unattended_install_file_url=/v1/unattended_install_files.

    • переменные подстановки, вычисляемые для связки устройства со способом развертывания:

    Наименование Описание Способ вычисления

    hostname

    Наименование устройства

    Соответствует значению атрибута hostname устройства. Доступно для вычисления, если для устройства назначен способ развертывания

    domain

    Имя домена

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

    mac

    МAC-адрес

    Вычисляется на основании MAC-адреса, указанного на сетевом интерфейсе устройства

    architecture

    Архитектура процессора

    Вычисляется на основании архитектуры процессора устройства

    initrd

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

    Вычисляется как initrd-атрибут дистрибутива, который планируется к установке

    kernel

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

    Вычисляется как атрибут kernel дистрибутива, который планируется к установке

    repository_url

    URL-адрес репозитория, где размещается установочный дистрибутив

    Вычисляется как атрибут repository_url дистрибутива, который планируется к установке

    kernel_options

    Дополнительные опции ядра, с которыми выполняется установка

    Вычисляется как атрибут kernel_options (дополнительные опции ядра) профиля установки

    unattended_install_file_url

    Путь к файлу ответов

    Заполняется URL API-метода функции v1/unattended_install_files

    is_create_user

    Признак необходимости создания локального пользователя

    Заполняется значением атрибута is_create_user сущности «Способ развертывания»

    password_hash_algorithm

    Используемый hash-алгоритм для задания паролей, доступные значения: MD5 и SHA512

    Заполняется значением атрибута hash_algorithm сущности «Способ развертывания»

    root_crypted_password

    Hash пароля root (MD5/SHA512)

    Заполняется значением атрибута root_hash_password сущности «Способ развертывания»

    user_full_name

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

    Заполняется значением атрибута user_account.userFullName сущности «Способ развертывания», если атрибут is_create_user = true соответствует d-i passwd/user-fullname

    user_name

    Имя пользователя, логин

    Заполняется значением атрибута user_account.userName сущности «Способ развертывания», если атрибут is_create_user = true

    user_crypted_password

    Hash пароля пользователя

    Заполняется значением атрибута user_account.userHashPassword сущности «Способ развертывания», если атрибут is_create_user = true

    osmax_provisioner_base_url

    Cервер Осмакс, по которому можно получить скрипты и другую информацию

    machine_id

    Внутренний идентификатор устройства

    Заполняется значением атрибута machine_id устройства

    Загрузочный образ

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

    NOTE

    В текущей версии продукта поддерживается только один тип загрузочного образа — универсальный загрузочный образ. Он содержит программу-загрузчик, которая переносится на автономный носитель.

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

    Устройство

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

    Включает:

    • hostname;

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

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

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

    Общее описание процесса установки ОС

    1. Необходимо подготовить носитель USB\CD-ROM с универсальным загрузочным образом. Для подготовки образа используется группа API-методов: /v1/bootable_images.

    2. С подготовленного носителя на устройство загружается универсальный загрузочный образ.

    3. Образ содержит универсальный IPXE-скрипт, который инициализирует сетевой интерфейс устройства и обращается к модулю установки ОС за IPXE-скриптом для конкретного устройства, указывая его MAC-адрес. Для этого используется API-метод /v1/boot_loader_configs.

    4. Модуль установки OC по MAC-адресу выполняет поиск устройства и связанный с ним способ развертывания, на основе этой информации рендерит шаблон IPXE-скрипта для конкретного устройства и отдает сформированный скрипт.

    5. Устройство загружает установочное ядро целевой ОС и начинает ее установку.

    6. После инициализации сетевого интерфейса установочное ядро запрашивает у модуля установки ОС файл автоответов, используя API-метод /v1/boot_loader_configs.

    7. Модуль установки ОС выполняет поиск устройства и связанный с ней способ развертывания по MAC-адресу, на основе этой информации рендерит шаблон файла автоответов для конкретного устройства и отдает сформированный скрипт.

    8. Установка ОС выполняется согласно внутренней логике ОС с использованием предоставленного файла автоответов. Если в конце файла автоответов есть вызов пост-установочного скрипта, то установочное ядро целевой ОС запрашивает у модуля установки ОС скрипт пост-установки, используя API-метод /v1/provisioning_scripts.

    9. Модуль установки OC выполняет поиск устройства и связанный с ней способ установки по machineId, на основе этой информации рендерит шаблон пост-установочного скрипта и отдает сформированный скрипт.

    10. Установочное ядро целевой ОС (или установленное ядро целевой ОС, в зависимости от команды вызова скрипта) выполняет скрипт, после чего установка завершается.

    11. Если установка выполнялась с USB-накопителя на машине с BIOS, необходимо извлечь USB-накопитель или изменить в BIOS порядок загрузки, отдав приоритет жесткому диску компьютера.

    Настройка модуля установки ОС для обеспечения установки ОС на устройства

    В комплект поставки модуля установки ОС входит предустановленный пример конфигурации, позволяющий выполнять установку ОС astra se 1.7.5.9. Конфигурация, описанная ниже, за исключением работы с устройствами, представлена в данном примере. Наименование способа развертывания примера — "Установка Astra Linux 1.7.5.9 c загрузочного образа".
    1. Создайте способ развертывания.

      1. Создайте дистрибутив ОС, используя группу API-методов /v1/installation_distros.

        Внешний источник файлов установочного ядра ОС и временной файловой системы (initrd) должен быть доступен по протоколу HTTP для устройств, на которые будет осуществляться установка ОС.
      2. Настройте шаблон IPXE-скрипта, используя API-метод /v1/templates/{templateId}.

        В текущей реализации модуля установки ОС всем способам развертывания автоматически назначается единый шаблон IPXE-скрипта c именем "BIOS iPXE universal base script".
      3. Создайте шаблон скрипта пост-установки, используя группу API-методов /v1/templates.

        Использование скрипта пост-установки является опциональным. Если вы предполагаете его использовать, загрузите соответствующий ему шаблон и пропишите вызов скрипта пост-установки в шаблоне файла автоответов.
      4. Создайте шаблон файла автоответов, используя группу API-методов /v1/templates.

        Если вы предполагаете использовать скрипт пост-установки, пропишите его вызов в скрипте автоответов.

        Пример:

         # вызов скрипта пост-установки
           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; \
      5. Обеспечьте доступность по HTTP-протоколу зеркал репозитория пакетов, планируемых к установке ОС для устройств, на которые планируется осуществлять установку.

        Используйте следующие команды скрипта автоустановки:
         d-i mirror/http/hostname
         d-i mirror/http/directory
      6. Обеспечьте наличие в шаблоне файла автоответов вызовов, обслуживающих регистрацию статуса установки ОС на стороне модуля установки ОС:

        # Регистрация старта установки (внутреннее использование)
        d-i    preseed/early_command string wget --method=put --body-data='{"status":"READY_TO_INSTALL"}' --header="content-type: application/json" -O- {{osmax_provisioner_base_url}}/v1/unprovisioned_machines/{{machine_id}}/status
        
        # Финальные действия при установке, для расширения шаблона можно добавлять любые кастомные действия перед командам "вызов скрипта пост-инсталляции" и "Регистрация установки"
        d-i preseed/late_command string \
        # Здесь размещается вызов скрипта постинсталляции если он используется
        # .. возможный вызов скрипта постинсталляции ..
        # Регистрация завершения установки (внутреннее использование)
            wget --method=put --body-data='{"status":"OS_INSTALLED"}' --header="content-type: application/json" -O- {{osmax_provisioner_base_url}}/v1/unprovisioned_machines/{{machine_id}}/status
      7. Создайте профиль установки, используя группу API-методов /v1/installation_profiles.

      8. Создайте способ развертывания, используя группу API-методов /v1/installation_recipes.

    2. Создайте загрузочный образ, используя группу API-методов /v1/bootable_images.

      Достаточно сформировать один загрузочный образ. Он является универсальным и подходит для всех способов развертывания.
    3. Создайте устройства, используя группу API-методов /v1/unprovisioned_machines или через пользовательский интерфейс «Кабинет Администратора» (см. документ «Руководство администратора» раздел «Создание и настройка новых устройств»).

    Настройка опции удаленной установки агентов (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-lcm-vm0104.lcm.terra.inno.tech: {}
      dev-lcm-vm0105.lcm.terra.inno.tech: {}
      ...
      dev-lcm-vm0109.lcm.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)

    Интеграции

    Раздел содержит описание:

    Интеграция бэкенда продукта с модулем координации (SaltStack) через брокер сообщений Kafka

    На Рис. 1 представлена схема интеграции бэкенда продукта с модулем координации (SaltStack) через брокер сообщений Kafka.

    kafka integration
    Рис. 1. Интеграция бэкенда продукта с модулем координации (SaltStack)

    В рамках интеграции c модулем координации бэкенд продукта обеспечивает:

    • передачу данных со всех серверов управления (masters) в бэкенд продукта с помощью подписки на топик Apache Kafka;

      В брокере сообщений Kafka создается топик — логическая единица организации данных. Каждый топик представляет собой некоторое количество записей, которые называются сообщениями. Производитель, Kafka returner — модуль сервера управления (master), отправляет результаты выполнения команд и состояний, полученные от агентов (minions), в топик для дальнейшей обработки, а потребитель, бэкенд продукта, читает сообщения из него.

    • распределение запросов на установку ПО между серверами управления (masters).

      При запросе на установку ПО на агенте (minion) бэкенд продукта отправляет HTTP-запрос, содержащий идентификатор агента (minion), на соответствующий сервер управления (master). Чтобы корректно определить сервер управления (master), бэкенд продукта анализирует следующие сообщения о событиях SaltStack, полученные через брокер сообщений Kafka:

      • minion_ping — указывает на то, что агент (minion) только что отправил ping-запрос на сервер управления (master);

      • minion_start — указывает на то, что агент (minion) только что запустился;

      • /minion/refresh/<minion-id> — указывает на то, что была выполнена операция обновления данных на агенте (minion) с указанным идентификатором, который определяет Kafka returner при обработке сообщений.

    Перед тем как настроить интеграцию необходимо:

    1. Установить Apache Kafka, следуя инструкциям в официальной документации.

    2. Создать отдельный топик (например, salt-topic), следуя инструкции в официальной документации. Для топика рекомендуется задать параметры:

      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. При конфигурировании бэкенда в файле application.properties задайте:

      • параметры подключения к топику Kafka (см. раздел см. «Предварительная конфигурация бэкенда. Параметры настройки интеграции с Apache Kafka» документа «Руководство по установке»);

      • одинаковые порт, на котором будет запущен API-интерфейс, логин и пароль для подключения к серверу управления (master) (см. раздел см. «Предварительная конфигурация бэкенда. Параметры настройки интеграции с S3-совместимым хранилищем» документа «Руководство по установке»).

    Интеграция с 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) на устройства.

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

    Последовательность шагов для настройки хранения файлов формул и файлов Pillar модуля координации (SaltStack):

    1. При конфигурировании сервера управления (master) выполните настройку подключения сервера управления (master) к бакетам salt-bucket и pillar-bucket (см. раздел «Настройка подключения к S3-совместимому хранилищу» документа «Руководство по установке»).

    (Опционально) загрузите пользовательские формулы в бакет salt-bucket, который вы подключили к

    серверу управления (master), используя API-метод importFormulas.

    + NOTE: Описание API-метода importFormulas а также подробную информацию о создании и использовании формул см. в разделе «Работа с формулами».

    Для загрузки мультимедиа-контента в бакеты icons-bucket, images-bucket и others-bucket используются соответствующие API-методы (см. раздел «Управление мультимедиа-контентом» документа «Описание API»).

    Интеграция бэкенда продукта с LDAP-сервером

    Интеграция бэкенда продукта с LDAP-сервером позволяет организовать централизованное управление учетными данными пользователей и ресурсами.

    Чтобы включить интеграцию, выполните шаги:

    Настройка подключения к LDAP-серверу

    При установке или последующей настройке продукта в конфигурационном файле application.properties каталога /opt/inno-lcm-core задайте настройки подключения к LDAP-серверу (см. раздел «Предварительная конфигурация бэкенда» документа «Руководство по установке».

    Пример:

    lcm.inventory.ldap.datasource[0].name=lcm-1583.terra.inno.tech
    lcm.inventory.ldap.datasource[0].host=10.6.32.204
    lcm.inventory.ldap.datasource[0].port=636
    lcm.inventory.ldap.datasource[0].username=Administrator@lcm-1583.terra.inno.tech
    lcm.inventory.ldap.datasource[0].password=Welkom123
    lcm.inventory.ldap.datasource[0].ssl=true
    lcm.inventory.ldap.datasource[0].ssl-certificate=/opt/inno-lcm-core/samba_cert.pem
    lcm.inventory.ldap.datasource[0].connect-timeout-millis=10000
    lcm.inventory.ldap.datasource[0].response-timeout=10000
    lcm.inventory.ldap.datasource[0].abandon-on-timeout=true
    lcm.inventory.ldap.datasource[0].allow-concurrent-socket-factory-use=true
    lcm.inventory.ldap.search-page-size=200

    Где:

    Наименование Описание Значение по умолчанию Пример значения

    lcm.inventory.ldap.datasource[0].name

    Название источника данных (например, имя домена)

    lcm-1583.terra.inno.tech

    lcm.inventory.ldap.datasource[0].host

    IP-адрес или сетевое имя контроллера домена

    10.6.32.204

    lcm.inventory.ldap.datasource[0].port

    Порт для соединения по протоколу LDAP. Опциональный параметр

    389; для LDAP over SSL обычно используется порт 636

    636

    lcm.inventory.ldap.datasource[0].username

    Имя пользователя для подключения к домену LDAP-сервера.

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

    • <имя_пользователя>@<имя домена>, например, ivanov@INNO;

    • пользователь в формате LDAP, например, CN=ivanov,CN=Users,DC=inno,DC=local

    Administrator@lcm-1583.terra.inno.tech

    lcm.inventory.ldap.datasource[0].password

    Пароль пользователя для подключения к домену LDAP-сервера

    Welkom123

    lcm.inventory.ldap.datasource[0].ssl

    Параметр, отвечающий за соединение по протоколу LDAP over SSL (LDAPS).

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

    • false — соответствует выключенному протоколу LDAPS, используется обычный LDAP;

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

    • trust-all — соответствует включенному протоколу LDAPS, принимает любые сертификаты без подтверждения.

    Опциональный параметр

    false

    true

    lcm.inventory.ldap.datasource[0].ssl-certificate

    Относительный или абсолютный путь к файлу с сертификатом для подключения через LDAPS. Опциональный параметр

    См. раздел «Получение сертификата SSL для синхронизации пользователей по протоколу LDAPS» документа «Руководство по установке»

    certificate.pem

    /opt/inno-lcm-core/samba_cert.pem

    lcm.inventory.ldap.datasource[0].connect-timeout-millis

    Максимальная длительность подключения к LDAP-серверу в миллисекундах. Значение 0 означает бесконечное ожидание. Опциональный параметр

    10000

    10000

    lcm.inventory.ldap.datasource[0].response-timeout

    Максимальная длительность выполнения запроса к LDAP-серверу в миллисекундах. Значение 0 означает бесконечное ожидание. Опциональный параметр

    10000

    10000

    lcm.inventory.ldap.datasource[0].abandon-on-timeout

    Параметр, который отвечает за освобождение соединения в случае превышения максимальной длительности ожидания запроса. Возможные значения: true и false. Опциональный параметр

    true

    true

    lcm.inventory.ldap.datasource[0].allow-concurrent-socket-factory-use

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

    true

    true

    lcm.inventory.ldap.search-page-size

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

    200

    200

    Нумерация массива lcm.inventory.ldap.datasource начинается с 0.

    Параметры подключения к домену №2 аналогичны параметрам домена №1.

    Пример:

    lcm.inventory.ldap.datasource[1].name=lcm-1584.terra.inno.tech
    lcm.inventory.ldap.datasource[1].host=10.6.32.205
    lcm.inventory.ldap.datasource[1].port=636
    lcm.inventory.ldap.datasource[1].username=Administrator@lcm-1583.terra.inno.tech
    lcm.inventory.ldap.datasource[1].password=Welkom123
    lcm.inventory.ldap.datasource[1].ssl=true
    lcm.inventory.ldap.datasource[1].ssl-certificate=/opt/inno-lcm-core/samba_cert.pem
    lcm.inventory.ldap.datasource[1].connect-timeout-millis=10000
    lcm.inventory.ldap.datasource[1].response-timeout=10000
    lcm.inventory.ldap.datasource[1].abandon-on-timeout=true
    lcm.inventory.ldap.datasource[1].allow-concurrent-socket-factory-use=true

    Настройка импорта учетных данных пользователей 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 в одноименном разделе.

    Интеграция с Microsoft Active Directory

    Раздел содержит описание настройки интеграции модуля бэкенда osmax-core с Microsoft Active Directory, а также дополнительные инструкции, которые могут быть полезны при настройке этой интеграции:

    Создание Service Principal Name (SPN) и keytab-файла для сервисной учетной записи в домене под управлением Microsoft Active Directory

    Service Principal Name (SPN) и keytab-файл используются для аутентификации по протоколу Kerberos.

    Service Principal Name (SPN) или имя принципала — это уникальное имя сервиса, которое привязывается к учетной записи сервиса в домене Microsoft Active Directory. SPN используется для идентификации сервиса, к которому пользователи хотят получить доступ.

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

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

    • имена хостов отдельно для каждого из модулей; например:

      • «Кабинет администратора» — admin-console.osmaks.mycompany.com;

      • «Магазин приложений» — application-shop.osmaks.mycompany.com;

    • имя домена; например: DEMO.OSMAKS.INNO.TECH;

    • имя сервисной учетной записи; например: osmax_backend_svc.

    По умолчанию Microsoft Active directory позволяет поместить в keytab-файл только один SPN, однако этого достаточно для работы единого бэкенд-сервиса с разными вложенными сервисами на различных URL. Поэтому для успешной интеграции в keytab-файл достаточно поместить SPN от модуля «Кабинет администратора», на котором будет успешно функционировать также модуль «Магазин приложений» из состава бэкенд-сервиса Осмакс.

    Отключение устаревших типов шифрования в оснастке контроле домена Active Directory
    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)
    Все команды выполняются в PowerShell из под учетной записи с правами администратора домена.
    1. Для каждого из URL сервисов («Кабинет администратора» и «Магазин приложений») создайте SPN с полным доменным именем, выполнив команду:

      setspn -A HTTP/<host-name>@<domain-name> <service-account>

      Пример команды:

      setspn -A HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH osmax_backend_svc

      Пример вывода:

      Checking domain DC=demo,DC=osmaks,DC=inno,DC=tech
      Registering ServicePrincipalNames for CN=osmax_backend_svc,CN=Users,DC=demo,DC=osmaks,DC=inno,DC=tech
              HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH
      Updated object
    2. Для каждого из URL сервисов («Кабинет администратора» и «Магазин приложений») создайте SPN с коротким именем, выполнив команду:

      setspn -A HTTP/<host-name> <service-account>

      Пример команды:

      setspn -A HTTP/admin-console.osmaks.mycompany.com osmax_backend_svc

      Пример вывода:

      Checking domain DC=demo,DC=osmaks,DC=inno,DC=tech
      Registering ServicePrincipalNames for CN=osmax_backend_svc,CN=Users,DC=demo,DC=osmaks,DC=inno,DC=tech
              HTTP/admin-console.osmaks.mycompany.com
      Updated object
    3. Выполните проверку созданных SPN:

      setspn -L  <service-account>

      Пример команды:

      setspn -L osmax_backend_svc

      Пример вывода:

      Registered ServicePrincipalNames for CN=osmax_backend_svc,CN=Users,DC=demo,DC=osmaks,DC=inno,DC=tech:
      HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH
      HTTP/admin-console.osmaks.mycompany.com
      HTTP/application-shop.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH
      HTTP/application-shop.osmaks.mycompany.com
    4. Выполните проверку атрибутов сервисной учетной записи:

      get-aduser -Identity <service-account> -properties servicePrincipalName

      Пример команды:

      get-aduser -Identity osmax_backend_svc -properties servicePrincipalName

      Пример вывода со значимыми параметрами:

      DistinguishedName : CN=osmax_backend_svc,CN=Users,DC=demo,DC=osmaks,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 : { HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH,  HTTP/admin-console.osmaks.mycompany.com, HTTP/application-shop.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH, HTTP/application-shop.osmaks.mycompany.com}
      SID : S-1-5-21-1700660301-2837393460-1517524629-1105
      Surname :
      UserPrincipalName : HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH
    Создание keytab-файла

    Для дальнейшей интеграции с бэкендом продукта используйте одну из следующих опций:

    • явно укажите в настройках бэкенда имя созданной сервисной учетной записи, домен (realm/область безопасности) и пароль учетной записи;

    • поместите имя сервисной учетной записи, пароль и SPN в файл формата *.keytab и используйте его.

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

    ktpass -princ HTTP/<host-name>@<domain-name> -mapuser <service-account> -pass <service-account-password> -crypto All -ptype KRB5_NT_PRINCIPAL -out <target-path>\<keytab.filename>

    Пример команды:

    ktpass -princ HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH -mapuser lcm_backend_svc -pass "Qwerty123" -crypto All -ptype KRB5_NT_PRINCIPAL -out C:\temp\osmaks_ad.keytab

    Пример вывода:

    Targeting domain controller: dc-winsrv.osmaks.inno.tech
    Using legacy password setting method
    Successfully mapped HTTP/admin-console.osmaks.mycompany.com to osmaks_backend_svc.
    Key created.
    Key created.
    Key created.
    Key created.
    Key created.
    Output keytab to osmaks_ad.keytab:
    Keytab version: 0x502
    keysize 65 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x1 (DES-CBC-CRC) keylength 8 (0x894ca425cb159eb0)
    keysize 65 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x3 (DES-CBC-MD5) keylength 8 (0x894ca425cb159eb0)
    keysize 73 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x17 (RC4-HMAC) keylength 16 (0x59fc0f884922b4ce376051134c71e22c)
    keysize 89 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x12 (AES256-SHA1) keylength 32 (0x555027fe7864fdd549ea517ff1cff1077fb2bf83de7e6e28eeeb6ed66db556bc)
    keysize 73 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.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

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

    klist -K -e -t -k <keytab.filename>

    Пример команды:

    klist -K -e -t -k /opt/inno-osmaks-core/osmaks_ad.keytab

    Пример вывода:

    Keytab name: FILE:/opt/inno-osmaks-core/osmaks_ad.keytab
    KVNO Timestamp         Principal
    ---- ----------------- --------------------------------------------------------
      23 01/01/70 03:00:00 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH (DEPRECATED:des-cbc-crc)  (0x16cdc11ae5f83845)
      23 01/01/70 03:00:00 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH (DEPRECATED:des-cbc-md5)  (0x16cdc11ae5f83845)
      23 01/01/70 03:00:00 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH (DEPRECATED:arcfour-hmac)  (0x59fc0f884922b4ce376051134c71e22c)
      23 01/01/70 03:00:00 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH (aes256-cts-hmac-sha1-96)  (0x57576e3ab78065762d6b450134367b5f40427942827129eb7bcfc679faab1443)
      23 01/01/70 03:00:00 HTTP/admin-console.osmaks.mycompany.com@DEMO.OSMAKS.INNO.TECH (aes128-cts-hmac-sha1-96)  (0x8330205fcc577afc946ac1dfc2c3e7c

    Windows не предоставляет встроенных средств для просмотра содержимого keytab-файла. Однако, если у вас на компьютере установлена версия Java JRE/JDK, используйте утилиту klist.exe, которая входит в комплект программного продукта.

    Например:

    "c:\Program Files\Java\jre1.8.0_181\bin" klist.exe -K -e -t -k C:\temp\osmaks_ad.keytab
    Сохраните файл на сервере, на который будет устанавливаться бэкенд продукта. Путь к файлу необходимо будет указать на этапе его настройки. Также измените права доступа к файлу, предоставив доступ к нему только для пользователя, от имени которого будет запускаться systemd-служба lcm.

    Настройка 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-core для интеграции с Microsoft Active Directory

    Интеграция osmax-core с Microsoft Active Directory выполняется в два этапа:

    Настройка Kerberos-аутентификации

    Предварительное условие:

    На контроллере домена должна быть создана и настроена сервисная учетная запись согласно инструкции Создание Service Principal Name (SPN) и keytab-файла для сервисной учетной записи в домене под управлением Active Directory (см. раздел «Создание 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
      }
    Настройка с использованием прямого указания сервисной учетной записи

    В файле конфигурации бэкенда 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=osmaks_backend_svc
    quarkus.kerberos.service-principal-realm=DEMO.OSMAKS.INNO.TECH
    quarkus.kerberos.service-principal-password=Qwerty123
    Настройка с использованием keytab-файла

    В файле конфигурации бэкенда 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/inno-osmaks-core/osmaks_ad.keytab
    Настройка источника данных LDAP(S) из домена Active Directory

    Предварительное условие:

    Используемый для подключения по протоколу LDAP сервер должен являться одним из контроллеров домена Active Directory.

    Интеграцию можно настроить одним из перечисленных способов:

    Настройка интеграции по протоколу LDAP

    В файле конфигурации бэкенда application.properties задайте следующие параметры конфигурации:

    lcm.inventory.ldap.datasource[i].name=<datasource-alias>
    lcm.inventory.ldap.datasource[i].host=<ldap-server-address>
    lcm.inventory.ldap.datasource[i].port=<ldap-port>
    lcm.inventory.ldap.datasource[i].username=<service-account-name>
    lcm.inventory.ldap.datasource[i].password=<service-account-password>
    lcm.inventory.ldap.datasource[i].ssl=false
    lcm.inventory.ldap.datasource[i].base-dn=<base-DN>

    Пример:

    lcm.inventory.ldap.datasource[0].name=DEMO.OSMAKS.INNO.TECH
    lcm.inventory.ldap.datasource[0].host=192.168.0.1
    lcm.inventory.ldap.datasource[0].port=389
    lcm.inventory.ldap.datasource[0].username=administrator@DEMO.OSMAKS.INNO.TECH
    lcm.inventory.ldap.datasource[0].password=Qwerty123
    lcm.inventory.ldap.datasource[0].ssl=false
    lcm.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-----
    Внесение параметров конфигурации в настройки бэкенда

    В файле конфигурации бэкенда application.properties задайте следующие параметры конфигурации:

    lcm.inventory.ldap.datasource[i].name=<datasource-alias>
    lcm.inventory.ldap.datasource[i].host=<ldap-server-address>
    lcm.inventory.ldap.datasource[i].port=<ldap-port>
    lcm.inventory.ldap.datasource[i].username=<service-account-name>
    lcm.inventory.ldap.datasource[i].password=<service-account-password>
    lcm.inventory.ldap.datasource[i].ssl=true
    lcm.inventory.ldap.datasource[i].ssl-certificate=<path-to-certificate-file>
    lcm.inventory.ldap.datasource[i].base-dn=<base-DN>

    Пример:

    lcm.inventory.ldap.datasource[0].name=lcmtest.lan
    lcm.inventory.ldap.datasource[0].host=10.31.0.29
    lcm.inventory.ldap.datasource[0].port=636
    lcm.inventory.ldap.datasource[0].username=vlev@lcmtest
    lcm.inventory.ldap.datasource[0].password=Qwerty123
    lcm.inventory.ldap.datasource[0].ssl=true
    lcm.inventory.ldap.datasource[0].ssl-certificate=/opt/inno-osmaks-core/ad_ldap_cert.crt
    lcm.inventory.ldap.datasource[0].base-dn="DC=lcmtest,DC=lan"

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

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

    Коллекция устройств — это множество устройств, которое формируется в результате фильтрации всех устройств по атрибутам самих устройств и атрибутам пользователей, ассоциированных с ними.

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

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

    Сбор данных по аппаратной конфигурации устройств

    В рамках инвентаризации в БД продукта импортируются следующие технические характеристики устройств из модуля координации:

    • актуальные данные по аппаратной конфигурации устройства;

    • актуальные данные системного ПО устройства;

    • список фактически развернутого прикладного и системного ПО на устройстве.

    Данные поступают от агентов (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»).

    Журналирование

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

    Для просмотра лог-файлов рекомендуется использовать специальные утилиты по работе с логами, например, Log File Navigator (lnav).

    Для действий, происходящих во внешних системах, например, БД, системы хранения контента, веб-сервера, службы каталогов, события в журнал не регистрируются.

    Параметры лог-файлов

    Оперативный и исторические файлы — это файлы формата JSONL, которые создаются автоматически при установке продукта и хранятся на устройствах, на которых они были сгенерированы, в каталогах:

    • /app/inno-osmax/logs/osmax/core — каталог для хранения файлов бэкенда;

    • /app/inno-osmax/logs/salt/master — каталог для хранения файлов сервера управления (master);

    • /app/inno-osmax/logs/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/inno-osmax/audit.

    Имена файлов задаются согласно шаблонам:

    • шаблон имени оперативного файла:

      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@LCM.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": "lcm-core",
      "ipAddress": "-",
      "hostName": "dev-lcm-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-сервере. Событие запускается по расписанию. Пользователи, устройства, группы сохраняются в БД

    События, связанные с действиями администратора в КА

    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

    Действия администратора, связанные с коллекциями (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)

    Экспорт списка конфигураций

    Действия администратора, связанные со связками коллекция-конфигурация (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)

    Операции с сущностью коллекция-конфигурация:

    • экспорт списка применений конфигураций к коллекциям;

    • получение статусов установки конфигурации по каждой машине из соответствующей коллекции

    Действия администратора, связанные с сессиями (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, указанному в запросе

    Операции по работе с устройствами, физическими или виртуальными, на которых необходимо произвести установку операционной системы:

    • создание устройства;

    • изменение устройства;

    • удаление устройства

    Действия администратора, связанные с модулями 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 — полное доменное имя пользователя

    Запрос для получения удаленного доступа на устройство по выбранному протоколу

    События, связанные с действиями пользователя в МП

    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

    Количество сетевых операций (чтение или запись) для всех подключений в секунду

    Метрики модуля координации (SaltStack)

    SaltStack не предоставляет метрики своего внутреннего состояния, поэтому для отслеживания работы модуля координации (SaltStack) можно использовать только метрики linux-сервера, на котором он будет запущен.

    Метрики Linux

    В таблице ниже перечислены метрики мониторинга и анализа работы серверов и компьютеров под управлением Linux, на которых запускаются модули: lcm-core, lcm-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 за одну секунду.

    Рекомендации по сбору и предоставлению информации о проблеме/ошибке

    В случае возникновения проблемы/ошибки в работе продукта «Служба управления конфигурациями "Осмакс"» сообщите о ней в службу поддержки по электронному адресу lcm_supp@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) на устройстве.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    machine_fqdn

    Имя устройства. Первичный ключ

    text

    Не может быть пустым

    dev-lcm-vm0101.lcm.terra.inno.tech

    state

    Статус установки. Возможные значения:

    • ACTIVE;

    • IN_PROGRESS;

    • ERROR

    text

    Не может быть пустым

    ACTIVE

    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

    groups

    Таблица содержит информацию об LDAP-группах.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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

    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

    datasource

    Источник данных

    text

    Может оставаться пустым

    DC=lcm,DC=terra,DC=inno,DC=tech

    Таблица содержит информацию о ссылках LDAP-групп.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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

    machines

    Таблица содержит информацию об устройствах.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    minion_id

    Идентификатор агента (minion). Значение по умолчанию обычно совпадает с полным доменным именем устройства из поля fqdn. Первичный ключ

    text

    Может оставаться пустым

    DEV-LCM-VM0104.lcm.terra.inno.tech

    node_name

    Имя устройства

    text

    Не может быть пустым

    DEV-LCM-VM0104

    fqdn

    Полное доменное имя устройства

    text

    Не может быть пустым

    dev-lcm-vm0104.lcm.terra.inno.tech

    domain

    Имя домена

    text

    Может оставаться пустым

    lcm.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-LCM-VM0101.lcm.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)

    boolean

    Может оставаться пустым

    true

    minion_is_installed

    Метка установки агента (minion)

    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-LCM-VM0104.lcm.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

    machine_attributes

    Таблица содержит информацию о дополнительных атрибутах устройств, настраиваемых через ПО «Кабинет администратора».

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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

    Таблица содержит информацию о разделе (способе группировки) настраиваемых атрибутов устройства.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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

    Таблица содержит информацию о связях дополнительных (настраиваемых) атрибутов устройств и разделов.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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_disks

    Таблица содержит информацию о дисках.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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_groups

    Таблица содержит информацию о группах устройств.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    machine_fqdn

    Полное доменное имя устройства. Соответствует полю fqdn таблицы machines

    text

    Не может быть пустым

    laptop123.spb.inno.tech

    group_full_name

    Полное название родительской группы. Соответствует полю full_name таблицы groups

    text

    Не может быть пустым

    CN=Performance Monitor Users,CN=Builtin,DC=lcm,DC=terra,DC=inno,DC=tech

    updated_at

    Дата и время обновления записи

    timestamp with time zone

    Не может быть пустым

    2023-09-1808:32:15.045738+00

    machine_collections

    Таблица содержит информацию о коллекции устройств, их свойствах, расписаниях и правилах создания.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    id

    Уникальный идентификатор коллекции. Первичный ключ

    uuid

    Не может быть пустым

    bdbf09a5-631d-4337-8098-38e7b68de6c0

    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

    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

    Может оставаться пустым

    machine_collection_dependencies

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

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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

    Таблица содержит информацию об идентификаторах устройств, составляющих коллекцию. Периодически обновляется, согласно настройкам коллекций.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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

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

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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_networks

    Таблица содержит информацию о сетях устройств.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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

    minion_health_states

    Таблица содержит информацию о сетевом статусе агента (minion).

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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

    users

    Таблица содержит информацию о системных пользователях.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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

    user_attributes

    Таблица содержит информацию о дополнительных (настраиваемых) атрибутах пользователей.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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

    user_attributes_sections

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

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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

    Таблица содержит информацию о связях дополнительных (настраиваемых) атрибутов пользователей и разделов.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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_groups

    Таблица содержит информацию о группах пользователя.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    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_machine_mappings

    Таблица содержит данные сопоставления пользователей и устройств.

    Параметр Описание Тип данных Ограничение Not null Пример значения

    user_fdn

    Полное доменное имя пользователя. Часть составного первичного ключа вместе с параметром machine_fqdn. Может использоваться для связи с таблицей users по полю full_dimain_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

    Информационно-справочные материалы

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

    Подготовка сертификатов для настройки 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-пакет inno-lcm-core, с бэкендом продукта.

    При установке и запуске модуля inno-lcm-core автоматически происходит создание службы lcm.service и запуск бэкенда через встроенный JRE. В данном случае не требуется предпринимать дополнительные действия.

    Версия Java должна быть не ниже 17.

    Для запуска модуля inno-lcm-core через стороний JRE, выполните действия:

    Если вы устанавливаете продукт на Astra Linux, используйте инструкцию:

    1. Установите на сервер, на котором будет производиться запуск, JRE не ниже версии 17.

      Убедитесь, что переменная JAVA_HOME содержит путь к актуальной JRE не ниже версии 17.
    2. Загрузите и распакуйте архив *.tar.gz с deb-пакетом inno-lcm-core.

    3. Перенесите deb-пакет в требуемую директорию, например, выполнив команду:

      dpkg-deb -R inno-lcm.core-<version>.deb inno-lcm-core /opt/inno-lcm-core
    4. Перейдите в директорию с исполняемыми файлами *.jar модуля inno-lcm-core:

      cd /opt/inno-lcm-core/lib/app
    5. Запустите исполняемый файл lcm-app-runner.jar удобным способом, например, выполнив команду:

      java -Dquarkus.config.locations=/opt/inno-lcm-core/application.properties -jar lcm-app-runner.jar

    Если вы устанавливаете продукт на РЕД ОС, используйте инструкцию:

    1. Установите на сервер, на котором будет производиться запуск, JRE не ниже версии 17.

      Убедитесь, что переменная JAVA_HOME содержит путь к актуальной JRE не ниже версии 17.
    2. Загрузите и распакуйте архив *.tar.gz с rpm-пакетом inno-lcm-core.

    3. Перенесите rpm-пакет в требуемую директорию, например, выполнив команду:

      cd /opt/inno-lcm-core
      rpm2cpio inno-lcm-core-<version>.x86_64.rpm | cpio -idmv
    4. Перейдите в директорию с исполняемыми файлами *.jar модуля inno-lcm-core:

      cd /opt/inno-lcm-core/lib/app
    5. Запустите исполняемый файл lcm-app-runner.jar удобным способом, например, выполнив команду:

      java -Dquarkus.config.locations=/opt/inno-lcm-core/application.properties -jar lcm-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-трафика.

    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-сертификатах и других системах безопасности.

    Simple Storage Service (S3)

    Cервис хранения данных в облаке, предоставляемый Amazon Web Services (AWS). Он позволяет хранить и извлекать любой объем данных из любой части мира. S3 используется для хранения статических файлов, таких как изображения, видео, аудио, документы и т.д. Этот сервис также предоставляет возможность управления доступом к данным и автоматического резервного копирования данных. S3 является одним из самых популярных сервисов AWS и широко используется в различных приложениях и сервисах.

    Unified Extensible Firmware Interface (UEFI)

    Интерфейс между операционной системой и микропрограммами, управляющими низкоуровневыми функциями оборудования, его основное предназначение: корректно инициализировать оборудование при включении системы и передать управление загрузчику или непосредственно ядру операционной системы. EFI — технология, предназначенная для замены BIOS которая обеспечивает более быструю загрузку компьютера, улучшенную безопасность и более простую настройку системы. Она также позволяет использовать жесткие диски большого объема и поддерживает новые технологии, такие как Secure Boot, которая обеспечивает защиту от вредоносных программ.

    Автоматизированное рабочее место (АРМ)

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

    Операционная система (ОС)

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

    Программное обеспечение (ПО)

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

    Сокращения