pillar是一个定义在全局的变量,并且可以分发给指定的minion,有点像group_vars和host_vars
与之相对的,grains就是局部的变量,但grains的特性就导致不适合存放敏感数据
安全性 :敏感数据(如密码、密钥、API令牌)不能写在所有Minion都能看到的State文件里。
针对性 :不同的Minion(服务器)需要不同的配置。例如,Web服务器需要数据库的连接地址,而数据库服务器本身不需要这个信息。
灵活性 :将数据与配置逻辑(State状态文件)分离,使States更通用,数据管理更灵活。
定义 pillar变量与salt状态文件使用方法类似,都需要在配置文件中定义其存放位置,并且可以区分出多环境
1 2 3 4 5 6 7 8 9 10 11 12 13 14 cat /etc/salt/master... pillar_roots: base: - /srv/pillar ... mkdir -p /srv/pillarsystemctl restart salt-master.service echo "web_package: httpd dhcp_package: dhcp-server" > /srv/pillar/centos.slsecho "web_package: apache2 dhcp_package: isc-dhcp-server" > /srv/pillar/ubuntu.sls
定义top.sls top.sls是salt开发者定义的高级pillar文件,用来分配pillar文件中的变量是应用给哪些主机的
1 2 3 4 5 6 7 8 9 10 11 12 vim /srv/pillar/top.sls base: 'minion[12]' : - centos 'minion3' : - ubuntu 前面进行主机名的匹配(支持正则) -后面就是使用的pillar文件 针对minion1和2,应用centos.sls的pillar文件 针对minion3,应用ubuntu.sls的pillar文件
pillar模块的用法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 salt minion1 pillar. pillar.data pillar.file_exists pillar.item pillar.ls pillar.ext pillar.filter_by pillar.items pillar.obfuscate pillar.fetch pillar.get pillar.keys pillar.raw salt \* pillar.ls minion3: - web_package - dhcp_package minion1: - web_package - dhcp_package minion2: - web_package - dhcp_package salt \* pillar.items minion3: ---------- dhcp_package: isc-dhcp-server web_package: apache2 minion1: ---------- dhcp_package: dhcp-server web_package: httpd minion2: ---------- dhcp_package: dhcp-server web_package: httpd [root@minion1 ~] local : ---------- web_package: httpd
使用pillar变量 我们直接使用jinja2进行引用
如果不使用pillar,这种区分就需要通过grains做条件判断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 vim /srv/salt/dev/dhcp.sls install dhcp: pkg.installed: - name: {{ pillar.dhcp_package }} salt \* state.sls saltenv=dev dhcp --summary ------------------------------------------- Summary ------------------------------------------- -------------------------------------------
改造之前的sls状态文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 重新编辑pillar文件 /srv/pillar/centos.sls web_package: httpd dhcp_package: dhcp-server web_service: httpd /srv/pillar/ubuntu.sls web_package: apache2 dhcp_package: isc-dhcp-server web_service: apache2 原本: {% if grains.os_family == 'RedHat' %} install httpd: pkg.installed: - name: httpd start httpd: service.running: - name: httpd - enable : yes {% elif grains.os_family == 'Debian' %} install apache: pkg.installed: - name: apache2 start apache: service.running: - name: apache2 - enable : yes {% endif %} 现在: vim /srv/salt/prod/web.sls install web: pkg.installed: - name: {{ pillar.web_package }} start web-service: service.running: - name: {{ pillar.web_service }} - enable : yes salt \* state.sls saltenv=prod web --summary ------------------------------------------- Summary ------------------------------------------- -------------------------------------------