一、Grains工具:(静态)
Saltstack里的Grains功能,讲的是minion端的静态变量,在master端通过Grains可以获得minion对应的变量值。
1.打开server2的grains功能,并制定其角色
[root@server2 ~]# cd /etc/salt/
[root@server2 salt]# vim minion
grains:
roles:
- apache
[root@server2 salt]# systemctl restart salt-minion
效果查看
[root@server1 salt]# salt server2 grains.item roles ##可以获得对应的变量值
server2:
----------
roles:
- apache
2.直接在默认saltstack中写grains文件,并指定角色
[root@server3 ~]# cd /etc/salt/
[root@server3 salt]# cat grains
roles: nginx
[root@server3 salt]# systemctl start salt-minion
效果查看
[root@server1 apache]# salt server3 grains.item roles
server3:
----------
roles:
nginx
3.在主节点统一指定角色
[root@server1 salt]# mkdir /srv/salt/_grains
[root@server1 salt]# cd /srv/salt/_grains
[root@server1 _grains]# vim my_grains.py
#!/usr/bin/env python
def my_grains():
grains = {'foo':'bar','hello':'world'}
grains['salt'] = 'stack'
return grains
效果查看
[root@server1 _grains]# salt server3 saltutil.sync_grains
[root@server1 _grains]# salt '*' grains.item roles
server2:
----------
roles:
- apache
server3:
----------
roles:
nginx
[root@server1 _grains]# salt server2 grains.item hello
server2:
----------
hello:
world
[root@server1 salt]# salt -G 'roles:nginx' test.ping
server3:
True
[root@server1 salt]# salt -G 'roles:apache' test.ping
server2:
True
4.脚本中引入grains角色
[root@server1 salt]# vim top.sls
base:
'roles:apache':
- match: grain
- apache.service
'roles:nginx':
- match: grain
- nginx.service
测试查看
[root@server1 salt]# salt server[2,3] state.highstate
二.pillar工具的配置(动态)
1.主节点上开启pillar功能
[root@server1 salt]# vim /etc/salt/master
843 pillar_roots:
844 base:
845 - /srv/pillar
[root@server1 salt]# mkdir /srv/pillar
[root@server1 salt]# systemctl restart salt-master ##生效
2.脚本中引入角色
[root@server1 pillar]# vim vars.sls ##指定角色安装指定服务
{% if grains['fqdn'] == 'server2' %}
webserver: apache
state: master
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
state: backup
{% endif %}
[root@server1 pillar]# vim top.sls
base:
'*':
- vars ##执行此目录下的所有.vars脚本
[root@server1 pillar]# salt '*' pillar.items
server2:
----------
state:
master
webserver:
apache
server3:
----------
state:
backup
webserver:
nginx
测试:
[root@server1 pillar]# salt server2 test.ping
server2:
True
[root@server1 pillar]# salt '*' saltutil.refresh_pillar
server2:
True
server3:
True
[root@server1 pillar]# salt -I 'state:master' test.ping
server2:
True
[root@server1 pillar]# salt -I 'state:backup' test.ping
server3:
True