pillar也是Saltstack最重要的組件之一,其做用是定義與被控主機相關的任何數據,定義好的數據能夠被其餘組件使用,如模板、state、API等。web
在pillar中定義的數據與不一樣業務特性的被控主機相關聯,這樣不一樣被控主機只能看到本身匹配的數據,所以pillar安全性很高,適用於一些比較敏感的數據,這也是區別於grains最關鍵的一點,如定義不一樣業務組主機的用戶id、組id、讀寫權限、程序包等信息,定義的規範是採用Python字典形式,即鍵/值,最上層的鍵通常爲主機的id或組的名稱。安全
Saltstack默認將主控端配置文件中的全部數據都定義到pillar中,而對全部被控主機開放,可經過修改/etc/salt/master配置來定義是否開啓或關閉這項功能。app
【/etc/salt/master】運維
pillar_opts: True/False
修改後執行命令來觀察效果:spa
salt '*' pillar.data
pillar支持在sls文件中定義數據,格式須符合YAML規範,與Saltstack的state組件十分類似,新人容易將二者混淆,二者文件的配置格式、入口文件top.sls都是一致的。code
定義pillar的主目錄
【/etc/salt/master】blog
pillar_roots: base: - /srv/pillar
同時建立pillar目錄,執行命令:get
install -d /srv/pillar
定義入口文件top.slsit
入口文件的做用通常是定義pillar的數據覆蓋被控主機的有效範圍,'*'表明任意主機,其中包括了一個data.sls文件具體內容以下:自動化
【/srv/pillar/top.sls】
base: '*': - data #指代的是data.sls文件
【/srv/pillar/data.sls】
appname: website flow: maxconn: 3000 maxmem: 6G
刷新被控主機的pillar信息
salt '*' saltutil.refresh_pillar
查看上面定義的data.sls數據項
salt 'wx' pillar.data appname flow
完成pillar配置後接下來介紹使用方法。咱們能夠在state、模板文件中引用,模板格式爲:{{ pillar變量 }}
例:
{{ pillar['appname'] }}(一級字典) {{ pillar['flow']['maxconn'] }}(二級字典) 或 {{ salt['pillar.get']('flow:maxconn',{}) }} #Python API格式以下: pillar['flow']['maxconn'] pillar.get('flow:appname',{})
salt -I 'appname:website' test.ping
結果:
wx: True
首先經過結合grains的id信息來區分不一樣的id的maxcpu的值,其次進行引用觀察匹配的信息,將data.sls修改爲以下形式:
appname: website flow: maxconn: 3000 maxmem: 6G {% if grains['id'] == 'wx' %} #jinjia2模板語法 maxcpu: 8 {% else %} maxcpu: 4 {% endif %}
結果:
wx: ---------- flow: ---------- maxconn: 3000 maxcpu: 8 maxmem: 6G
參考資料:
根據劉天斯《Python自動化運維技術與最佳實踐》整理