SaltStack Pillar 詳解

簡介  

  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

 

基礎內容:

  • 默認目錄: /srv/pillar/, 在master配置文件中指定,目錄默認須要本身建立。修改配置文件可修改。
  • 入口文件: /srv/pillar/top.sls , pillar默認的主入口配置文件。
  • Pillar默認值:與grains不一樣,全部的pillar值都是人爲設定的,默認pillar爲空。
  • sls 文件:pillar的文件,sls是saltstack的縮寫,YAML風格,支持jinja模板。

經常使用命令:

    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')}}        
pillar.get

 

Master配置文件中關於pillar的相關信息

(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

 

Pillar的刷新方式:

  • salt '*' saltutil.refresh_pillar
  • salt '*' saltutil.sync_all 
(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:
刷pillar 的輸出結果

 

關於pillar的 sls 文件使用說明:

  默認的入口文件爲/src/pillar/top.slssql

  top.sls的引用方式分爲兩種:mongodb

  • 將引用sls文件放在同級目錄
  • 在/src/pillar/ 目錄下建立對應的packages, services目錄,並在該目錄下建立init.sls文件。

備註:若是要引用執行的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引用說明

配置好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

 

pillar 中jinja模板的使用

  經過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'] }}')
相關文章
相關標籤/搜索