Grains
-
Grains是saltstack组件中非常重要的组件之一,它用来记录minion的系统信息(操作系统、域名、IP地址、内核信息、操作系统类型、内存信息以及其他更多的系统信息)。
-
Grain收集的信息是静态的,在minion第一次启动时采集数据(除非下次重起,否则数据不会变化)。
[root@server1 apache]# salt '*' grains.items # 列出主机的详细信息,可用于资产管理
[root@server1 apache]# salt '*' grains.item os # 列出所有主机的系统版本
server3:
----------
os:
RedHat
server2:
----------
os:
RedHat
salt '*' grains.item fqdn_ip4 # 列出所有主机的IP地址
- 自定义grains
- 可在minion端设置
[root@server1 apache]# salt '*' grains.item roles
server3:
----------
roles:
server2:
----------
roles:
在minion端的/etc/salt/minion文件中打开grains的注释
[root@server2 ~]# vim /etc/salt/minion
grains:
roles:
- apache
Grain收集的信息是静态的,在minion第一次启动时采集数据,所以我们需要重启Minion
[root@server2 ~]# systemctl restart salt-minion
[root@server1 apache]# salt '*' grains.item roles
server3:
----------
roles:
server2:
----------
roles:
- apache
- 在master端设置
[root@server1 salt]# ls
apache _grains nginx #在/srv/salt下新建目录_grains
[root@server1 salt]# cd _grains/
[root@server1 _grains]# cat 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
server3:
- grains.my_grains
#将master地grains定义刷到server3上,此时server3上
[root@server3 salt]# cd /var/cache/salt/minion/
[root@server3 minion]# tree
.
├── accumulator
├── extmods
│ └── grains
│ ├── my_grains.py
│ └── my_grains.pyc
├── files
│ └── base
│ ├── _grains
│ │ └── ==my_grains.py==
│ ├── nginx
│ │ ├── files
│ │ │ ├── nginx-1.15.8.tar.gz
│ │ │ ├── nginx.conf
│ │ │ └── nginx.service
│ │ ├── install.sls
│ │ └── service.sls
│ └── top.sls
├── highstate.cache.p
├── module_refresh
└── proc
9 directories, 11 files
[root@server1 _grains]# salt server3 grains.item roles
server3:
----------
roles:
nginx
[root@server1 _grains]# salt server3 grains.item hello
server3:
----------
hello:
world
现在我们可以根据grains的不同,通过roles的匹配来推服务。
[root@server1 salt]# vim top.sls
base:
'roles:apache':
- match: grain
- apache.service
'roles:nginx':
- match: grain
- nginx.service
salt -G 'roles:httpd' test.ping
salt -G 'roles:nginx' test.ping
pillar
- 动态数据,给特定的minion指定特定的数据。只有指定的minion自己能看到自己的数据。
开启系统自带,修改配置文件
[root@server1 salt]# vim /etc/salt/master #打开下面几行的注释
pillar_roots:
base:
- /srv/pillar
新建目录/srv/pillar
重启systemctl restart salt-master
[root@server1 salt]# cd /srv/pillar
[root@server1 pillar]# vim web.sls
{% if grains['fqdn'] == 'server2' %} 如果主机名字等于server2
webserver: httpd
{% elif grains['fqdn'] == 'server3' %} 如果主机名字等于server3
webserver: nginx
{% endif %}
[root@server1 pillar]# vim top.sls
base:
'*':
- web
[root@server1 pillar]# salt '*' pillar.items
[root@server1 pillar]# salt '*' saltutil.refresh_pillar
[root@server1 pillar]# salt -I 'webserver:nginx' test.ping
[root@server1 pillar]# salt -I 'webserver:httpd' test.ping