一.Grains簡介
grains是Saltstack最重要的組件之一,grains的作用是收集被控主機的基本信息,這些信息通常都是一些靜態的數據,包括CPU、內核、操作系統、虛擬化等,在服務器端可以根據這些信息進行靈活定製,管理員可以利用這新信息對不同業務進行個性化配置。
grains是SaltStack當中的一個數據系統,當Minion啓動時Grains會把Minion的數據收集起來,比如操作系統版本、CPU 位數等。由於採用的是靜態收集,只有當Minion發生重啓時數據纔會發生變化,在Grains的實際運用中常用於對多臺Minion做操作時進行一些條件匹配,比如有上百臺Minion服務器,只需要對操作系統爲CentOS的做一些操作等
二.Grains模塊的應用
1.羅列出所有Minion的所有信息
[root@server1 salt]# salt '*' grains.items
通過grains來做信息過濾,使用-G選項:
[root@server1 salt]# salt -G 'cpuarch:x86_64' cmd.run 'uptime' 在所有64位CPU服務器上執行uptime
[root@server1 nginx]# salt server2 grains.item
[root@server1 nginx]# salt server2 grains.item os
[root@server1 nginx]# salt server2 grains.item fqdn
[root@server1 nginx]# salt server2 grains.item nodename
2.當grains.items裏的模塊不滿足當前情況,還可以自定義Grains,比如在server2(minion)添加一個apache模塊
[root@server2 ~]# vim /etc/salt/minion
[root@server2 ~]# systemctl restart salt-minion
[root@server1 nginx]# salt server2 grains.item roles
server2:
----------
roles:
- apache
[root@server1 salt]# salt -G 'roles:apache' test.ping
server2:
True
3.如果不想在minion上的/etc/salt/minion添加模塊,那麼也可以在master上創建/etc/salt/_grains目錄並且編輯文件添加模塊
[root@server1 salt]# mkdir /etc/salt/_grains
[root@server1 salt]# ls
apache _grains nginx pkgs top.sls
[root@server1 salt]# cd _grains/
[root@server1 _grains]# ls
my_grains.py
[root@server1 _grains]# cat my_grains.py
def my_grains():
grains = {}
grains['hello'] = 'world'
grains['salt'] = 'stack'
return grains
[root@server1 _grains]# salt '*' saltutil.sync_grains ##刷新
4.測試:在/srv/salt裏面有top.sls文件在裏面可以使用grains匹配的模塊對已經添加的minion服務器進行相應的服務推送
[root@server1 salt]# ls
apache _grains nginx pkgs top.sls
[root@server1 salt]# vim top.sls
[root@server1 salt]# cat top.sls
base:
'roles:apache':
- match: grain
- apache.install
'roles:nginx':
- match: grain
- nginx.service
[root@server1 salt]# salt '*' state.highstate
三.pillar的應用
pillar簡介:
-
Pillar是Salt非常重要的一個組件,它用於給特定的minion定義任何你需要的數據,這些數據可以被Salt的其他組件使用。
-
給minion指定它想要的數據,給哪個minion指定,哪個minion能看到,,其他minion看不到,安全性得到了保障,在master端設置的
[root@server1 salt]# vim /etc/salt/master ##打開pillar模塊
828 pillar_roots:
829 base:
830 - /srv/pillar
[root@server1 salt]# systemctl restart salt-master
[root@server1 salt]# cd /srv/pillar/
[root@server1 pillar]# ls
top.sls web
[root@server1 pillar]# cat top.sls
base:
'*':
- web.vars
[root@server1 pillar]# cat web/vars.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
[root@server1 pillar]# salt '*' saltutil.refresh_pillar
server3:
True
server2:
True
[root@server1 pillar]# salt '*' pillar.items
server3:
----------
webserver:
nginx
server2:
----------
webserver:
httpd
四.grains和Pillar的區別
1.存儲位置
grains:minion端
pillar:master端
2.數據類型
grains:靜態數據
pillar:動態數據
3.數據採集更新方式
grains:minion啓動時收集,也可以使用saltutil.sync_grains進行刷新
pillar:在master端定義,指定給對應minion,
可以使用saltutil.sync_pillar刷新。
4.應用
grains:存儲minion基本數據。比如用於匹配minion,自身數據可以用來做資產管理等。
pillar:存儲master指定的數據,只有指定的minion可以看到,用於敏感。