在SaltStack中使用Pillar
/etc/salt/master - Pillar Roots
/srv/pillar/top.sls
/srv/pillar/packages.sls - Pillar Data
/srv/states/apache.sls - State Data
/srv/pillar/database.sls - Pillar Data
website.conf - template
總結
Pillar做爲一允許你分發定義的全局數據到目標minion上的接口,Pillar的數據只在匹配的minions上有效。 所以該特性使Pillar常常用於存儲敏感類數據.
本文通過例子帶你瞭解如何使用和存儲Pillar數據.
/etc/salt/master - Pillar Roots
需要在master配置文件中定義_pillar_roots_,其用來指定Pillar data存儲在哪個目錄,默認是_/srv/pillar_.
pillar_root:
base:
- /srv/pillar
/srv/pillar/top.sls
和State系統一樣,需要先定義一個_top.sls_文件作爲入口,用來指定數據對哪個minion有效.
base:
'*':
- packages
'alpha':
- database
上邊的例子定義了_packages_對所有的minion有效,_database_只對名字爲'alpha'的minion有效.
/srv/pillar/packages.sls - Pillar Data
通過例子_packages_文件定義不同Linux發行版的軟件包名字,通過Pillar進行中心控制它們,這樣就可以在State文件中引用Pillar數據使State看起來更簡單.
{% if grains['os'] == 'RedHat' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}
/srv/states/apache.sls - State Data
如上,在State文件中將可以引用Pillar數據,是State更爲簡單. 線面是_apache.sls_ State文件例子:
apache:
pkg:
- installed
- name: {{ pillar['apache'] }}
/srv/pillar/database.sls - Pillar Data
另一個定義Pillar Data的例子是定義服務連接數據庫的權限的配置參數:
dbname: project
dbuser: username
dbpass: password
dbhost: localhost
website.conf - template
// MySQL settings
define('DB_NAME', '{{ pillar['dbname'] }}');
// MySQL database username
define('DB_USER', '{{ pillar['dbuser'] }}');
// MySQL database password
define('DB_PASSWORD', '{{ pillar['dbpass'] }}');
// MySQL hostname
define('DB_HOST', '{{ pillar['dbhost'] }}');
總結
有許多方法使用Pillar data. 作爲另一種基礎數據結構,Pillar是優美的. 可以用它定義所有minion上的自定義數據,也可以簡單的定義包的名字,或者定義服務憑據(service credentials),Pillar都可以滿足.