salt '*' test.ping
Раздел содержит инструкции по настройке и использованию продукта «Служба управления конфигурациями» (LCM).
Модуль координации отвечает за управление и непосредственное применение политик на устройствах. Также осуществляет сбор данных с машин для инвентаризации. Координирование выполняется посредством использования системы SaltStack — платформы с открытым исходным кодом для управления инфраструктурой, которая построена на динамической коммуникационной шине. SaltStack может использоваться для управления конфигурацией для любого набора систем или приложений, для управления данными, для удаленного запуска команд и т.д.
В SaltStack используется модель «мастер-клиент», в рамках которой главный узел Salt Master (далее — Мастер) отправляет команды клиенту — служебному узлу Salt Minion (далее — Миньон), а клиент эти команды выполняет и отправляет свои отчеты о выполнении задач обратно на Мастер.
Связь между Мастером и Миньонами осуществляется по транспортному протоколу ZeroMQ. Канал зашифрован парой открытого и закрытого ключей. Пара ключей генерируется Миньоном, после чего он отправляет свой открытый ключ Мастеру.
В таблице ниже приведены основные понятия, которые используются в системе SaltStack.
| Компонент | Описание |
|---|---|
API |
Позволяет создавать скрипты и приложения, которые могут взаимодействовать с SaltStack и выполнять различные задачи, такие как управление узлами, настройка конфигураций, запуск команд и многое другое. Также используется для интеграции SaltStack с другими инструментами и системами управления |
0MQ (ZeroMQ) |
Библиотека для обмена сообщениями, которая используется в SaltStack для передачи команд и данных между узлами |
Мастер (Master) |
Центральный узел в инфраструктуре управления конфигурацией Salt. Он управляет всеми устройствами в инфраструктуре — Миньонами, отправляет команды на выполнение, хранит конфигурационные данные и предоставляет отчеты о выполнении задач. Мастер также обеспечивает безопасную и защищенную связь между устройствами и сервером управления |
Мастер Мастеров (Master of Masters) |
Компонент SaltStack, который управляет несколькими Мастерами в крупных распределенных средах, координирует их работу и обеспечивает безопасность и целостность данных |
Миньон (Minion) |
Служебный узел, который управляется с помощью Salt. Он может являться физической или виртуальной машиной, контейнером или сетевым устройством. Миньон подключается к Мастеру и получает от него команды для выполнения различных задач, таких как установка программного обеспечения, настройка конфигурации или мониторинг состояния системы. Миньону присваивается свой уникальный идентификатор, который используется для идентификации узла на Мастере |
Синдик (Syndic) |
Компонент SaltStack, который позволяет управлять несколькими узлами, находящимися в разных сетях или дата-центрах как единым целым. Синдик объединяет несколько Мастеров в единую систему управления, что обеспечивает более высокую отказоустойчивость и масштабируемость. Также позволяет использовать различные стратегии для распределения задач между узлами для повышения эффективность работы системы |
Шина событий |
Используется для обмена информацией о событиях, происходящих на узлах. Если на Миньоне происходит какое-либо событие, например установка ПО или изменении конфигурации, он отправляет сообщение в шину событий. Мастер может подписаться на эти сообщения и реагировать на них, выполняя определенные действия. Также шина событий используется для мониторинга состояния системы и быстрого обнаружения проблем |
Хранилище Pillar |
Хранит конфиденциальную информацию на Мастере, например, учетные данные, пароли, ключи доступа и другие секреты, которые не должны быть доступны всем Миньонам. Эта информация может быть использована в составе формул (Formula) для настройки узлов, но она будет доступна только для тех узлов, которые имеют права доступа к Pillar. Хранилище Pillar также может использоваться для хранения других параметров конфигурации, которые могут быть специфичны для каждого узла в инфраструктуре |
Файловый сервер |
Хранит конфигурационные файлы, скрипты, шаблоны и другие файлы, которые необходимы для настройки определенных компонентов инфраструктуры. Также может использоваться для хранения общих файлов, которые могут быть доступны для всех узлов в инфраструктуре. Использование файлового сервера позволяет упростить процесс настройки и обновления компонентов инфраструктуры, а также обеспечить единообразие настроек между различными узлами |
SaltStack поддерживает следующие методы управления Миньонами:
Удаленное выполнение реализовано посредством модуля выполнения SaltStack.
Модуль выполнения SaltStack — это набор связанных функций или методов, которые можно запускать на Миньонах по команде
salt от Мастера для выполнения определенных задач, таких как манипулирование файлами или перезапуск сервисов.
Salt-команды состоят из:
опций команд — дополнительных параметров (например, имя пользователя, пароль, путь к файлу конфигурации и другие настойки), уточняющих, как именно нужно выполнить задачу;
описания цели — Миньонов, на которых должна быть выполнена задача;
функции исполнения — кода на языке Python, который должен быть выполнен на Миньонах;
аргументов функции — значений, которые передаются в функцию при ее вызове.
Мастер задает цели, чтобы указать, какие Миньоны должны выполнить ту или иную команду.
Цель — это группа Миньонов на одном или нескольких Мастерах, к которым применяется Salt-команда.
| Мастером можно управлять так же как Миньоном, и он может быть целью, если для него запущен Миньон. |
Ниже приведен пример простой команды:
salt '*' test.ping
Где:
звездочка (*) — цель, которая определяет всех Миньонов;
test.ping — передает Миньонам команду запустить функцию
test.ping:
test ссылается на модуль исполнения;
ping ссылается на функцию
ping,
содержащуюся в вышеуказанном модуле.
SaltStack позволяет указывать Миньонов в качестве цели по большому количеству критериев:
Пример 1:
salt 'larry1, larry2, curly1' test.ping
Пример 2:
salt 'larry*' test.ping
Пример 3:
salt '*1' test.ping
Помимо основных способов определения целей, существует способ определения конкретного Миньона по идентификатору или нескольких Миньонов по их совместно используемым признакам или характеристикам — параметрам Grains.
SaltStack использует систему параметров Grains для построения статических данных, полученных от Миньонов. Эти данные включают в себя информацию об операционной системе, CPU-архитектуре и др. Система параметров Grains используется SaltStack для доставки данных платформы многим компонентам и пользователям.
Параметры Grains могут быть также статическим набором, что позволяет легко присваивать значения Миньонам для группировки и управления.
Например, параметры Grains назначаются Миньонам, чтобы указать, какая роль или роли возможны для Миньона.
Параметры Grains могут быть установлены в конфигурационном файле Миньона или через функцию
grains.setval.
Пример команды:
salt -G 'os:Ubuntu' test.version
Где:
-G — определяет, что SaltStack будет выполнять команду на узлах, у которых есть заданный групповой тег;
групповой тег определяется по значению переменной grains, которая также должна быть задана на каждом узле;
os:Ubuntu — операционная система Ubuntu, которая определяется по значению переменной os, которая
должна быть задана на каждом узле;
test.version — команда вывода версии Salt, которая должна быть выполнена на всех
узлах, для которых определен тег -G и задана переменная os:Ubuntu.
Использование параметров Grains (статистических данных-фактов, полученных от Миньонов) также возможно за счет использования шаблонов Jinja.
В примере ниже файл состояния /srv/salt/webserver_setup.sls устанавливает Apache и настраивает имя для пакета
в соответствии с операционной системой:
install_apache:
pkg.installed:
{% if grains['os'] == 'CentOS' %}
- name: httpd
{% else %}
- name: apache
{% endif %}
Наряду с удаленным выполнением, SaltStack поддерживает метод управления Миньонами путем объявления состояния (Salt State), в котором он должен находиться.
Состояния определяются в файлах состояний с расширением .sls (Salt State).
С помощью состояний можно автоматизировать рекурсивные и предсказуемые задачи путем создания очереди заданий для выполнения в SaltStack без вмешательства пользователя. В файлы состояний также можно добавлять более сложную условную логику, используя шаблоны Jinja.
Формулы — это наборы состояний, которые вместе настраивают компонент приложения или системы на Миньоне.
Формулы обычно организованы с помощью нескольких различных файлов с расширением .sls. Разделение состояний
формулы по разным файлам может упростить организацию работы. Объявления состояний могут включать и ссылаться
на объявления в других файлах.
В дополнение к ручному запуску состояний Миньонов, SaltStack также поддерживает их автоматический запуск. Для этого используется Top-файл — основной файл конфигурации. В Top-файле определяются соответствия между именами Миньонов и формулами, которые будут применены к этим Миньонам. В данном случае решается задача масштабирования, что позволяет избежать запуска каждого состояния по отдельности и вручную, когда в какой-либо среде существуют сотни файлов состояний, предназначенных для нескольких тысяч Миньонов.
Хранилище Pillar используется для хранения секретных или других конфиденциальных данных, например, данных учетных записей, криптографических ключей и паролей. Также в нем могут храниться несекретные данные, которые нежелательно размещать непосредственно в файлах состояний.
Хранилище Pillar организовано в виде директории, которая содержит файлы состояния — YAML-файлы с конфигурационными данными. Каждый файл соответствует определенному Миньону или группе Миньонов и содержит информацию о параметрах конфигурации для этого Миньона или группы. Для удобства файлы могут быть разбиты на поддиректории.
Top-файл top.sls определяет связь между файлами состояний и Миньонами.
Для применения конфигурации к Миньонам могут использоваться функции — специальные инструменты, которые позволяют генерировать дополнительные данные для использования в конфигурационных файлах. Функции могут быть глобально определены для всех Миньонов, для конкретных Миньонов или для групп Миньонов.
Информация, передаваемая с помощью хранилища Pillar, содержит словарь, который генерируется для целевого Миньона и шифруется с помощью ключа этого Миньона для защищенной передачи данных. Данные хранилища Pillar шифруются для каждого Миньона по отдельности, что позволяет использовать их для хранения конфиденциальных данных, относящихся к конкретному Миньону.
Ниже приведен пример создания системных пользователей для Миньонов с помощью хранилища Pillar:
Сохраните данные пользователей в хранилище Pillar в файле с разрешением
.sls — /srv/Pillar/user_info.sls:
users: thatch: 1000 shouse: 1001 utahdave: 1002 redbeard: 1003
Создайте Top-файл, который будет передавать данные Pillar в Миньоны — /srv/Pillar/top.sls:
base:
'*':
- user_info
Для создания конфигурационных файлов и других текстовых файлов, которые могут содержать динамические данные, используются шаблоны Jinja.
Ниже приведен пример файла состояния /srv/salt/user_setup.sls, в котором используются данные
Pillar из предыдущей секции для создания пользователей системы:
{% for user, uid in Pillar.get('users', {}).items() %}
{{ user }}:
user.present:
- uid: {{ uid }}
{% endfor %}
SaltStack компилирует файл состояния в подобный файл прежде, чем применить его к Миньону:
thatch:
user.present:
- uid: 1000
shouse:
user.present:
- uid: 1001
utahdave:
user.present:
- uid: 1002
redbeard:
user.present:
- uid: 1003
Чтобы выполнить применение состояния по добавлению пользователей для всех Миньонов, используйте команду:
salt '*' state.apply user_setup
Формула SaltStack — это способ описания конфигурации и состояния системы в виде набора файлов и директорий. Формула может использоваться для автоматизации развертывания и управления конфигурацией системы, а также для создания шаблонов для повторного использования.
Большинство формул состоит из нескольких состояний, которые описываются в файле формата YAML. Состояние — это конечное состояние, которого должна достичь система после применения формулы.
Чтобы применить формулу:
Формула должна быть написана и загружена (все входящие в нее файлы и директории) в хранилище S3 на Мастере.
Для формулы должна быть написана спецификация — файл в формате JSON.
Спецификация формулы должна быть загружена в модуль LCM «Кабинет администратора» посредством API.
| Подробная информация содержится в разделе «Работа с формулами». |
Продукт «Служба управления конфигурациями» включает:
Работа с формулами включает этапы:
Для того чтобы применить формулу, загрузите ее на файловый сервер SALT.FILESERVER.S3FS,
используя путь s3://<bucket name>/base/<formula-name>.
Для более подробной информации см. официальную документацию:
описание работы с SALT.FILESERVER.S3FS.
Salt-формула, как и сущность спецификации, как правило, соответствуют определенной структуре.
| Подробное описание структуры спецификации см. в документе «Описание API». |
Спецификация формулы описывается в файле формата JSON с учетом следующих правил:
Необходимо заполнить обязательные поля: displayName, formulaName, description.
В поле pillarProperties необходимо указать параметры для переопределения.
В зависимости от назначения формулы можно переопределить некоторые параметры.
Параметры, доступные для переопределения, описаны в файле формулы формата YAML pillar.example.
|
Пример файла pillar.example для формулы по управлению ярлыками на рабочем столе my-yb-settings-formula:
my-yb-settings:
# Override map.jinja
lookup:
# Переопределите значение map.jinja
policies:
# Задайте параметры управляемых политик
managed:
# Задайте имя файла с управляемыми политиками (.json), который будет помещен в файловую систему Миньона
name: "managed_policies"
# Задайте имя файла с управляемыми политиками (.json) для загрузки на миньон, этот файл может быть помещен как на
# Мастере, так и на сервере HTTP(S) или FTP server. Значение может быть пустой строкой
source: "salt://my-yb-settings/files/managed_policies.json"
# Задайте параметры рекомендуемых политик
recommended:
# SЗадайте имя файла с рекомендуемыми политиками (.json), который будет помещен в файловую систему Миньона
name: "recommended_policies"
# Задайте имя файла с рекомендуемыми политиками (.json) для загрузки на миньон, этот файл может быть помещен как на
# Мастере, так и на сервере HTTP(S) или FTP server. Значение может быть пустой строкой
source: "salt://my-yb-settings/files/recommended_policies.json"
Пример спецификации формулы по управлению ярлыками на рабочем столе my-yb-settings-formula:
{
"displayName": "yb-settingss",
"formulaName": "my-yb-settings",
"description": "Formula for managing yandex-browser settings",
"pillarProperties":
[
{
"description": "Set the name of file with a managed policies(.json) which will be located on a minion file system",
"key": "my-yb-settings.lookup.policies.managed.name",
"value": "managed_policies"
},
{
"description": "Set the managed policies file(.json) to download to the minion, this file can be hosted on either the salt master server, or on an HTTP(S) or FTP server. The value can be empty string",
"key": "my-yb-settings.lookup.policies.managed.source",
"value": "salt://tpl-yb-settings/files/managed_policies.json"
},
{
"description": "Set the name of file with a recommended policies(.json) which will be located on a minion file system",
"key": "my-yb-settings.lookup.policies.recommended.name",
"value": "managed_policies"
},
{
"description": "Set the recommended policies file(.json) to download to the minion, this file can be hosted on either the salt master server, or on an HTTP(S) or FTP server. The value can be empty string",
"key": "my-yb-settings.lookup.policies.recommended.source",
"value": "salt://tpl-yb-settings/files/recommended_policies.json"
}
]
}
После того как вы подготовите JSON-файл со спецификацией формулы,
импортируйте его методом /v1/specifications. Метод описан в документе «Описание API» в разделе «createSpecification».
Формула станет доступной для применения к коллекциям устройств через пользовательский интерфейс.
Готовые формулы — это формулы, загруженные на Мастер и готовые к использованию с настройками по умолчанию без какой-либо
дополнительной конфигурации. При этом, при необходимости, вы можете переопределить в
спецификации параметры, описанные в файле pillar.example (см. описание конкретной формулы).
Такими формулами являются:
Формула SaltStack для установки пакета 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 в Миньон и декодирует данные файла из формата 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-файл репозитория.
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' ]
Формула SaltStack для установки веб-браузера 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 в Миньон и декодирует данные файла из формата 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-файл репозитория.
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' ]
Формула SaltStack для установки ПО 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 в Миньон и декодирует данные файла из формата 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-файл репозитория.
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' ]
Формула SaltStack для установки веб-браузера 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 в Миньон и декодирует данные файла из формата 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-файл репозитория.
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 (см. описание конкретной формулы).
Такими формулами являются:
Формула SaltStack для установки 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).
ca-cert:
# Переопределите значение map.jinja
lookup:
# Укажите параметры сертификатов
certs:
# Укажите список имен файлов сертификатов. Значения не могут быть пустыми
# Значения должны быть указаны в виде списка через запятую
files: [
"my_ca_1.crt",
"my_ca_2.crt",
]
# Укажите полный путь к каталогу, в котором хранятся файлы сертификатов,
# на файловом сервере Salt
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",
]
Извлеките формулу 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
Создайте директорию files и скопируйте в нее необходимые сертификаты.
В качестве примера используются сертификаты ЦС НУЦ Минцифры:
$ ls ./files/
russian_trusted_root_ca_pem.crt russian_trusted_sub_ca_pem.crt
Измените файл map.jinja(словарь со значениями по умолчанию):
Измените значение default.certs.source_dir, указав директорию files, созданную в формуле.
Измените значение default.certs.files, указав в списке имена файлов в директории files.
Оставьте пустым списком значение default.user.usernames — это будет означать, что сертификаты будут установлены
для всех пользователей, для которых создана папка в каталоге /home/).
Удалите все значения, относящиеся к ОС 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') %}
После переопределения значений по умолчанию, следуйте инструкциям по работе с формулой в разделе «Работа формулами».
Формула SaltStack для добавления пользовательского репозитория с Deb-пакетами.
Состояние deb-repo
Мета-состояние (состояние, которое включает в себя другие состояния).
Добавляет и настраивает Deb-репозиторий.
Имеет зависимость от deb-repo.install через список include.
Состояние deb-repo.install
Импортирует репозиторий, если значение name указано в хранилище Pillars (или не пустое по умолчанию).
Состояние deb-repo.key.install
Загружает deb-repo.key_file в Миньон и декодирует данные файла из формата base64 в бинарный.
Состояние deb-repo.clean
Удаляет файл конфигурации репозитория.
Имеет зависимость от deb-repo.key.clean через список include.
Состояние deb-repo.key.clean
Удаляет Key-файл репозитория.
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' ]
Формула SaltStack для установки 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 значения не заданы, формула не будет выполнена, и отобразится соответствующее
уведомление.
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",
]
Формулы-шаблоны используются в качестве примера для создания собственных формул подобного типа. Такими формулами являются:
Формула-шаблон SaltStack для добавления ярлыка приложения, 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 значения не заданы, формула не будет выполнена, и отобразится соответствующее
уведомление.
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) в новую директорию с новым названием (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
Измените файл состояний install.sls (создание ярлыков):
Рекомендуется для соблюдения уникальности придерживаться именования вида:
formula-name-state-name-other-state-name-module-function-some-id. Например, ID состояния для создания symlink
будет выглядеть как: my-shortcut-install-file-symlink-{{ username }}-symlink.
|
Измените значение аргумента contents для функции из состояния:
my-shortcut-install-file-managed-{{ username }}-application (ярлык для приложения).
Например, имя (Name), запускаемую программу (Exec) и иконку ярлыка (Icon).
Измените значение аргумента 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 %}
В файле состояний 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 %}
Измените файл map.jinja(словарь со значениями по умолчанию):
Измените имя ключа для словаря в хранилище Pillar, используемого для динамического переопределения значений по умолчанию.
Рекомендуется для соблюдения уникальности придерживаться именования вида: formula-name:lookup. Например,
my-shortcut:lookup.
|
Измените значение application.name.
Измените значение link.name.
Измените значения 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') %}
| После того как формула будет написана, следуйте инструкциям по работе с формулой в разделе «Работа с формулами». |
Формула-шаблон SaltStack для выполнения скриптов.
Состояние tpl-script
Мета-состояние (состояние, которое включает в себя другие состояния).
Выполняет скрипт. Имеет зависимость от tpl-script.run через список include.
Состояние tpl-script.run
Выполняет скрипт test_script.sh, если файл /tmp/test_script-unless отсутствует в файловой системе Миньона.
The running script creates /tmp/test_script-unless file with TEST_ENV shell variable content.
Состояние tpl-script.clean
Удаляет файл /tmp/test_script-unless на Миньоне.
tpl-script:
# Переопределите значение map.jinja
lookup:
# Задайте имя для файла скрипта, который хранится в {{ tpldir }}/files/
file_name: "test_script.sh"
# Задайте оболочку, которая будет использоваться для выполнения скрипта
shell: "/bin/sh"
# Задайте переменные env
env:
test_env: "HELLO WORLD!"
Написание формулы типа tpl-script-formula
Скопируйте формулу-шаблон (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
Переименуйте файл ./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"
Измените файл состояний run.sls (запуск скрипта):
Измените ID состояний.
Удалите аргумент env и его значения.
Измените значение аргумента 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 %}
Измените файл состояний clean.sls (удаление проверочного файла):
Измените ID состояний.
Измените значение аргумента 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 %}
Измените файл map.jinja(словарь со значениями по умолчанию):
Измените имя ключа для словаря в хранилище Pillar, используемого для динамического переопределения значений по умолчанию.
Измените значение file_name, указав имя созданного скрипта.
Удалите 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') %}
| После того как формула будет написана, следуйте инструкциям по работе с формулой в разделе «Работа с формулами». |
Формула-шаблон SaltStack для управления настройками веб-браузера Yandex.
Состояние tpl-yb-settings
Мета-состояние (состояние, которое включает в себя другие состояния).
Устанавливает ссылку на Web Mail.
Имеет зависимость от tpl-yb-settings.install через список include.
Состояние tpl-yb-settings.install
Загружает управляемые и рекомендуемые файлы политик в файловую системы Миньона.
Состояние tpl-yb-settings.clean
Удаляет управляемые и рекомендуемые файлы политик из файловой системы Миньона.
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) в новую директорию с новым названием (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
Измените файл ./files/managed_policies.json, добавив в него
политики,
которые нужно принудительно применить на устройствах пользователей.
В качестве примера рассмотрим добавление нескольких разрешающих и запрещающую по умолчанию все доступы URL политик:
{
"URLBlocklist": ["*"],
"URLAllowlist": [
"browser://policy",
"duckduckgo.com",
"https://yandex.ru/pogoda",
"file://*"
]
}
Измените файл ./files/recommended_policies.json, добавив в него
политики:
{
"HomepageLocation": "https://duckduckgo.com"
}
В файле состояний 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 %}
В файле состояний 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 %}
Измените файл map.jinja(словарь со значениями по умолчанию):
Измените имя ключа для словаря в хранилище Pillar, используемого для динамического переопределения значений по умолчанию.
Измените значения 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') %}
| После того как формула будет написана, следуйте инструкциям по работе с формулой в разделе «Работа с формулами». |
Формула-шаблон SaltStack для управления настройками веб-браузера Yandex.
Состояние tpl-yb-settings
Мета-состояние (состояние, которое включает в себя другие состояния).
Устанавливает ссылку на Web Mail.
Имеет зависимость от tpl-yb-settings.install через список include.
Состояние tpl-yb-settings.install
Загружает управляемые и рекомендуемые файлы политик в файловую системы Миньона.
Состояние tpl-yb-settings.clean
Удаляет управляемые и рекомендуемые файлы политик из файловой системы Миньона.
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) в новую директорию с новым названием (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
Измените файл ./files/managed_policies.json, добавив в него
политики,
которые нужно принудительно применить на устройствах пользователей.
В качестве примера рассмотрим добавление нескольких разрешающих и запрещающую по умолчанию все доступы URL политик:
{
"URLBlocklist": ["*"],
"URLAllowlist": [
"browser://policy",
"duckduckgo.com",
"https://yandex.ru/pogoda",
"file://*"
]
}
Измените файл ./files/recommended_policies.json, добавив в него
политики:
{
"HomepageLocation": "https://duckduckgo.com"
}
В файле состояний 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 %}
В файле состояний 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 %}
Измените файл map.jinja(словарь со значениями по умолчанию):
Измените имя ключа для словаря в хранилище Pillar, используемого для динамического переопределения значений по умолчанию.
Измените значения 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') %}
| После того как формула будет написана, следуйте инструкциям по работе с формулой в разделе «Работа с формулами». |
Формула-шаблон SaltStack для управления членством в локальных группах.
Состояние tpl-group-members
Мета-состояние (состояние, которое включает в себя другие состояния).
Создает и управляет локальными настройками групп.
Имеет зависимость от tpl-group-members.install через список include.
Состояние tpl-group-members.install
Создает group_name (если эта группа отсутствует в Миньоне) и изменяет настройки группы.
если для параметра change установлено значение add, список пользователей будет добавлен в качестве новых членов группы;
если для параметра change установлено значение del, пользователи будут исключены из состава группы;
если для параметра change установлено значение "", заменяет существующих членов группы списком новых участников.
Состояние tpl-group-members.clean
Удаляет группу group_name на Миньоне.
tpl-group-members:
# Переопределите значение map.jinja
lookup:
# Задайте имя группы
group_name: "sudo"
# Задайте id для группы;
# Если оставить поле пустым, группе автоматически будет присвоен следующий свободный идентификатор.
gid: ""
# Укажите, является ли группа системной группой.
# Это опция '-r' в команде 'groupadd`
system: false
# Задайте действие для списка пользователей: добавить (`add`), удалить(`del`) или заменить ("").
change: ""
# Задайте список пользователей
users: [
"user1",
"user2",
]
Скопируйте формулу-шаблон (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
В файле состояний 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 %}
В файле состояний 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 %}
Измените файл map.jinja(словарь со значениями по умолчанию). Например, добавьте в группу sudo некоторых
пользователей, для этого:
Измените имя ключа для словаря в хранилище Pillar, используемого для динамического переопределения значений по умолчанию.
Измените значение group_name на sudo.
Измените значение change на add (добавить в группу).
Измените значение 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') %}
| После того как формула будет написана, следуйте инструкциям по работе с формулой в разделе «Работа с формулами». |
Модуль инвентаризации предназначен для сбора и хранения данных о пользователях и устройствах компании, а также для работы с группами (коллекциями) автоматизированных рабочих мест (далее — АРМ), которые могут быть сформированы по различным признакам.
Коллекция АРМ — это множество АРМ, которое формируется в результате фильтрации всех АРМ по атрибутам самих АРМ и атрибутам пользователей, ассоциированных с ними.
| Подробнее о создании и обновлении коллекций АРМ см. в разделе «Создание и обновление коллекций АРМ». |
Модуль инвентаризации обеспечивает следующие способы загрузки атрибутов в коллекции АРМ:
Модуль инвентаризации позволяет импортировать следующие технические характеристики АРМ с платформы SaltStack:
актуальные данные по аппаратной конфигурации АРМ;
актуальные данные системного ПО АРМ;
список фактически развернутого прикладного и системного ПО на АРМ.
Данные поступают от Миньонов с помощью механизма Grains на узел Мастер согласно расписанию, заданному в конфигурации SaltStack.
Мастер публикует их в виде события в канале REST endpoint Events, который прослушивается LCM.
Каждое из таких событий содержит технические характеристики по одному из Миньонов, которые актуализируются в БД модуля инвентаризации:
| Параметр в АРМ из ответа SALT | Параметр в LCM БД | Описание |
|---|---|---|
|
|
Идентификатор Миньона Salt |
|
|
Короткое имя АРМ (NetBIOS name) |
|
|
Полное доменное имя АРМ |
|
|
Набор доменных адресов IPv4 |
|
|
Имя домена |
|
|
Количество ядер процессора |
|
|
Модель процессора |
|
|
Архитектура процессора |
|
|
Объем ОЗУ |
|
|
Общий физический размер свопинга |
|
|
Физические адреса сетевого оборудования (MAC) |
|
|
Шлюз Ipv4 |
|
|
Сетевые интерфейсы IPv4 |
|
|
Сетевые интерфейсы IPv6 |
|
|
Диски SSD |
|
|
Диски HDD |
|
|
Серийный номер устройства |
|
|
Ядро ОС |
|
|
Релиз ядра ОС |
|
|
Код дистрибутива ОС |
|
|
Описание версии ОС |
|
|
Код версии ОС |
|
|
Архитектура ОС |
|
|
Полное наименование ОС |
|
|
Мажорная версия релиза ОС |
|
|
Версия релиза ОС |
|
|
Версия Salt на Миньоне |
|
|
Имя Мастера Salt |
|
|
Версия Python для Salt на Миньоне |
|
|
Дата и время актуализации характеристик |
Импорт учетных данных пользователей сервера LDAP выполняется согласно расписанию, которое задается в конфигурационных параметрах.
После синхронизации в БД
в таблицах users и user_groups
появляется информация о пользователях домена и их группах:
| Параметр на LDAP-сервере | Параметр в БД LCM | Описание |
|---|---|---|
objectGUID |
users.id |
Уникальный идентификатор пользователя |
sAMAccountName |
users.login |
Имя пользователя для входа в систему (Логин) |
userPrincipalName |
users.domain_full_name |
Полное доменное имя пользователя (например, |
userPrincipalName (подстрока) |
users.domain |
Имя домена в короткой форме записи (например, |
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 в файле application.properties:
lcm.inventory.job.sync-users.cron.expr=*/5 * * * * ?
Значением данного параметра выступает
выражение cron-like.
Выражение cron-like относится к формату временных интервалов, которые используются в системе планирования задач cron
в операционной системе Unix. Этот формат представляет собой строку, которая содержит шесть или семь полей,
разделенных пробелами или табуляцией. В каждом поле задано значение времени или даты,
когда задача должна быть выполнена.
Поля могут содержать любые разрешенные значения, а также различные комбинации разрешенных специальных
символов для этого поля.
Описание полей:
| Поле | Обязательность заполнения | Допустимые значения | Допустимые специальные символы |
|---|---|---|---|
Секунды |
Да |
|
|
Минуты |
Да |
|
|
Часы |
Да |
|
|
День месяца |
Да |
|
|
Месяц |
Да |
|
|
День недели |
Да |
|
|
Год |
Нет |
|
|
Описание специальных символов:
| Значение | Расшифровка | Описание | ||
|---|---|---|---|---|
|
Все значения |
Используется для выбора всех значений в поле. Например, если в поле Минуты указано значение |
||
|
Нет специального значения |
Используется, когда не важно, какой это должен быть день месяца или день недели.
Например, если в поле День месяца указано значение |
||
|
Используются для указания диапазона. Например, если в поле Часы указано значение |
|||
|
Используется для поочередного указания значений. Например, если в поле День недели указано значение |
|||
|
Используется для указания приращения. Например, если в поле Секунды указано значение |
|||
|
От англ. — last (последний) |
Используется для указания значений:
Также может использоваться для указания смещения от последнего дня месяца, например,
|
||
|
От англ. — weekday (рабочий день) |
Используется для указания ближайшего рабочего дня недели (понедельник-пятница) к указанному дню. Например, если
в поле День месяца указано значение Можно объединить символ
|
||
|
Используется для указания n-ного дня месяца. Например, если в поле День недели указано значение
|
Примеры выражений:
* * * ? * * — задача должна выполняться каждую секунду;
0 * * ? * * — задача должна выполняться каждую минуту;
0 */2 * ? * * — задача должна выполняться каждую четную минуту;
0 15,30,45 * ? * * — задача должна выполняться каждый час в 15, 30 и 45 минут;
0 0 * * * — задача должна выполняться в полночь каждый день;
0 0 12 ? * 5#3 — задача должна выполняться каждый месяц в третий четверг месяца с 00:00 до 12:00.
Больше примеров вы можете найти, перейдя по ссылке.
В качестве значения параметра по умолчанию используется 0 0 12 * * ?, что соответствует ежедневному запуску задания в 00:00:00.
Для выключения задания синхронизации используется значение указанного параметра off:
lcm.inventory.job.sync-users.cron.expr=off
Синхронизация пользователей может быть осуществлена из нескольких доменов LDAP-сервера и выполняется последовательно.
Для задания параметров подключения к каждому из доменов заполните следующий набор параметров
группы lcm.inventory.ldap.datasource[i] в файле application.properties:
# максимальное количество пользователей для одной итерации синхронизации
lcm.inventory.ldap.search-page-size=500
# Блок параметров подключения к домену номер #1 (нумерация с 0)
# условное обозначение домена
lcm.inventory.ldap.datasource[0].name=domain_alias1
# IP адрес или сетевое имя контроллера домена
lcm.inventory.ldap.datasource[0].host=192.168.0.1
# Порт для соединения по протоколу LDAP. Опционален, по умолчанию имеет значение `389`.
# Для LDAP over SSL обычно используют порт 636
lcm.inventory.ldap.datasource[0].port=636
# Имя пользователя, которое будет использовано для подключения к домену MS AD.
# Может иметь следующие форматы
# 1) <имя_пользователя>@<имя домена>, например ivanov@INNO
# 2) Пользователь в формате LDAP, например CN=ivanov,CN=Users,DC=inno,DC=local
lcm.inventory.ldap.datasource[0].username=username1@domain1_name
# Пароль пользователя для подключения к домену MS AD.
lcm.inventory.ldap.datasource[0].password=user_password
# Параметр отвечающий за соединение по протоколу LDAP over SSL (LDAPS).
# Возможные значения:
# 1) false - соответствует выключенному протоколу LDAPS, используется обычный LDAP
# 2) true - соответствует включенному протоколу LDAPS, требует наличие файла с сертификатом для SSL соединения (задается отдельным параметром)
# 3) trust-all - соответствует включенному протоколу LDAPS, принимает любые сертификаты без подтверждения
# Опционален, по умолчанию имеет значение `false`
lcm.inventory.ldap.datasource[0].ssl=true
# Относительный или абсолютный путь к файлу с сертификатом для подключения через LDAPS.
# Опционален, по умолчанию имеет значение `certificate.pem`
# Формат файла с сертификатом SSL и способ его получения описаны ниже
lcm.inventory.ldap.datasource[0].ssl-certificate=/home/username/cert1.pem
# Базовое имя домена для поиска пользователей в формате записи LDAP
lcm.inventory.ldap.datasource[0].base-dn=DC=domain_name1,DC=local
# Максимальная длительность подключения к LDAP серверу в миллисекундах. Значение `0` означает бесконечное ожидание.
# Опционален, по умолчанию имеет значение `10000`
lcm.inventory.ldap.datasource[0].connect-timeout-millis
# Максимальная длительность выполнения запроса к LDAP серверу в миллисекундах. Значение `0` означает бесконечное ожидание.
# Опционален, по умолчанию имеет значение `10000`
lcm.inventory.ldap.datasource[0].response-timeout
# Параметр отвечает за освобождение соединения в случае превышения максимальной длительности ожидания запроса.
# Возможные значения `true` и `false`
# Опционален, по умолчанию имеет значение `true`
lcm.inventory.ldap.datasource[0].abandon-on-timeout
# Указывает, разрешать ли использование экземпляра фабрики сокетов (который может совместно использоваться несколькими соединениями)
# для одновременного создания нескольких сокетов. Как правило, реализации фабрики сокетов являются потокобезопасными
# и могут создавать несколько соединений одновременно в отдельных потоках, но известно, что это не так в некоторых
# реализациях виртуальных машин (например, фабрики сокетов SSL в IBM JVM). Этот параметр может использоваться, чтобы указать,
# следует ли разрешить одновременные попытки создания сокета (что может обеспечить лучшую и более стабильную производительность,
# особенно в случаях, когда попытка подключения не удалась из-за тайм-аута) или предотвратить (что может быть необходимо для
# непотокового реализации фабрики сокетов)
# Возможные значения `true` и `false`
# Опционален, по умолчанию имеет значение `true`
lcm.inventory.ldap.datasource[0].allow-concurrent-socket-factory-use
# Блок параметров подключения к домену номер #2
lcm.inventory.ldap.datasource[1].name=domain_alias2
lcm.inventory.ldap.datasource[1].host=192.168.0.2
lcm.inventory.ldap.datasource[1].port=389
lcm.inventory.ldap.datasource[1].username=username2@domain2_name
lcm.inventory.ldap.datasource[1].ssl=false
lcm.inventory.ldap.datasource[1].base-dn=DC=domain_name2,DC=local
# Блок параметров подключения к домену номер #3
lcm.inventory.ldap.datasource[2].name=domain_alias2
#...
Модуль инвентаризации позволяет импортировать в БД LCM информацию о связи пользователей
и устройств посредством загрузки данных из CSV-файла через
пользовательский интерфейс администратора (см. документ «Руководство администратора»).
CSV-файл должен быть определенного формата: содержать 3 столбца и в качестве разделителя
использовать точку с запятой (;):
<operation>;<user_name>@<user_domain>;<fqdn>
Где:
Параметр первого столбца operation должен содержать одну из следующих команд
(перечислены в порядке приоритета выполнения):
R — (от англ.: remove) удалить связь между пользователем и устройством.
RA — (от англ.: remove all) удалить все связи, существующие по указанному пользователю/устройству.
Требуется заполнить или логин@домен пользователя, или полное доменное имя машины.
A — (от англ.: add) создать или обновить связь между пользователем и устройством.
Параметр второго столбца user_name должен содержать логин пользователя в указанном домене.
Например, aspushkin или fmdostoevskiy.
Параметр второго столбца user_domain должен содержать домен пользователя и
соответствовать полному имени домена пользователя, выгруженному с сервера LDAP.
Например, inno.tech или saratov.vtb.ru.
Парамер третьего столбца fqdn должен содержать полное доменное имя АРМ,
выгруженного из SaltStack, например: kassa256.vtb.ru.
При создании CSV-файла важно учитывать регистр имен устройств. Например, Laptop1.sochi.vtb.ru и
LAPTOP1.sochi.vtb.ru будут интерпретированы по-разному. Полное имя устройства должно абсолютно совпадать с реальным
именем.
|
Пример заполнения файла CSV:
A;username1@domain.name;notebook1.domain.name A;username1@domain.name;notebook2.domain.name A;username2@domain.name;notebook1.domain.name RA;username1@domain.name; RA;username2@domain.name; RA;;notebook1.domain.name R;username2@domain.name;notebook2.domain.name
Строки, не соответствующие описанному формату записи, будут проигнорированы.
Записи в файле обрабатываются пакетами (батчами) по очереди и последовательно с группировкой по типу операции. Записи группируются по типам в следующем порядке:
Удаление конкретного пользователя с конкретного АРМ.
Удаление связок по идентификатору пользователя.
Удаление связок по идентификатору АРМ.
Добавление связок.
После завершения импорта список проигнорированных строк и количество успешно загруженных будут возвращены на пользовательский интерфейс администратора.
Коллекции АРМ могут быть статическими и динамическими.
| Имя коллекции не может быть пустым. При создании коллекции АРМ необходимо указать уникальное имя. Коллекция с невалидным именем не будет создана и сохранена. |
Список АРМ в статических коллекциях обновляется только при создании или вручную. Для создания/обновления такой коллекции администратор выполняет SQL-запрос к базе данных через пользовательский интерфейс (подробнее см. «Руководство администратора»).
SQL-запрос должен иметь тип select и в списке извлекаемых колонок содержать столбец minion_id.
|
При создании SQL-запроса нельзя использовать следующие операторы:
|
| При использовании некорректного SQL-запроса коллекция не будет создана и сохранена. |
Запрос с использованием базовой информации по пользователям и устройствам:
select m.minion_id from users u join user_machine_mappings umm on umm.user_fdn = u.full_domain_name join machines m on m.fqdn = umm.machine_fqdn where <...>
Запрос с использованием подробной информации по устройствам:
select m.minion_id from machines m left join machine_disks md on md.minion_id = m.minion_id left join machine_networks mn on mn.minion_id = m.minion_id where <...>
Запрос с использованием всей информации, доступной в инвентаризации:
select m.minion_id from users u join user_machine_mappings umm on umm.user_fdn = u.full_domain_name join machines m on m.fqdn = umm.machine_fqdn left join machine_disks md on md.minion_id = m.minion_id left join machine_networks mn on mn.minion_id = m.minion_id where <...>
Список АРМ в динамических коллекциях обновляется по заданному расписанию, а также при создании и редактировании.
Расписание обновления представляет собой выражение cron-like для фреймворка
Quartz, которое задается
администратором посредством пользовательского интерфейса с помощью графических компонентов (подробнее см. «Руководство администратора»).
| При использовании некорректного запроса коллекция не будет создана и сохранена. |
Раздел содержит описание таблиц базы данных, которые используются для корректной работы модуля инвентаризации, включая описание полей и связей между ними:
Содержит информацию о системных пользователях.
| Параметр | Описание | Тип данных | Ограничение Not null | Возможные значения |
|---|---|---|---|---|
|
Уникальный идентификатор пользователя. Первичный ключ |
|
Не может быть пустым |
|
|
Имя пользователя для входа в систему (Логин) |
|
Не может быть пустым |
|
|
Имя домена в короткой форме записи |
|
Не может быть пустым |
|
|
Полное доменное имя пользователя в формате <логин_пользователя@имя_домена> |
|
Не может быть пустым |
|
|
Адрес электронной почты пользователя |
|
Может оставаться пустым |
|
|
Имя пользователя |
|
Может оставаться пустым |
|
|
Фамилия пользователя |
|
Может оставаться пустым |
|
|
Общее имя пользователя |
|
Может оставаться пустым |
|
|
Отображаемое имя пользователя |
|
Может оставаться пустым |
|
|
Должность пользователя |
|
Может оставаться пустым |
|
|
Отдел, в котором работает пользователь |
|
Может оставаться пустым |
|
|
Компания, в которой работает пользователь |
|
Может оставаться пустым |
|
|
Указывает, является ли пользователь активным или нет |
|
Не может быть пустым |
|
|
Дата и время создания записи |
|
Не может быть пустым |
|
|
Дата и время обновления записи |
|
Не может быть пустым |
|
Содержит информацию о группах пользователя.
| Параметр | Описание | Тип данных | Ограничение Not null | Возможные значения |
|---|---|---|---|---|
|
Уникальный идентификатор пользователя. Часть составного первичного ключа вместе с параметром |
|
Не может быть пустым |
|
|
Наименование группы пользователя. Часть составного первичного ключа вместе с параметром |
|
Не может быть пустым |
|
|
Дата и время обновления записи |
|
Не может быть пустым |
|
Содержит информацию об устройствах.
| Параметр | Описание | Тип данных | Ограничение Not null | Возможные значения |
|---|---|---|---|---|
|
Идентификатор Миньона SaltStack. Значение по умолчанию обычно совпадает с полным доменным именем АРМ из поля |
|
Не может быть пустым |
|
|
Имя устройства |
|
Не может быть пустым |
|
|
Полное доменное имя АРМ |
|
Не может быть пустым |
|
|
Имя домена |
|
Может оставаться пустым |
|
|
Набор доменных адресов IPv4 |
|
Не может быть пустым |
|
|
Шлюз Ipv4 |
|
Может оставаться пустым |
|
|
Модель процессора |
|
Не может быть пустым |
|
|
Архитектура процессора |
|
Не может быть пустым |
|
|
Количество ядер процессора |
|
Не может быть пустым |
|
|
Объем ОЗУ в мегабайтах |
|
Не может быть пустым |
|
|
Общий физический размер свопинга в мегабайтах |
|
Не может быть пустым |
|
|
Серийный номер устройства |
|
Может оставаться пустым |
|
|
Ядро ОС |
|
Не может быть пустым |
|
|
Релиз ядра ОС |
|
Не может быть пустым |
|
|
Код версии ОС |
|
Не может быть пустым |
|
|
Полное наименование ОС |
|
Не может быть пустым |
|
|
Описание версии ОС |
|
Не может быть пустым |
|
|
Код дистрибутива ОС |
|
Не может быть пустым |
|
|
Архитектура ОС |
|
Не может быть пустым |
|
|
Мажорная версия релиза ОС |
|
Не может быть пустым |
|
|
Версия релиза |
|
Не может быть пустым |
|
|
Имя мастера SaltStack |
|
Не может быть пустым |
|
|
Версия SaltStack на Миньоне |
|
Не может быть пустым |
|
|
Версия Python для SaltStack на Миньоне |
|
Не может быть пустым |
|
|
Дата и время создания записи |
|
Не может быть пустым |
|
|
Дата и время обновления записи |
|
Не может быть пустым |
|
Содержит информацию о сетях устройств.
| Параметр | Описание | Тип данных | Ограничение Not null | Возможные значения |
|---|---|---|---|---|
|
Идентификатор Миньона SaltStack. Внешний ключ на поле |
|
Не может быть пустым |
|
|
Имя сети |
|
Не может быть пустым |
|
|
MAC-адрес |
|
Может оставаться пустым |
|
|
Сетевые интерфейсы IPv4 (может быть указано несколько значений через запятую) |
|
Может оставаться пустым |
|
|
Сетевые интерфейсы IPv6 (может быть указано несколько значений через запятую) |
|
Может оставаться пустым |
|
|
Дата и время обновления записи |
|
Не может быть пустым |
|
Содержит информацию о дисках.
| Параметр | Описание | Тип данных | Ограничение Not null | Возможные значения |
|---|---|---|---|---|
|
Идентификатор Миньона SaltStack. Внешний ключ на поле |
|
Не может быть пустым |
|
|
Имя диска |
|
Не может быть пустым |
|
|
Тип диска. Возможные значения: |
|
Может оставаться пустым |
|
|
Общий объем памяти на диске |
|
Может оставаться пустым |
|
|
Используемый объем памяти на диске |
|
Может оставаться пустым |
|
|
Свободное место на диске |
|
Может оставаться пустым |
|
|
Тип файловой системы |
|
Может оставаться пустым |
|
|
Имя устройства |
|
Может оставаться пустым |
|
|
Дата и время обновления записи |
|
Не может быть пустым |
|
Содержит данные сопоставления пользователей и устройств.
| Параметр | Описание | Тип данных | Ограничение Not null | Возможные значения |
|---|---|---|---|---|
|
Полное доменное имя пользователя. Часть составного первичного ключа вместе с параметром |
|
Не может быть пустым |
|
|
Полное доменное имя АРМ. Часть составного первичного ключа вместе с параметром |
|
Не может быть пустым |
|
|
Дата и время создания записи |
|
Не может быть пустым |
|
|
Дата и время обновления записи |
|
Не может быть пустым |
|
В случае возникновения проблемы/ошибки в работе продукта «Служба управления конфигурациями» (LCM):
Предоставьте максимально детальное описание того, в чем заключается проблема/ошибка и в каких условиях она возникла:
какие действия выполнялись перед возникновением проблемы/ошибки;
какой результат ожидалось получить;
к какому фактическому результату привели выполненные действия;
если проблема возникла при использовании пользовательского интерфейса, если есть техническая возможность, сделайте скриншот/видеозапись экрана, на котором видно некорректное поведение приложения.
Попробуйте воспроизвести проблему/ошибку по составленному описанию.
Если проблема/ошибка возникла один раз и более не воспроизводилась, предоставьте логи на момент возникновения проблемы/ошибки, а также за 30 минут до и после ее возникновения без изменения существующего уровня логирования (см. раздел «Снятие логов»).
Направьте всю собранную информацию контактному лицу.
Логи для продукта снимаются отдельно:
При некорректной работе пользовательского интерфейса LCM соберите консольные и HAR-логи (логи взаимодействия браузера и сервера во время загрузки веб-страницы) в браузере.
Пример сбора логов для Яндекс Браузера:
Нажмите F12 на клавиатуре, чтобы открыть окно инструментов разработчика.
Перейдите на вкладку Сеть.
Нажмите на кнопку Запись сетевого журнала.
Воспроизведите проблему.
Нажмите на кнопку Остановить запись сетевого журнала.
Нажмите на правую кнопку мыши в сетевой таблице и выберите Сохранить все как HAR с контентом.
Выберите папку для сохранения логов и нажмите на кнопку Сохранить.
HAR-логи будут собраны и сохранены в указанной папке.
Нажмите F12 на клавиатуре, чтобы открыть окно инструментов разработчика.
Перейдите на вкладку Консоль.
Нажмите правой кнопкой мыши на любой строке и выберите в контекстном меню Сохранить страницу как.
Выберите папку для сохранения логов и нажмите на кнопку Сохранить.
Консольные логи будут собраны и сохранены в указанной папке.
Пример сбора логов для Chrome:
Нажмите F12 на клавиатуре, чтобы открыть окно инструментов разработчика.
Перейдите на вкладку Network.
Нажмите на кнопку
, чтобы очистить сетевой журнал.
Выберите чек-боксы Preserve log и Disable cache.
Воспроизведите проблему.
Нажмите
, чтобы сохранить HAR-логи.
Выберите папку для сохранения логов и нажмите на кнопку Сохранить.
HAR-логи будут собраны и сохранены в указанной папке.
Нажмите F12 на клавиатуре, чтобы открыть окно инструментов разработчика.
Перейдите на вкладку Console.
Нажмите правой кнопкой мыши в любой области окна и выберите в контекстном меню Save as.
Выберите папку для сохранения логов и нажмите на кнопку Сохранить.
Консольные логи будут собраны и сохранены в указанной папке.
Пример сбора логов для Firefox:
Нажмите F12 на клавиатуре, чтобы открыть окно инструментов разработчика.
Перейдите на вкладку Сеть.
Воспроизведите проблему.
Нажмите на правую кнопку мыши в сетевой таблице после воспроизведения проблемы и выберите Сохранить все как HAR.
Выберите папку для сохранения логов и нажмите на кнопку Сохранить.
HAR-логи будут собраны и сохранены в указанной папке.
Нажмите F12 на клавиатуре, чтобы открыть окно инструментов разработчика.
Перейдите на вкладку Консоль.
Нажмите правой кнопкой мыши на любой строке и выберите в контекстном меню Экспортировать видимые сообщения в и выберите Файл.
Выберите папку для сохранения логов и нажмите на кнопку Сохранить.
Консольные логи будут собраны и сохранены в указанной папке.
Сбор логов серверной части включает сбор логов бэкенда продукта и логов внешних подсистем (например, SaltStack, LDAP-сервер, MS Active Directory). Подробнее о сборе логов внешних подсистем см. в официальной документации.
При некорректной работе серверной части LCM соберите логи из лог-файла, путь к которому задается
в параметре quarkus.log.file.path.
Путь к файлу: path/application.log (подробнее см.
руководство по установке раздел «Параметры конфигурации бэкенда продукта»).
Cлужба каталога, которая используется в среде Windows Server для управления пользователями, компьютерами и другими ресурсами в доменной сети. Она обеспечивает централизованное управление доступом к ресурсам, авторизацию и аутентификацию пользователей, а также хранение информации о пользователях, группах и других объектах в сети. С помощью службы AD можно настраивать политики безопасности, управлять правами доступа к файлам и папкам, а также создавать и удалять пользователей и группы в сети.
Формат упаковки программного обеспечения для операционной системы Debian и ее производных, таких
как Ubuntu. Deb-пакет содержит программу или библиотеку, а также информацию о зависимостях и
конфигурации. Он может быть установлен с помощью менеджера пакетов, например, apt-get или dpkg.
Deb-пакеты облегчают установку и обновление программного обеспечения в системе, а также
позволяют управлять зависимостями между пакетами.
Файлы, которые содержат записи о том, как браузер взаимодействует с сервером во время загрузки веб-страницы. Эти логи могут быть использованы для анализа производительности веб-страницы и выявления проблем, таких как медленная загрузка или ошибки при загрузке. Har-логи могут быть созданы с помощью инструментов разработчика веб-браузера или специальных программ для записи HTTP-трафика.
Набор библиотек, предназначенных для разработки защищённых кросс-платформенных клиентских и серверных приложений. Приложения, построенные при помощи NSS, могут использовать и поддерживать SSLv3, TLS и многие другие стандарты безопасности.
База данных, используемая для хранения сертификатов и ключей шифрования в системах, использующих библиотеку Network Security Services (NSS).
Cервис хранения данных в облаке, предоставляемый Amazon Web Services (AWS). Он позволяет хранить и извлекать любой объем данных из любой части мира. S3 используется для хранения статических файлов, таких как изображения, видео, аудио, документы и т.д. Этот сервис также предоставляет возможность управления доступом к данным и автоматического резервного копирования данных. S3 является одним из самых популярных сервисов AWS и широко используется в различных приложениях и сервисах.
Программно-технический комплекс, предназначенный для автоматизации деятельности сотрудника из состава пользователей автоматизированных систем.
Программное обеспечение, управляющее компьютерами (включая микроконтроллеры) и позволяющее запускать на них прикладные программы. Предоставляет программный интерфейс для взаимодействия с компьютером, управляет прикладными программами и занимается распределением предоставляемых ресурсов, в том числе между прикладными программами. В широком смысле под операционной системой понимается совокупность ядра операционной системы и работающих поверх него программ и утилит, предоставляющих интерфейс для взаимодействия пользователя с компьютером.
Программа или множество программ, используемых для управления компьютером.