Pillar是Salt用來分發全局變量到全部minions的一個接口。pillar只對匹配類型的minion有效。 這使它爲特定的minion存儲敏感數據很是有用.詳細的介紹見官網。html
1.配置啓用pillarpython
Salt Master服務器維護了一個pillar_roots 設置 ,和在Salt 文件服務器上使用的file_roots結構對應。和Salt 文件服務器相似,master配置文件中的 pillar_roots 選項也是基於環境映射到目錄。Pillar數據被映射到基於top文件匹配到的Minion上,top 文件是和state top文件同樣的方式列出的。Salt pillar可使用和標準的top 文件一樣的匹配器類型。web
主配置文件中的 pillar_roots 和 file_roots 的功能是相同的。vim
pillar_roots: base: - /srv/pillar
使用pillar必須存在top文件,同file一致,他是全部pillar使用的入口,salt根據top.sls文件的映射對應到每一個minion。服務器
/srv/pillar/top.sls併發
base: '*': - comman
以上top文件的意思是,全部的minion均可使用/srv/pillar/comman.sls文件的內容高併發
2.遇到的問題spa
每次有新的pillar數據就須要在/srv/pillar/top.sls中增長一個minion和pillar文件的映射,在高併發的狀況,容易形成寫衝突,致使數據丟失。code
3.簡化每次修改top文件的方法orm
參考saltstack應用之簡化pillar配置步驟,每一個minion全部的pillar數據都保存在一個文件中,如果存在相同的key的pillar數據,就不能併發的操做,因此想到給每一個minion都指定一個"top"文件。
如下爲修改配置步驟:
修改top.sls文件內容
#!py #coding:utf-8 ''' 返回minion對應的pillar信息 ''' import yaml import os import salt.master as pub log = logging.getLogger(__name__) def run(): #注意必須是run()方法,top只承認run config={} id=__opts__['id'] #arg=__clear_load__['arg'][0] pillar_root=__opts__['pillar_roots']['base'][0] path='%s/pillar/%s'%(pillar_root,id) #path='%s/pillar/%s/%s'%(pillar_root,id,id) if os.path.isfile(path): s=open(path).read() config=yaml.load(s) log.info(config) return config
在/srv/pillar/pillar/目錄下建立以minion_id命名的"top"文件,內容的格式同/srv/salt/top.sls文件格式一致,以下以minion-deletedevweb02爲例:
vim deletedevweb02 base: 'deletedevweb02': - common - test.test_no_1
寫pillar文件:
cat test_no_1.sls hello: my test
執行命令查看該minion的pillar數據
salt \deletedevweb02 pillar.item hello deletedevweb02: ---------- hello: my test
這樣每次有新的pillar數據均可在/srv/pillar/pillar/minion_id文件中追加pillar文件的相對路徑,這樣既減小衝突也可併發的對同一個minion執行不一樣的命令。