我怎样才能循环遍历支柱顶部文件中的所有小兵?

我怎样才能循环遍历支柱顶部文件中的所有小兵?

我想根据角色向 minion 添加一些通用支柱数据,同时也提供一种根据主机名(minion id)定制每台机器的方法。

在我的 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 %}

它可以工作,但只会打印出“master”。我使用的是无 master salt-ssh,所以我相信这就是为什么名单中的 minions 尚未进入 pillar。我想用另一种方式循环遍历已定义的 minions,但我似乎无法轻松查看 salt 字典中的内容。

{% for key in salt %}
  '{{key}}':
     include:
       - foobar
{% endfor %}

尝试使用类似上述方法进行调试会导致 KeyError

答案1

解决方案不是依赖于在 pillar.top 文件中使用 jinja,而是依赖于使用外部 pillar 插件。

外部 pillar 插件“file_tree”在 root_dir 下查找目录主机和节点组。将 minion_ids 与 root_dir/hosts/ 下的目录匹配,它会将所有 .sls 文件作为 pillar 数据添加到该主机/minion。

#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

https://docs.saltstack.com/en/latest/ref/pillar/all/salt.pillar.file_tree.html#module-salt.pillar.file_tree

相关内容