关于pillar
Pillar在salt中是非常重要的组成部分,利用它可以完成很强大的功能,它可以指定一些信息到指定的minion上,不像grains一样是分发到所有Minion上的,它保存的数据可以是动态的
用途:
1.比较敏感的数据,比如密码,key等
2.特殊数据到特定Minion上
3.动态的内容
4.其他数据类型
开启pillar,前面部暑时已说明,指定目录是/srv/salt/pillar。
基本使用
查看:salt '*' pillar.items
salt '*' pillar.data
查看某个:salt '*' pillar.item KEY
刷新pillar数据:salt '*' saltutil.refresh_pillar
在state组件中使用pillar
注:Pillar数据解析后是以字典的形式存在的,因此,引用Pillar数据的过程,实际上就是从字典里面读取数据的过程。
例:pillar['apache']
或pillar.get('apache',{})
注意观察下面的pillar文件,结论:即使是两个不同的pillar sls文件,如果字典的主key一致,则不同sls文件的的数据都会将解析后放入主字典下
[root@test11 pillar]# ls
httpd.sls sshd.sls top.sls
[root@test11 pillar]# cat top.sls
base:
'*':
- sshd
- httpd
[root@test11 pillar]# cat httpd.sls
service:
http_name: httpd
[root@test11 pillar]# cat sshd.sls
service:
ssh_service: sshd
[root@test11 pillar]# salt 'test22' pillar.data
test22:
----------
service:
----------
http_name:
httpd
ssh_service:
sshd
实例理解pillar
以给minion端安装httpd服务以例,根据不同的minion端赋以不同的端口
1、在master上安装httpd,并把httpd的配置文件拷贝到新建的/srv/salt/state/apache/templates下
2、修改httpd.conf文件,把监听的的端口改成jinja格式
Listen {{ port }}
3、sls文件如下:
[root@test11 pillar]# cat top.sls
base:
'*':
- apache
[root@test11 pillar]# cat apache/init.sls
apache:
{% if grains['id'] == 'test22' %}
port: 8081
{% elif grains['id'] == 'test33' %}
port: 8082
{% else %}
port: 80
{% endif %}
[root@test11 pillar]# cat /srv/salt/state/apache/init.sls
apache:
pkg.installed:
- name: httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/templates/httpd.conf
- require: ##依赖系统
- pkg: apache ##表示依赖id为apache的pkg状态
- template: jinja
- context:
port: {{ salt['pillar.get']('apache:port',80) }} ##表示在没有获到值的情况下,赋默认值80
service.running:
- enable: True
- name: httpd
- watch: #watch检测配置文件,如果发生变化会重启服务
- pkg: apache
- file: apache
pillar与schedule配合使用,定时执行任务
例:每一分钟自动更新前面/srv/salt/state/hosts/templates/下的hosts文件
[root@test11 pillar]# cat top.sls
base:
'*':
- hosts
[root@test11 pillar]# cat hosts/init.sls
schedule:
hosts:
function: state.sls
minutes: 1
args:
- 'hosts' #要执行的state.sls文件