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'] }}')