Pillar是Salt非常重要的一个组件,它用于给特定的minion定义任何你需要的数据,这些数据可以被Salt的其他组件使用。这里可以看出Pillar的一个特点,Pillar数据是与特定minion关联的,也就是说每一个minion都只能看到自己的数据,所以Pillar可以用来传递敏感数据(在Salt的设计中,Pillar使用独立的加密session,也是为了保证敏感数据的安全性)。 另外还可以在Pillar中处理平台差异性,比如针对不同的操作系统设置软件包的名字,然后在State中引用等。
默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。默认如下:
#pillar_opts: True
[root@server_client base]# salt '*' pillar.items #查看当前pillar的值
server_client:
----------
_errors:
- Error encountered while rendering pillar top file.
master:
----------
__cli:
salt-master
__role:
master
allow_minion_key_revoke:
True
archive_jobs:
False
....
master上配置文件中定义pillar_roots,用来指定pillar的数据存储在哪个目录
pillar_roots:
base:
- /srv/salt/pillar
首先,和state系统一样,pillar也是需要一个top.sls文件作为一个入口,用来指定对象。
base:
'client': #这里面表示谁可以使用pillar
- sl #这里指定了一个sl.sls文件
sl.sls文件:
{% if grains['os'] == 'CentOS' %}
var-sl: sl #pillar定义了一个变量 var-sl 值为 sl
{% endif %}
测试刚才定义的pillar:
[root@server_client base]# salt '*' pillar.items
在State文件中将可以引用Pillar数据
进入/srv/salt/base目录 新建一个文件叫xxxx.sls
sl-install:
pkg.installed:
- name: {{ pillar['var-sl'] }} #pillar数据中的定义的'var-sl' 变量
刷新pillar
[root@server_client base]# salt * saltutil.refresh_pillar