SaltStack:根据角色安装软件包

SaltStack:根据角色安装软件包

我想根据服务器角色安装 Nagios 插件。下面的解决方案有效,但我相信有更优雅/更推荐的方法来实现相同的效果 - 任何帮助都将不胜感激。我不喜欢合并语句和嵌套for循环中的显式字典。

支柱:

nagios:
  nrpe:
    allowed_hosts: 127.0.0.1
    plugins:
      all:
        - nagios-plugins-disk
        - nagios-plugins-load
        - nagios-plugins-procs
        - nagios-plugins-swap
      db:
        - nagios-plugins-mysql

状态:

{% set plugins = salt['grains.filter_by']({
'db': { 'db': salt['pillar.get']('nagios:nrpe:plugins:db') }
}, grain='role', merge={ 'all': salt['pillar.get']('nagios:nrpe:plugins:all') }) %}

nrpe_plugins_all:
  pkg.installed:
    - pkgs:
{%- for plugin in plugins.values() %}
{%- for pkg in plugin %}
    - {{ pkg }}
{%- endfor %}
{%- endfor %}

答案1

另一种方法是使用 Grains 来识别哪些主机应该有 Nagios 和各种 Nagios 插件:

Minion Grains(/etc/salt/grains)

roles:
 - nagios
 - nagios_mysql

州顶级文件

base:
  'G@roles:nagios':
    - nagios/npre_install_basic
  'G@roles:nagios_mysql':
    - nagios/npre_install_mysql

Nagios 状态文件

npre_install_basic:
  pkg.installed:
    - pkgs:
        - nagios-plugins-disk
        - nagios-plugins-load
        - nagios-plugins-procs
        - nagios-plugins-swap
    - require:
      - pkg: nagios

Nagios 状态文件

npre_install_mysql:
  pkg.installed:
    - pkgs:
        - nagios-plugins-mysql
    - require:
      - pkg: nagios

相关内容