一、grains
Grains是SaltStack的一个组件,存放在SaltStack的minion端。
当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。
由于grains是静态数据,因此不推荐经常去修改它。
应用场景:
信息查询,可用作CMDB。
在target中使用,匹配minion。
在state系统中使用,配置管理模块。
[root@server1 salt]# salt server2 grains.ls #列出所有key
[root@server1 salt]# salt server2 grains.ls | wc -l
[root@server1 salt]# salt server2 grains.item shell
[root@server1 salt]# salt server2 grains.item username
1、定义grains-在命令端
(1)minion端配置文件中定义(静态)
[root@server2 salt]# vim minion
grains:
roles: apache
[root@server2 salt]# systemctl restart salt-minion.service
[root@server1 salt]# salt server2 grains.item roles #查看创建成功
server2:
----------
roles:
apache
[root@server1 salt]# salt -G 'roles:apache' test.ping #查看角色匹配
server2:
True
(2)在命令端创建/ec/salt/grains文件
不改主配置文件不需要重启但需要同步
[root@server4 salt]# cat grains
roles:
nginx
[root@server1 salt]# salt server4 saltutil.sync_grains
server4:
[root@server1 salt]# salt server4 grains.item roles
server4:
----------
roles:
nginx
2、定义grains-在server端(静态)
[root@server1 _grains]# vim my_grain.py
[root@server1 _grains]# cat my_grain.py
def my_grain():
grains = {}
grains['roles'] = 'nginx'
grains['hello'] = 'world'
return grains
[root@server1 _grains]# salt '*' saltutil.sync_grains
[root@server1 _grains]# salt '*' grains.item hello
server4:
----------
hello:
world
server2:
----------
hello:
world
3、在top文件中匹配:
vim /srv/salt/top.sls
base:
‘roles:apache’:
- match: grain
- apache.install
二、pillar:不需要同步直接应用
pillar和grains一样也是一个数据系统,但是应用场景不同。
pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用户名密码等),而且可以指定某一个minion才可以看到对应的信息。
pillar更加适合在配置管理中运用。
1、定义
[root@server1 srv]# mkdir pillar
[root@server1 srv]# cd pillar/
[root@server1 pillar]# cat web.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
git: git
{% elif grains['fqdn'] == 'server4' %}
webserver: nginx
{% endif %}
port: 80
[root@server1 pillar]# cat top.sls
base:
'*':
- web
2、引用
命令行中匹配:
#salt -I 'roles:apache' test.ping
state系统中使用:
#vim /srv/salt/apache.sls
apache:
pkg.installed:
- name: {{ pillar['package'] }}