我想根据服务器角色安装 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