在https://github.com/saltstack-formulas中,grains.filter_by模块使用的比较频繁,先了解它的意思,然后理解大牛们使用它的用意。
grains.filter_by啥意思?参照官网:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.grains.html#salt.modules.grains.filter_by
作用:在给定的字典中查找当前操作系统并返回结果
简单理解下:可以根据不同环境(例如:操作系统),来获取的这个适合这个操作系统的变量的值,意思就是我给centos和Debian同时定义了一套字典,类似
Debian:
server: mysql-server
client: mysql-client
service: mysql
python: python-mysqldb
debconf_utils: debconf-utils
dev: libmysqlclient-dev
config:
file: /etc/mysql/my.cnf
sections:
client:
port: 3306
socket: /var/run/mysqld/mysqld.sock
CentOS:
server: mysql-server
client: mysql
service: mysqld
python: MySQL-python
dev: mysql-devel
config_directory: /etc/my.cnf.d/
这样,根据客户端属于哪种环境(例如:操作系统),就会套用到上述yaml模板中的值
grains.filter_by咋用呢?grains.filter_by语法
{% set apache = salt['grains.filter_by']( { ... 列表区域 }, merge=salt['pillar.get']('apache:lookup') 参数区域) %}
set apache #设置了一个字典的对象,名字是apache,也就是创建了一个apache的对象
列表区域
就是yaml语法,设置字典
官方解释:lookup_dict 一个字典,key来自于grains,包含一个或多个值匹配,通过匹配系统有关进行选定。例如,一个key可以是一个操作系统的名称,该值可以在特定的操作系统中的包的名称。
参数区域:
- grain-- 我们要从客户端grains到那个key来区分环境,这就要说明下,默认值:os_family
- merge-- 字典
- default-- 默认值,默认选择哪个key
- base-- 选择lookup_dict合并在这最后合并字典合并。这允许每个案件的共同的价值观被收集在基地和粮食选择字典和词典被合并。默认设置
举个栗子1:
{% set apache = salt['grains.filter_by']({
'Debian': {'pkg': 'apache2', 'srv': 'apache2'},
'RedHat': {'pkg': 'httpd', 'srv': 'httpd'},
}, default='Debian') %}
myapache:
pkg.installed:
- name: {{ apache.pkg }}
service.running:
- name: {{ apache.srv }}
上述例子可以看到,使用