Saltstack系列5:Saltstack之pillar組件

pillar組件

pillar也是Saltstack最重要的組件之一,其做用是定義與被控主機相關的任何數據,定義好的數據能夠被其餘組件使用,如模板、state、API等。web

在pillar中定義的數據與不一樣業務特性的被控主機相關聯,這樣不一樣被控主機只能看到本身匹配的數據,所以pillar安全性很高,適用於一些比較敏感的數據,這也是區別於grains最關鍵的一點,如定義不一樣業務組主機的用戶id、組id、讀寫權限、程序包等信息,定義的規範是採用Python字典形式,即鍵/值,最上層的鍵通常爲主機的id或組的名稱。安全

 

pillar的定義

主配置文件定義

Saltstack默認將主控端配置文件中的全部數據都定義到pillar中,而對全部被控主機開放,可經過修改/etc/salt/master配置來定義是否開啓或關閉這項功能。app

【/etc/salt/master】運維

pillar_opts: True/False

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

salt '*' pillar.data

 

SLS文件定義

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

刷新被控主機的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自動化運維技術與最佳實踐》整理

相關文章
相關標籤/搜索