Saltstack系列5:Saltstack之pillar元件

張衝andy發表於2019-10-19

pillar元件

pillar也是Saltstack最重要的元件之一,其作用是定義與被控主機相關的任何資料,定義好的資料可以被其他元件使用,如模板、state、API等。

在pillar中定義的資料與不同業務特性的被控主機相關聯,這樣不同被控主機只能看到自己匹配的資料,因此pillar安全性很高,適用於一些比較敏感的資料,這也是區別於grains最關鍵的一點,如定義不同業務組主機的使用者id、組id、讀寫許可權、程式包等資訊,定義的規範是採用Python字典形式,即鍵/值,最上層的鍵一般為主機的id或組的名稱。

 

pillar的定義

主配置檔案定義

Saltstack預設將主控端配置檔案中的所有資料都定義到pillar中,而對所有被控主機開放,可透過修改/etc/salt/master配置來定義是否開啟或關閉這項功能。

【/etc/salt/master】

pillar_opts: True/False

修改後執行命令來觀察效果:

salt '*' pillar.data

 

SLS檔案定義

pillar支援在sls檔案中定義資料,格式須符合YAML規範,與Saltstack的state元件十分相似,新人容易將兩者混淆,兩者檔案的配置格式、入口檔案top.sls都是一致的。

定義pillar的主目錄
【/etc/salt/master】

pillar_roots:
  base:
    - /srv/pillar

同時建立pillar目錄,執行命令:

install -d /srv/pillar

 

定義入口檔案top.sls

入口檔案的作用一般是定義pillar的資料覆蓋被控主機的有效範圍,'*'代表任意主機,其中包括了一個data.sls檔案具體內容如下:

【/srv/pillar/top.sls】

base:
  '*':
    - data #指代的是data.sls檔案

【/srv/pillar/data.sls】

appname: website
flow:
  maxconn: 3000
  maxmem: 6G

 

校驗pillar

重新整理被控主機的pillar資訊

salt '*' saltutil.refresh_pillar

檢視上面定義的data.sls資料項

salt 'wx' pillar.data appname flow

 

pillar的使用

完成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處理資料的差異性

首先透過結合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自動化運維技術與最佳實踐》整理


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2660644/,如需轉載,請註明出處,否則將追究法律責任。

相關文章