Хранилище Pillar

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

Хранилище Pillar организовано в виде директории, которая содержит файлы состояния — YAML-файлы с конфигурационными данными. Каждый файл соответствует определенному агенту или группе агентов и содержит информацию о параметрах конфигурации для этого агента или группы. Для удобства файлы могут быть разбиты на поддиректории.

Top-файл top.sls определяет связь между файлами состояний и агентами.

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

Информация, передаваемая с помощью хранилища Pillar, содержит словарь, который генерируется для целевого агента и шифруется с помощью ключа этого агента для защищенной передачи данных. Данные хранилища Pillar шифруются для каждого агента по отдельности, что позволяет использовать их для хранения конфиденциальных данных, относящихся к конкретному агенту.

Ниже приведен пример создания системных пользователей для агентов с помощью хранилища Pillar:

  1. Сохраните данные пользователей в хранилище Pillar в файле с разрешением .sls —  /srv/Pillar/user_info.sls:

    users:
      thatch: 1000
      shouse: 1001
      utahdave: 1002
      redbeard: 1003
  2. Создайте 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