Grains:grains是minion第一次啓動的時候採集的靜態數據,能夠用在salt的模塊和其餘組件中。其實grains在每次的minion啓動(重啓)的時候都會採集,即向master彙報一次的。grains是minion啓動時加載的,在運行過程當中不會發生變化,因此是靜態數據。grains中包含諸如運行的內核版本,操做系統等信息。在master端經過Grains能夠得到minion對應的變量值。python
Pillar:Pillar是在salt 0.9.8版本後才添加的功能組件。它跟grains的結構同樣,也是一個字典格式,數據經過key/value的格式進行存儲。在Salt的設計中,Pillar使用獨立的加密sesstion,因此Pillar能夠用來傳遞敏感的數據,例如ssh-key,加密證書等。
存儲位置:存儲在master端,存放須要提供給minion的信息
應用場景:敏感信息:每一個minion只能訪問master分配給本身的信息nginx
查看遠端服務器的數據的命令:
salt wf2 grains.item os ##查看 wf2 的 os 的類型
salt wf2 grains.item ipv4 ##查看 wf2 的 ip
salt -G 'os:redhat' cmd.run hostname ## -G表示匹配 'os:redhat'表示前面匹配全部紅帽的系統 cmd 表示匹配到一致的遠端的服務器執行cmd後面的命令
更改信息的方式有兩種:一在minion端更改,二在master端更改web
方法一:在minion的配置文件中更改默認的 roles 值
cd /etc/salt/
ls
vim minion
grains:
roles:
- apache ##更改默認的roles的值
/etc/init.d/salt-minion restart ##由於是靜態的更改配置文件,因此要從新啓動服務
測試:在master上 salt wf2 grains.item roles ##能夠看到輸出的是,剛更改的配置文件的數據
apache
方法二:在minion端的salt下編寫一個文件
cd /etc/salt
ls
vim grains
roles: nginx ##由於不是更改的配置文件,因此不須要重起
測試:在master端上 salt wf3 grains.item roles
##雖然編寫了配置文件,可是master端沒有識別這個文件,並不知道這個文件的存在,因此須要觸發一下,模塊刷一下
salt wf3 saltutil.sync_grains ##刷新
salt wf3 grains.item roles ##再次查看,就能夠看到添加的文件裏面的信息vim
##什麼系統操做什麼命令 role自定義角色
##無需重起,只須要在master上觸發一下grains服務器
方法一:編輯top.sls文件
top file中不須要匹配主機名,批量的配置服務器
vim top.sls
base:
"wf1":
- haproxy.service
"roles:apache":
- match: grain
- apache.install
"roles:nginx":
- match: grain
- nginx.service
方法二:在master端,編寫py腳本 優勢是:不須要登錄遠程的服務端
mkdir _grains
cd _grains/
vim my_grains.py
#!/usr/bin/env python
def my_grains():
grains = {}
grains['hello'] = 'westos'
grains['salt'] = 'stack'
return grainsa
salt wf3 saltutil.sync_grains ##查看 wf3 的 grains 的值
測試:
在wf3處: cd /var/cache/salt -> tree . -> 將my文件傳送了過來
在wf1處: salt wf3 grains.item hello/salt
==================================================================================
注意:若是同時編寫了這些,那麼這四個的優先級又是什麼呢?
1.grains ##配置文件中的grains的默認的(或者更改的)值
2./etc/salt/grains ##在 minion 端編寫的文件
3./etc/salt/minion
4._grains/my_grains.py ##在master上面添加的目錄和文件
==================================================================================網絡
在wf1上:
cd /etc/salt/
vim master
pillar_roots:
base:
- /srv/pillar
/etc/init.d/salt-master restart
mkdir /srv/pillar
cd /srv/pillar
mkdir web
cd web
vim install.sls
{% if grains['fqdn'] == 'wf2' %}
webserver: httpd
{% elif grains['fqdn'] == 'wf3' %}
webserver: nginx
{% endif %}
cd ..
vim top.sls
base:
'*':
- web.install
測試: salt '*' pillar.items
salt '*' saltutil.refresh_pillar ##刷新
salt wf2/3 pillar.item webserver ##單獨看的話,就查看不了,須要刷新
salt '*' saltutil.refresh_pillar ##刷新
salt wf2/3 pillar.item webserver ##刷新事後就能夠查看
==================================================================================
注意:pillar的用法:-I 匹配 -S掃描整個網絡
salt -I 'webserver:httpd' test.ping
salt -S 172.25.254.0/24 test.ping
==================================================================================
ssh