Pillar Walkthrough 翻譯

官方文檔地址:http://docs.saltstack.com/topics/tutorials/pillar.html

Pillar Walkthrough

Note

閱讀這份手冊之前,假定讀者已經完成了Salt Stack基礎 手冊的閱讀。


Pillar接口是Salt衆多組件中最重要的部署組件,Pillar被用來爲特別的從服務器生成特定數據的接口。在Pillar中生成的數據提供給所有的Salt組件並且被用來一下目的:

高度敏感數據:

所有通過pillar傳輸的信息能夠保證被提交給目標主機,這使得Pillar引擎在Salt中被用來管理安全的信息,如,密碼的Key和密碼口令等。

從服務器配置:

從服務模塊如遠程執行模塊,狀態,反饋信息都可以使用存儲在pillar中的數據來配置。

變量:

那些需要分配給特定的從服務器或者羣組的變量可以在pillar中定義並且能夠在SLS配置模板和穩重中使用。

任意數據:

Pillar能夠包含任意基本的數據結構,如,列表數據,或者k/v存儲。可以讓數據容易在SLS文檔中使用。

因此,Pillar是在使用Slat的過程中最重要系統之一,這篇教程設計用來在幾分鐘之內編寫一個簡單的pillar文件,然後運用這個Pillar 使它的數據是可用的在pillar文件中。


設置Pillar

默認情況下,Pillar 已經運行在了Salt系統中,在從服務器上的Pillar的數據能夠通過下面的命令查看到:

# salt '*' pillar.data

默認情況下,主服務器的配置文件內容裝載在fillar中對所用的從服務器來說,通過配置主服務器的配置文件來使全局的從服務器生效。

Pillar是類似內置的state 文件,它有sls文件組成且有一個視圖文件,就像state tree(翻譯爲,state 文件)。相對於state文件,Pillar 存儲在Slat主服務器上的不同目錄。默認的目錄是/srv/pillar


注意:

     Pillar的目錄能夠通過修改主服務配置文件中的pillar_roots選項進行更改。


在配置Pillar之前,需要創建/srv/pillar目錄。

# mkdir /srv/pillar

一個簡單的視圖文件,格式類似state,需要創建,其內容如下:

/srv/pillar/top.sls

base:
  '*':
    - data

視圖文件包含data.sls文件,這個文件在所有的從服務器上生效,/srv/pillar/data.sls文件如下:

/srv/pillar/data.sls

info: some data

至此,保存該文件,從服務器上的pillars信息將被更新:

# salt '*' pillar.data

info關鍵字的信息會出現在返回的pillar數據中


更多複雜的數據:

Pillar文件是SLS文件,像states,但是不想sates文件,他們不需要定義格式,數據可以是任意的,下面的例子中,通過UID設置用戶數據,

/srv/pillar/usrs/init.sls

users:
  thatch: 1000
  shouse: 1001
  utahdave: 1002
  redbeard: 1003


注意:

相同的目錄中查找 states文件在Pilla目錄中,因此 users/init.sls文件能夠在視圖文件中被引用。


視圖文件需要更新一下以引用這個sls文件:

/srv/pillar/top.sls

base:
  '*':
    - data
    - users

現在的話,這些數據對從服務器來說是可用的了。使用Jinjia 在state文件中引用pillar 中的數據。

/srv/salt/users/init.sls

{% for user, uid in pillar.get('users', {}).items() %}
{{user}}:
  user.present:
    - uid: {{uid}}
{% endfor %}
以上可以把users 安全的定義在一個pillar中,並且user 數據可以應用在sls文件中。



Pillar作爲states 的參數

Pillar最重要的一個抽象功能就是能夠作爲states的參數。而不是定義宏或者函數,在states文件內容中,可以自由地參數化相對於所有的從服務器的pillar.

以上的話可以讓Salt變的更加靈活,這意味着一些簡單的sls格式的文件能夠用作結構的參數而不需要重構state文件樹。

一個簡單的例子是根據不同的Linux 分發版本引導安裝不同的軟件包在pillar中定義。

/srv/pillar/pkg/init.sls

pkgs:
  {% if grains['os_family'] == 'Debian' %}
  apache: httpd
  vim: vim-enhanced
  {% elif grains['os_family'] == 'RedHat' %}
  apache: apache2
  vim: vim
  {% elif grains['os'] == 'Arch' %}
  apache: apache
  vim: vim
  {% endif %}

這個新的pkg sls需要增加到視圖文件中:

/srv/pillar/top.sls

base:
  '*':
    - data
    - users
    - pkg

至此,從服務器將會根據各自的操作系統自動對應在pillar 只內定義的軟件安裝包,所以sls文件可以安全的引用:

/srv/salt/apache/init.sls

apache:
  pkg.installed:
    - name: {{ pillar['pkgs']['apache'] }}

更或者,假如pillar不可以用,也可以這樣設置缺省值:

NOte:

      在這個例子中使用的pillar.get 函數是在Salt 0.14.0版本中增加的。

/srv/salt/apache/init.sls

apache:
  pkg.installed:
    - name: {{ salt['pillar.get']('pkgs:apache', 'httpd') }}

在上面的例子中,假如  pillar 的變量pillar['pkgs'] ['apache'] 在從服務器上沒有被設置,那麼默認的'httpd'將會被使用。


Pillar使簡單的states變的靈活

Pillar其中一個設計目標是使簡單的sls格式變得易用和靈活,而不是需要複雜和重構state文件。

簡單的格式:

/srv/salt/edit/vim.sls

vim:
  pkg:
    - installed

/etc/vimrc:
  file.managed:
    - source: salt://edit/vimrc
    - mode: 644
    - user: root
    - group: root
    - require:
      - pkg: vim

可以很容易地轉換成一個強大的、參數化公式:

/srv/salt/edit/vim.sls

vim:
  pkg:
    - installed
    - name: {{ pillar['pkgs']['vim'] }}

/etc/vimrc:
  file.managed:
    - source: {{ pillar['vimrc'] }}
    - mode: 644
    - user: root
    - group: root
    - require:
      - pkg: vim

vimrc的源位置可以通過pillar 改變:

/srv/pillar/edit/vim.sls

{% if grain['id'].startswith('dev') %}
vimrc: salt://edit/dev_vimrc
{% elif grain['id'].startswith('qa') %}
vimrc: salt://edit/qa_vimrc
{% else %}
vimrc: salt://edit/vimrc
{% endif %}

確保正確的vimrc發送正確的從服務器上。

更多關於Pillar

Pillar的數據創建在Salt主服務器上並且安全的分發到從服務器上。Salt當定義pillar的時候 並不侷限於pollar sls 文件,可以從其他額外的源取得數據。對於那些把基礎結構信息存儲在其他的地方會很有用。
參考信息和其他外部Pillar接口可以 在Salt 文檔中找到:

Pillar

http://docs.saltstack.com/topics/pillar/index.html


















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