Хранилище Pillars
Хранилище 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
Для создания конфигурационных файлов и других текстовых файлов, которые могут содержать динамические данные, используются шаблоны 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