什么是grains工具?
Salt附带一接口,用于获取有关底层系统的信息。Salt的grains主要存储静态数据,用来收集minion端的一些数据,比如:操作系统,域名IP地址,内核,操作系统类型,内存或者其他系统属性。
Minion端在启动时会读取grains数据,如果有新的grains数据需要重启minion服务或者在master端使用salt命令进行刷新
一.grains工具的使用
方法1:
之前用saltstack自动化部署apache服务(server2)和nginx服务(server3)。
内容详见博客地址:
https://blog.csdn.net/chaos_oper/article/details/91446525
1.server2的roles为apache
[root@server2 ~]# cd /etc/salt/
[root@server2 salt]# vim minion
120 grains:
121 roles:
122 - apache
[root@server2 salt]# systemctl restart salt-minion
2.server3的roles为nginx
[root@server3 salt]# vim minion
120 grains:
121 roles:
122 - nginx
[root@server3 salt]# systemctl restart salt-minion
3.在master端查看minion的角色
[root@server1 salt]# salt '*' grains.item roles
方法2:
1.在master端/srv/salt目录下创建_grains目录
[root@server1 salt]# mkdir _grains
2.在_grains目录下创建python模块脚本
[root@server1 salt]# cd _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
3.刷新
[root@server1 _grains]# salt '*' saltutil.sync_grains
4.在minion端查看推送
[root@server2 salt]# cd /var/cache/salt/minion/files/base/
[root@server2 base]# ls
apache _grains top.sls
[root@server2 base]# cd _grains/
[root@server2 _grains]# ls
my_grains.py
[root@server2 _grains]# cat my_grains.py
#!/usr/bin/env python
def my_grains():
grains= { 'foo':'bar','hello':'world'}
grains['salt'] = 'stack'
return grains
5.测试
[root@server1 _grains]# salt '*' grains.item hello
[root@server1 _grains]# salt '*' grains.item salt
[root@server1 _grains]# salt -G 'roles:apache' test.ping
[root@server1 _grains]# salt -G 'roles:nginx' test.ping
[root@server1 _grains]# salt -G 'salt:stack' test.ping
6.修改top.sls
[root@server1 salt]# vim top.sls
base:
'roles:apache':
- match: grain
- apache.service
'roles:nginx':
- match: grain
- nginx.service
7.高级方式推送
[root@server1 salt]# salt ‘*’ state.highstate
8.测试
[root@server1 salt]# salt server2 grains.item fqdn
[root@server1 salt]# salt server2 grains.item os
二.在Pillar中存储静态数据
- Pillar是Salt用来分发全局变量到所有minions的一个接口。Pillar data的管理类似于Salt State Tree。
- 存储敏感数据。不像是state tree, pillar只对匹配类型的minion有效。 这使它为特定的minion存储敏感数据非常有用.
1.声明master pillar
Salt Master服务器维护了一个pillar_roots 设置 ,和在Salt文件服务器上使用的file_roots结构对应。和Salt 文件服务器类似,master配置文件中的 pillar_roots选项也是基于环境映射到目录。Pillar数据被映射到基于top文件匹配到的Minion上,top 文件是和state top文件一样的方式列出的。Salt pillar可以使用和标准的top 文件同样的匹配器类型。
在master端主配置文件将pillar工具打开:
vim /etc/salt/master
pillar_roots:
base:
- /srv/pillar
修改完配置文件后重启:systemctl restart salt-master
2. 在 /srv/创建目录:mkdir pillar
3. 进入到创建的目录,创建web目录,在web目录中创建文件:vim vars.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
state: master
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
state: backup
{% endif %}
4.在piller目录下,创建top.sls文件
base:
'*':
- web.vars
5.刷新:salt ‘*’ saltutil.refresh_pillar
6.测试: