简介  

  grains用于存储静态不易变更的数据,而pillar一般用于存储动态, 敏感的数据,通过minion和master设置或获取grains信息,而pillar信息只能在master端配置,在到minion端执行。pillar 默认使用sls文件进行数据存储(YAML格式),除此之外, pillar也同事支持多种后端的数据存储方式,例如:mysql,mongodb,ldap,json,cobbler甚至是puppet。

 

常用的场景:

 

  1. 敏感数据:例如ssh key,加密整数等,由于Pillar使用独立的加密session,可以确保这些敏感数据不被其他minion看到。

  2. 不同变量:可以再pillar中处理平台差异性,比如针对不同的操作系统设置软件包的名字,然后在state中引用。

  3. 用户版本等变量:可以在pillar中添加任何需要用到的数据,比如定义用户和UID的对应关系,软件版本和端口,minion的角色等等

 

基础内容:

  • 默认目录: /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

相关文章: