grains用於存儲靜態不易變動的數據,而pillar通常用於存儲動態, 敏感的數據,經過minion和master設置或獲取grains信息,而pillar信息只能在master端配置,在到minion端執行。pillar 默認使用sls文件進行數據存儲(YAML格式),除此以外, pillar也同事支持多種後端的數據存儲方式,例如:mysql,mongodb,ldap,json,cobbler甚至是puppet。
python
1. 敏感數據:例如ssh key,加密整數等,因爲Pillar使用獨立的加密session,能夠確保這些敏感數據不被其餘minion看到。mysql
2. 不一樣變量:能夠再pillar中處理平臺差別性,好比針對不一樣的操做系統設置軟件包的名字,而後在state中引用。git
3. 用戶版本等變量:能夠在pillar中添加任何須要用到的數據,好比定義用戶和UID的對應關係,軟件版本和端口,minion的角色等等web
salt '*' sys.doc pillar # 查看與pillar有關的幫助信息 salt '*' pillar.items # 獲取全部pillar items值 salt '*' pillar.data # 等價於pillar.items salt '*' saltutil.refresh_pillar # 刷新pillar值 salt '*' saltutil.sync_all # 刷新pillar值,與refresh_pillar操做相似,但範圍更大 salt '*' sys.list_functions pillar # 列出全部的pillar相關函數方法 salt '*' pillar.get xxx # 獲取某項的值,相似於python字典的get函數 salt '*' pillar.raw # 內存中獲取 salt '*' state.highstate pillar={'test': 'abc'} # 在命令設置pillar 數據
# 數據格式,相似於字典 foo: bar: baz:qux # 獲取方式: {{ pillar['foo']['bar']['baz']}} {{ salt['pillar.get']('foo:bar:baz', 'qux')}}
(1)pillar目錄 pillar_roots: base: - /srv/pillar (2)是否將master配置文件中的數據信息添加到pillar中,默認是不加,須要的話能夠改爲True,重啓服務生效。 pillar_opts: False (3)pillar 源,salt支持引入pillar外部資源,例如從數據庫導入pillar值,默認是關閉的 ext_pillar_first: False
(4)開啓pillar gitgs ssl驗證
pillar_gitfs_ssl_verify: True
(5)開啓pillar render 錯誤信息
pillar_safe_render_error: True
(6)設置pillar配置合併策略
pillar_source_merging_strategy: smart
(1) salt '*' saltutil.refresh_pillar [root@saltmaster pillar]# salt '*' saltutil.refresh_pillar saltmaster: True (2) salt '*' saltutil.sync_all [root@saltmaster pillar]# salt '*' saltutil.sync_all saltmaster: ---------- beacons: clouds: engines: grains: log_handlers: modules: output: proxymodules: renderers: returners: sdb: states: utils:
默認的入口文件爲/src/pillar/top.slssql
top.sls的引用方式分爲兩種:mongodb
備註:若是要引用執行的sls文件和目錄同時存在,也就是方法一和方法二都存在,packages.sls和packages/init.sls,會優先使用packages.sls文件。數據庫
(1)方式一: [root@saltmaster srv]# tree /srv/pillar/ /srv/pillar/ # 默認pillar文件目錄 ├── packages.sls # packages 引用文件 ├── services.sls # services 引用文件 └── top.sls # 固定的入口文件top.sls (2)方式二: [root@saltmaster srv]# tree /srv/pillar/ /srv/pillar/ ├── packages # packages 目錄 │ └── init.sls # 引用文件 ├── services # services 目錄 │ └── init.sls # 引用文件 └── top.sls # 固定的入口文件top.sls # 引入文件說明 [root@saltmaster pillar]# cat packages.sls zabbix: package-name: zabbix version: 2.2.4 [root@saltmaster pillar]# cat services.sls zabbix: port: 10050 user: admin
配置好top.sls以及附屬sls文件後,能夠刷新一下pillar,查看各個pillar值apache
[root@saltmaster pillar]# salt '*' pillar.items saltmaster: ---------- zabbix: ---------- package-name: zabbix port: 10050 user: admin version: 2.2.4
經過jinja模板來寫 sls 文件,而後經過操做系統的不一樣利用grains 獲取 pillar 信息。一樣在state組件裏也能夠更方便的調用pillar。json
[root@saltmaster pillar]# cat top.sls base: '*': - packages [root@saltmaster pillar]# cat packages.sls pkgs: # 模塊名稱 {% if grains['os'] == 'CentOS' %} # 使用jinja模板,經過grains篩選主機 apache: httpd # 安裝包名稱 git: git {% elif grains['os'] == 'SUSE' %} apache: apache2 git: git-core {% endif %} [root@saltmaster pillar]# salt '*' saltutil.refresh_pillar [root@saltmaster pillar]# salt "*" pillar.items saltmaster: ---------- pkgs: ---------- apache: httpd git: git salt-minion-1: ---------- pkgs: ---------- apache: apache2 git: git-core
pillar 對敏感數據密碼信息的存儲後端
# cat /srv/pillar/database.sls dbname: project dbuser: username dbpass: password dbhost: localhost # 在模塊文件中引用方式: # cat website.conf # MySQL setttings 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'] }}')