salt之pillar組件
pillar也是salt最重要的組件之一潜支,其作用是定義與被控主機(jī)相關(guān)的任何數(shù)據(jù)膏燕,定義好的數(shù)據(jù)可以被其他組件使用崇棠,如模板买优、state、API等咐熙。在pillar中定義的數(shù)據(jù)與不同業(yè)務(wù)特征的被控主機(jī)相關(guān)聯(lián)弱恒,這樣不同被控主機(jī)只能看到自己匹配的數(shù)據(jù),因此pillar安全性很高棋恼,適用于一些比較敏感的數(shù)據(jù)返弹,這也是區(qū)別于grains最關(guān)鍵的一點(diǎn),如定義不同業(yè)務(wù)組主機(jī)的用戶id爪飘、組id义起、讀寫權(quán)限、程序包等信息师崎,定義的規(guī)范是采用Python字典形式并扇,即鍵/值,最上層的鍵一般為主機(jī)的id或組名稱。
pillar的定義:
1穷蛹、主配置文件定義
salt默認(rèn)將主控端配置文件中的所有數(shù)據(jù)都定義到pillar中,而且對所有被控主機(jī)開放昼汗,可通過修改/etc/salt/master配置中的pillar_opts: True或False來定義是否開戶或禁用這項(xiàng)功能肴熏,修改后執(zhí)行salt '*' pillar.data來觀察效果。
2顷窒、SLS文件定義
pillar支持在slsy文件中定義數(shù)據(jù)蛙吏,格式須符合YAML規(guī)范,與salt和state組件十分相似鞋吉,兩者文件的配置格式鸦做、入口文件top.sls都是一致的。
(1)定義pillar的主目錄
修改主配置文件/etc/salt/master的pillar_roots參數(shù)谓着,定義pillar的主目錄
同時創(chuàng)建pillar目錄泼诱,執(zhí)行命令: install -d /srv/pillar
(2)定義入口文件top.sls
入口文件的作用一般是定義pillar的數(shù)據(jù)覆蓋被控主機(jī)的有效域范圍,"*" 代表任意主機(jī)赊锚,其中包括了一個data.sls文件治筒,
/srv/pillar/top.sls
base:
'*':
- data
/srv/pillar/data.sls
appname: website
flow:
maxconn: 30000
maxmem: 6G
(3)校驗(yàn)pillar
通過 salt 'myhost' pillar.data appname flow 命令可以看到多出了上面定義的 data.sls數(shù)據(jù)項(xiàng)。如果結(jié)果不符合預(yù)期舷蒲,可以嘗試刷新被控機(jī)pillar數(shù)據(jù)耸袜,
運(yùn)行 salt 'myhost' saltutil.refresh_pillar 即可刷新
3、pillar的使用
完成pillar配置后牲平,接下來我們可以在state堤框、模板文件中引用,模板格式為 "{{ pillar變量 }}" ,例如:
{{ pillar['appname'] }} (一級字典)
{{ pillar['flow']['maxconn'] }} (二級字典) 或 {{ salt['pillar.get']('flow: maxconn'),{} }}
Python API格式如下:
pillar['flow']['maxconn']
pillar.get('flow:appname',{})
結(jié)合grains處理數(shù)據(jù)的差異性----示例:
3.1 創(chuàng)建pillar目錄和top.sls文件
# mkdir /srv/pillar
# vi /srv/pillar/top.sls
base:
'*':
- ip
3.2 先通過pillar獲取minion主機(jī)IP
vi /srv/pillar/ip.sls
ip: {{ grains['ipv4'][1] }}
寫完后纵柿,執(zhí)行sls命令蜈抓,可以看到已經(jīng)獲取到IP
salt '*' pillar.item ip
host2:
ip:
192.168.18.213
host1:
ip:
192.168.18.212
既然grains與pillar類似,就說下區(qū)別:
1.grains是minion每次加載時獲取本地系統(tǒng)信息數(shù)據(jù)藐窄,是靜態(tài)的资昧,固定的,而pillar是動態(tài)加載數(shù)據(jù)荆忍,隨時變化的格带,比grains更靈活。
2.grains數(shù)據(jù)存儲在minion本地刹枉,pillar存儲在master
jinja2官網(wǎng)語法介紹: http://jinja.pocoo.org/docs/dev/templates/