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

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

Версия 1.4.0

Содержание

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

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

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

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

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

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

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

    Добавление формулы в 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-файл с конфигурацией, импортируйте его в кабинете администратора, используя метод /v1/specifications. Метод описан в документе «Описание 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' ]

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

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

    Интеграции

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

    Интеграция с сервером LDAP

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

    1. Задайте настройки подключения к LDAP-серверу в конфигурационном файле application.properties.

    2. Задайте настройки импорта учетных данных пользователей c сервера LDAP в БД LCM в конфигурационном файле application.properties.

    3. Выполните настройку импорта данных устройств c сервера LDAP в БД LCM в пользовательском интерфейсе администратора (см. раздел «Загрузка данных из 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.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.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 в БД LCM

    После того как вы зададите настройки подключения к LDAP-серверу, также в конфигурационном файле application.properties задайте параметр настройки расписания импорта пользователей с сервера LDAP в БД LCM.

    Пример:

    lcm.inventory.ldap.datasource[0].query-prefix=CN=Users
    lcm.inventory.ldap.datasource[0].base-dn=DC=lcm-1583,DC=terra,DC=inno,DC=tech
    lcm.inventory.job.sync-users.cron.expr=0 0 12 * * ?
    lcm.inventory.ldap.search-page-size=500

    Где:

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

    lcm.inventory.ldap.datasource[0].query-prefix

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

    Итоговое значение предиката поиска пользователей:

    "${cm.inventory.ldap.datasource[].query-prefix},${lcm.inventory.ldap.datasource[].base-dn}"

    CN=Users

    lcm.inventory.ldap.datasource[0].base-dn

    Базовое имя домена для поиска пользователей в формате записи LDAP

    DC=lcm-1583,DC=terra,DC=inno,DC=tech

    lcm.inventory.ldap.search-page-size

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

    200

    200

    lcm.inventory.job.sync-users.cron.expr

    Cron-выражение в формате Quartz для настройки запуска синхронизации пользователей LDAP. Значением параметра lcm.inventory.job.sync-users.cron.expr выступает cron-выражение в формате Quartz.

    0 0 12 * * ? (соответствует ежедневному запуску задания в 00:00:00)

    0 0 12 * * ?

    После того как вы выполните эти настройки, в БД LCM в таблицы users и user_groups по заданному расписанию будут импортироваться следующие данные о пользователей домена и их группах:

    Параметр на LDAP-сервере Параметр в БД LCM Описание

    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

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

    Отключение импорта

    Чтобы отключить импорт, установите для параметра lcm.inventory.job.sync-users.cron.expr значение off:

    lcm.inventory.job.sync-users.cron.expr=off
    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.

    Больше примеров вы можете найти, перейдя по ссылке.

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

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

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

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

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

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

    В рамках инвентаризации в БД продукта «Служба управления конфигурациями» импортируются следующие технические характеристики устройств из модуля координации:

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

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

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

    Данные поступают от агентов (minions) с помощью механизма Grains на сервер управления (master) согласно заданному расписанию.

    Сервер управления (master) публикует их в виде события в канале REST endpoint Events, который прослушивается LCM. Каждое из таких событий содержит технические характеристики по одному из агентов (minions), которые актуализируются в БД:

    Параметр устройства из ответа модуля координации Параметр в LCM БД Описание

    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»).

    Таблицы базы данных

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

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

    Указывает, является ли пользователь активным или нет

    bool

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

    true

    raw_groups

    Группы, в которых состоит пользователь

    text

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

    CN=Users,DC=vlev

    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

    Таблица user_groups

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

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

    user_id

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

    uuid

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

    efbfbd2b-7417-d089-efbf-bd4befbfbdef

    group_name

    Наименование группы пользователя. Часть составного первичного ключа вместе с параметром user_id

    text

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

    CN=Администраторыдомена,CN=Users,DC=vlev,DC=test

    updated_at

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

    timestamp with time zone

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

    2023-09-1808:32:15.045738+00

    Таблица machines

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

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

    minion_id

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

    text

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

    lcm-salt-minion-01-u

    node_name

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

    text

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

    lcm-salt-minion-01-u

    fqdn

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

    text

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

    lcm-salt-minion-01-u

    domain

    Имя домена

    text

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

    vlev.local

    domain_ip

    Набор доменных адресов IPv4

    text

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

    172.19.0.3

    ip4_gw

    Шлюз Ipv4

    text

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

    172.19.0.1

    cpu_model

    Модель процессора

    text

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

    11thGenIntel®Core™i5-1135G7@2.40GHz

    cpu_arc

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

    text

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

    x86_64

    cpu_num

    Количество ядер процессора

    int

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

    8

    ram

    Объем ОЗУ в мегабайтах

    int

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

    31940

    swap

    Общий физический размер свопинга в мегабайтах

    int

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

    8192

    serial_number

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

    text

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

    PF2SAAH7

    kernel

    Ядро ОС

    text

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

    Linux

    kernel_release

    Релиз ядра ОС

    text

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

    5.10.16.3-microsoft-standard-WSL2

    os_codename

    Код версии ОС

    text

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

    jammy

    os_fullname

    Полное наименование ОС

    text

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

    Ubuntu

    os_description

    Описание версии ОС

    text

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

    jammy

    distrib_codename

    Код дистрибутива ОС

    text

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

    Ubuntu 22.04.3 LTS

    os_arch

    Архитектура ОС

    text

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

    amd64

    os_major_release

    Мажорная версия релиза ОС

    text

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

    22

    os_release

    Версия релиза

    text

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

    22.04

    salt_master

    Имя сервера управления (master)

    text

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

    lcm-salt-master

    salt_version

    Версия SaltStack на агенте (minion)

    text

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

    3005.1

    python_version

    Версия Python для SaltStack на агенте (minion)

    text

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

    3.9.16.final.0

    bios_uefi

    Указывает, включена ли опция UEFI в BIOS

    bool

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

    bios_version

    Версия BIOS

    text

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

    F8CN53WW(V2.16)

    bios_vendor_name

    Имя производителя BIOS

    text

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

    LENOVO

    bios_uuid

    Идентификатор BIOS

    text

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

    9d751d07-f736-11eb-810c-7c8ae191c2ee

    bios_release_date

    Дата выпуска BIOS

    text

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

    11/12/2020

    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_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

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

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

    30562713600

    used_space

    Используемый объем памяти на диске

    bigint

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

    7084609536

    free_space

    Свободное место на диске

    bigint

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

    21901991936

    file_system

    Тип файловой системы

    text

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

    ext4

    device

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

    text

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

    /dev/sda1

    updated_at

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

    timestamp with time zone

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

    2023-09-18 10:15:48.519831+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

    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

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

    В случае возникновения проблемы/ошибки в работе продукта «Служба управления конфигурациями» (LCM):

    1. Предоставьте максимально детальное описание того, в чем заключается проблема/ошибка и в каких условиях она возникла:

      • какие действия выполнялись перед возникновением проблемы/ошибки;

      • какой результат ожидалось получить;

      • к какому фактическому результату привели выполненные действия;

      • если проблема возникла при использовании пользовательского интерфейса, если есть техническая возможность, сделайте скриншот/видеозапись экрана, на котором видно некорректное поведение приложения.

    2. Попробуйте воспроизвести проблему/ошибку по составленному описанию.

    3. Если проблема/ошибка возникла один раз и более не воспроизводилась, предоставьте логи на момент возникновения проблемы/ошибки, а также за 30 минут до и после ее возникновения без изменения существующего уровня логирования (см. раздел «Снятие логов»).

    4. Направьте всю собранную информацию контактному лицу.

    Снятие логов

    Логи для продукта снимаются отдельно:

    Сбор логов пользовательского интерфейса

    При некорректной работе пользовательского интерфейса LCM соберите консольные и 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. Выберите папку для сохранения логов и нажмите на кнопку Сохранить.

    Консольные логи будут собраны и сохранены в указанной папке.

    Сбор логов серверной части

    Сбор логов серверной части включает сбор логов бэкенда продукта и логов внешних подсистем (например, SaltStack, LDAP-сервер, MS Active Directory). Подробнее о сборе логов внешних подсистем см. в официальной документации.

    При некорректной работе серверной части LCM соберите логи из лог-файла, путь к которому задается в параметре quarkus.log.file.path.

    Путь к файлу: path/application.log (подробнее см. руководство по установке раздел «Параметры конфигурации бэкенда продукта»).

    Глоссарий

    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).

    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, которая обеспечивает защиту от вредоносных программ.

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

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

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

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

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

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

    Сокращения