Хранилище Pillar
Хранилище 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 %}
Модуль координации компилирует файл состояния в подобный файл прежде, чем применить его к агенту:
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