Я хотел бы добавить некоторые общие данные столбов миньонам на основе ролей, но также предложить способ настройки каждой машины на основе имени хоста (идентификатора миньона).
В моем файле pillar / top.sls у меня есть
base:
'*':
- pkgs/common-ubuntu-pkg
- fail2ban/config
'runit:True':
- runit/package
'is_virtual:True':
- users/vmuser
'role:database':
- match: grain
- mysql/defaults
А потом я хочу добавить что-то вроде этого:
{% for host in pillar %}
'{{host}}':
include:
- {{host}}/passwords
{% endfor %}
Что работает, но выводит только «мастер». Я использую соль-ssh без мастера, поэтому я считаю, что миньоны в реестре еще не находятся в столпе. Я хотел бы по-другому перебирать определенные миньоны, но, похоже, я не могу легко понять, что находится в словаре соли.
{% for key in salt %}
'{{key}}':
include:
- foobar
{% endfor %}
Попытка отладить что-то подобное приведенному выше приводит к ошибке KeyError
Решение основывалось не на использовании jinja в файле pillar.top, а на использовании внешнего модуля pillar.
Плагин внешней опоры file_tree ищет в root_dir каталоги hosts и nodegroups. Сопоставляя minion_ids как каталоги в root_dir / hosts /, он добавит все файлы .sls в качестве данных столба к этому хосту / миньону.
#in /etc/salt/master
ext_pillar:
- file_tree:
root_dir: /srv/salt/my-pillars/
follow_dir_links: False
raw_data: False
#on disk
/srv/salt/my-pillars/hosts/mydbserver/passwords.sls