Хранилище Pillars

Хранилище 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 %}

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