集中化管理平臺saltstack--pillar(4)

pillar

  Pillar是用來產生特定於minions的任意數據的接口。它跟grains的結構一樣,也是一個字典格式,數據通過key/value的格式進行存儲。作用是定義與被控主機相關的任何數據,定義好的數據可以被其它組件使用,如模板,state,API等。

  在pillar中定義的數據與不同業務特性的被控主機相關聯,使不同被控主機只能看到自己匹配的數據,在Salt的設計中,Pillar使用獨立的加密session,所以Pillar可以用來傳遞敏感的數據,通過pillar傳輸的數據會保證只向選定的minions展現,這使得pillar可以作爲Salt中管理安全信息的引擎,例如ssh-key,加密證書等。

  可以包含任何基礎數據結構,像是一個列表的值,鍵值存儲結構都可以定義使得可以在sls公式中簡單的遍歷一組值。

pillars可以通過以下的命令來查看:

# salt 'JYD-test-1' pillar.data       # 或    pillar.items  

JYD-test-1:

    ----------

    master:        

        ----------

        auth_mode:

            1

        auto_accept:

            False

        cachedir:

            /var/cache/salt/master

              ……  ……

  默認情況下,master配置文件中的所有數據都添加到Pillar中,且對所有minion開放。若要禁用此項在/etc/salt/master中修改pillar_opts 爲 Flase

  pillar和state組件十分相似,支持在sls文件中定義數據,格式需要符合YAML規範。默認在/etc/pillar這個文件夾裏面。pillar的位置可以通過master配置見中的pillar_roots配置項來自定義。

注:YAML語法規範

 規則一:縮進
YAML使用一個固定的縮進風格表示數據層結構關係,Saltstack需要每個縮進級別由兩個空格組成。一定不能使用tab鍵

 規則二:冒號
mykey: my_value

每個冒號後面一定要有一個空格(以冒號結尾不需要空格,表示文件路徑的模版可以不需要空格)

 規則三:短橫線

想要表示列表項,在最前面使用一個短橫槓加一個空格。多個項使用同樣的縮進級別作爲同一個列表的一部分。


my_dictionary:
  - list_value_one
  - list_value_two
  - list_value_three


先創建一個入口文件top.sls

注:入口文件的作用是定義pillar的數據覆蓋被控主機的有效域範圍。

# vi /srv/pillar/top.sls  

base:  

  '*':  

    - data  

注:目錄查詢在pillar中也同樣適用,可在- data 下面再添加 - 目錄名。目錄需要在/srv/pillar裏。

  這個top文件將所有的minions和data.sls關聯起來。在/srv/pillar/data.sls中寫一些鍵值對。若data.sls不存在,會使用data/下的init.sls作爲聲明文件

# cat /srv/pillar/data.sls

info: website

web:

 webserver: nginx

 maxconn: 50000
刷新一下被控主機的pillar數據

# salt '*' saltutil.refresh_pillar     

# salt '*' pillar.data

寫入data.sls中的鍵值對將會出現在返回的pillar數據中。


pillar的應用

通過-I 選項來匹配被控主機

# salt -I 'info: website' test.ping

JYD-test-2:

    True

結合grains處理數據的差異性

官網上的小例子,咱們來看一看。

{% if grains['os'] == 'RedHat' %}
apache: httpd
git: git
{% elif grains['os'] == 'Debian' %}
apache: apache2
git: git-core
{% endif %}

注:其中“{% if……%}  {% else……%}  {% endif %}”爲jinja2的模板語法

  此例子說明:結合grains的os信息來區分不同id的maxcpu的值,其次進行引用觀察匹配的信息。如果系統是RedHat,那麼我的apache的名字就叫httpd。系統是Debian的時候,我的apache的名字就叫apache2。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章