1、关于Pillar
Pillar:
存储位置:Master端
数据类型:动态数据
数据采集更新方式:在Master端定义,指定给对应的Minion,可以用saltutil.refresh_pillar刷新
应用:存储Master指定的数据,只有指定的Minion可以看到。用于敏感数据保存
Pillar的使用Grains不同,需要手动设置。配置方法与State管理。需要先在master配置文件中定义pillar_roots.
同时,默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。如果要禁用这一默认值,可以在master配置文件中添加如下数据,重启服务后生效:
2、配置pillar
a)定义pillar_roots:
[root@master ~]# vim /etc/salt/master pillar_roots: base: - /etc/salt/pillar [root@master ~]# mkdir -p /etc/salt/pillar
b)定义top.sls:
[root@master ~]# vim /etc/salt/pillar/top.sls base: '*': - init.rsyslog
备注:所有的minion端都匹配init目录下的rsyslog.sls文件
默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。
c)编辑Pillar下的SLS文件:
[root@master ~]# mkdir -p /etc/salt/pillar/init [root@master ~]# cd /etc/salt/pillar/init [root@master init]# vim rsyslog.sls {% if grains['osfinger'] == 'CentOS-6' %} syslog: rsyslog {% elif grains['osfinger'] == 'CentOS-5' %} syslog: syslog {% endif %}
说明:这个是使用Jiajia模板定义的Pillar。同时使用了Grains来进行条件判断。
注意:key与value之间需要用冒号加空格分隔,没有空格的话会出现报错
d)刷新Pillar数据:
在master上修改pillar文件后,需要用以下命令刷新minion上的数据:
[root@master ~]# salt '*' saltutil.refresh_pillar node01.saltstack.com: True node02.saltstack.com: True [root@master ~]# salt '*' pillar.item syslog node01.saltstack.com: ---------- syslog: rsyslog node02.saltstack.com: ---------- syslog: rsyslog [root@master ~]# salt '*' pillar.raw node01.saltstack.com: ---------- syslog: rsyslog node02.saltstack.com: ---------- syslog: rsyslog
使用pillar.raw查看的是目前正在使用的,存在于minion端的Pillar数据,使用pillar.items会刷新后重新加载的Pillar。所以你如果添加了Pillar,可以使用该方法查询。
[root@master ~]# salt -I 'syslog:rsyslog' test.ping node01.saltstack.com: True node02.saltstack.com: True [root@master ~]# salt -I 'syslog:rsyslog' cmd.run 'df -h' node02.saltstack.com: Filesystem Size Used Avail Use% Mounted on /dev/sda5 14G 8.4G 4.5G 66% / tmpfs 932M 12K 932M 1% /dev/shm /dev/sda1 190M 42M 139M 23% /boot /dev/sda3 2.0G 18M 1.8G 1% /tmp node01.saltstack.com: Filesystem Size Used Avail Use% Mounted on /dev/sda5 14G 8.4G 4.5G 66% / tmpfs 932M 84K 932M 1% /dev/shm /dev/sda1 190M 42M 139M 23% /boot /dev/sda3 2.0G 18M 1.8G 1% /tmp
案例2:
[root@master init]# cd /etc/salt/pillar/ [root@master pillar]# mkdir -p packages [root@master pillar]# cd packages/ [root@master packages]# vim packages.sls {% if grains['os'] == 'CentOS' %} apache: httpd git: git {% elif grains['os'] == 'Debian' %} apache: apache2 git: git-core {% endif %} [root@master init]# salt '*' grains.get os node01.saltstack.com: CentOS node02.saltstack.com: CentOS [root@master packages]# cd .. [root@master pillar]# ls init packages top.sls [root@master pillar]# vim top.sls base: '*': - init.rsyslog - packages.packages
说明:salt使用-I选项表示使用Pillar来匹配minion.
[root@master init]# salt -I 'apache:httpd' test.ping node01.saltstack.com: True node02.saltstack.com: True [root@master init]# salt -I 'git:git' test.ping node02.saltstack.com: True node01.saltstack.com: True