nodegroups
在实际使用过程中,根据业务需求,需对 minion 进行分组。
配置
- 在 master 配置文件 /etc/salt/master中 或
- 在 master 配置文件增加一行 default_include: master.d/*.conf 在/etc/salt/master/master.d 中配置
nodegroups:
group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
group2: 'G@os:Debian and foo.domain.com'
指定nodegroup
命令行
sudo salt -N group1 test.ping
top.sls
base:
group1:
- match: nodegroup
- webserver
混合匹配
混合匹配是指在操作时使用多种预定义的匹配方法。默认匹配规则是glob. 在使用混合匹配时,需要先匹配前指定letter, 当前支持的“letter”有:
Letter | 匹配类型 | 例子 | Alt Delimiter? |
---|---|---|---|
G | Grains 单个匹配 | G@os:Ubuntu | Yes |
E | Minion id正则匹配 | E@web\d+.(dev|qa|prod).loc | No |
P | Grains 正则匹配 | P@os:(RedHat|Fedora|CentOS) | Yes |
L | minions列表 | L@minion1.example.com,minion3.domain.com or bl*.domain.com | No |
I | Pillar 单个匹配 | I@pdata:foobar | Yes |
J | Pillar 正则匹配 | J@pdata:^(foo|bar)$ | Yes |
S | 子网/IP地址匹配 | S@192.168.1.0/24 or S@192.168.1.100 | No |
R | Range cluster匹配 | R@%foo.bar | No |
匹配可以加入and,or,not
命令行
例如,想匹配所有minion中主机名(minion id)以webserv开头并且运行在Debian系统上或者minion的主机名(minion id)匹配正则表达式web-dc1-srv.*:
salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.ping
top.sls
base:
'webserv* and G@os:Debian or E@web-dc1-srv.*':
– match: compound
– webserver
Grains匹配
- Grains 单个匹配
- Grains 正则匹配
设置Grains
在 minion 配置文件 /etc/salt/minion 或 /etc/salt/minion/minion.d 中配置
#minion
grains:
roles:
- webserver
- memcache
deployment: datacenter4
cabinet: 13
cab_u: 14-15
#master
nodegroups:
group1: 'P@roles:(webserver|memcache)' #Grains 正则匹配
group2: 'G@roles:webserver' #Grains 单个匹配
minion id匹配
需要设置 minion id,默认是用 hostname
#master
nodegroups:
group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com' #minions列表匹配
group2: 'E@web\d+\.(dev|qa|prod)\.loc' #Minion id正则匹配
设置minion id
最好是在服务启动之前设置好minion id,尽量避免服务启动后再修改minion id
- 修改minion配置文件
- 在机器初始化的时候设置hostname
修改minion id
#停止salt-minion服务
service salt-minion stop
#删除salt-minion公钥文件
rm /etc/salt/pki/minion/minion.pub
rm /etc/salt/pki/minion/minion.pem
#修改新minion_id
echo NewId > /etc/salt/minion_id
## 或
修改minion配置文件
#master上删除旧的key
salt-key -d oldId
#minion端重新启动salt-minion
service salt-minion start
Pillar 匹配
需要在 minion 上设置 pillar , minion 需要缓存 pillar ,在 minion 配置文件配置
minion_pillar_cache: True
#master
nodegroups:
group1: 'I@pdata:foobar' #Pillar 单个匹配
group2: 'J@pdata:^(foo|bar)$' #Pillar 正则匹配
IP地址匹配
个别的IP,可能需要手动添加
#master
nodegroups:
group1: 'S@192.168.1.0/24 or S@192.168.1.100'
###