关于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文件
文档更新时间: 2019-06-03 17:42   作者:子木