saltstack基础组件之Pillar

Posted by Leemon on July 19, 2016

Pillar

Pillar是salt用来给minions提供全局变量的接口,Pillar是用来存储敏感数据的。相对于grains的静态属性,Pillar属性是动态可变的,根据匹配条件的不同,Pillar可设置相应的属性。

同Grains一样,设置Pillar也有多种不同的方式

配置文件自定义pillar

master中默认注释掉的pillar的目录为/srv/pillar,默认的pillar配置文件入口为/srv/pillar/top.sls

启用pillar–/etc/salt/master
pillar_roots:
  base:
    - /srv/pillar

top.sls的结构与匹配方式

base:
  '*':
    - pkgs

此配置表示默认所有的minion全部引用pkgs.sls中定义的KV

Pillar的命名空间

所有的Pillar值共享同一个命名空间,相同name的pillar值后定义值会覆盖之前的定义,即last one wins,同一个KEY下面如果有多个值,则合并,如果同一个key下面的值也有相同,则同样执行last one wins

top.sls

base:
  '*':
    - users
    - users1

users.sls

from: NJ
userinfo:
  name: Test
  age: 20
  isWorking: False

users1.sls

from: HB
userinfo:
  isWorking: True

执行salt '*' pillar.items返回结果 pillar

命令行自定义pillar
salt '*' state.apply pillar='{"cheese": "spam"}'

使用命令行自定义pillar发送pillar数据,是直接发送给全部的minions,而不是直接发给目标minion

pillar定义的变量在State File中的引用

直接引用

apache:
  pkg.installed:
    - name: {{ pillar['pkgs']['apache']}}

使用pillar的GET方法引用

apache:
  pkg.installed:
    - name: {{ salt['pillar.get']('pkgs','apache')}}