简介
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')}}