PILLAR WALKTHROUGH(实践)

PILLAR WALKTHROUGH

pillar作为一个树状结构配置在master端,然后分发到minion端,有时候grains数据可能与pillar数据之间存在一定的重合,目前发现的是当你在master端定义的pillar数据依赖于grains时,这部分数据是重合的,分属于grains和pillar,可以分别使用grains.items和pillar.items同时看到他们。
有时候会把grains与pillar这两个东西弄混淆,grains一般是由minion端自己生成的数据,譬如系统信息和具体的环境信息,而pillar数据则定义一个或多个minion的特征数据,在master生成。

pillar数据的用途:

(1)高度敏感的数据
    保证指定信息只能被传递到指定的minion端,有利于信息安全,譬如存储密钥密码之类的
(2)配置minion
    一些执行模块,state文件,returner,需要进行被修改的,会被定义在pillar里面
(3)变量
    定义pillar变量,便于sls文件和模板文件进行访问
(4)任意数据
    pillar作为一个可以包含任何基础数据的字典结构,以键值对的形式存放


SETTING UP PILLAR

查看pillar变量
salt '*' pillar.items

默认pillar数据没有被加载到minion端,由于pillar端的数据比较敏感,非常不建议这么做,配置方法:
在master端配置pillar_opts为True

pillar配置与state的状态树类似,也有一个top文件,默认在/srv/pillar,可以自定义的配置环境,注意不要配置在file_roots里面,top文件示例:

1 /srv/pillar/top.sls:
2 base:
3   '*':
4     - data
View Code

*表示默认关联到所有minion上,data sls文件需要被定义
/srv/pillar/data.sls:
info: some data

将新的pillar变量同步到minion端,使用如下命令:
salt '*' saltutil.refresh_pillar

使用salt '*' pillar.items可以查看新的pillar变量是否成功


MORE COMPLEX DATA

与state文件不同的是,pillar文件不需要被定义成formulas格式,譬如下面一个设置UID的配置
/srv/pillar/users/init.sls:

1 users:
2   thatch: 1000
3   shouse: 1001
4   utahdave: 1002
5   redbeard: 1003
View Code

在sls文件中使用pillar数据,可以以模板的形式引入:

1 {% for user, uid in pillar.get('users', {}).items() %}
2 {{user}}:
3   user.present:
4     - uid: {{uid}}
5 {% endfor %}
View Code

释义:
1、pillar.get()获取到users键里面定义好的用户UID键列表
2、{% for %}
   {% endfor %}
   为模板for循环的格式
3、{{user}}为pillar数据的引用方法


PARAMETERIZING STATES WITH PILLAR

利用pillar将state文件编写的参数化,使之更灵活的匹配指定的minion
示例:
/srv/pillar/pkg/init.sls:

 1 pkgs:
 2   {% if grains['os_family'] == 'RedHat' %}
 3   apache: httpd
 4   vim: vim-enhanced
 5   {% elif grains['os_family'] == 'Debian' %}
 6   apache: apache2
 7   vim: vim
 8   {% elif grains['os'] == 'Arch' %}
 9   apache: apache
10   vim: vim
11   {% endif %}
View Code

再将pkgs添加到pillar环境top文件中
/srv/pillar/top.sls:

1 base:
2   '*':
3     - data
4     - users
5     - pkg
View Code

最后将pillar用于sls文件中
/srv/salt/apache/init.sls:

1 apache:
2   pkg.installed:
3     - name: {{ pillar['pkgs']['apache'] }}
View Code

当模板中定义的条件均不匹配时可以使用pillar.get设置默认值

1 apache:
2   pkg.installed:
3     - name: {{ salt['pillar.get']('pkgs:apache', 'httpd') }}
View Code

整个逻辑分析:

(1)定义pillar数据,在pillar数据结构里面引入jinja模板的逻辑并使用grains变量作为参数条件,使之可以灵活的匹配minion端的具体环境
(2)将定义好的pillar数据包含到top文件中,指定匹配的minion使用范围
(3)在sls文件中引入pillar变量

注意:pillar就是一个python的字典结构,所以模板引擎可以使用get,items这些字典方法来操作


PILLAR MAKES SIMPLE STATES GROW EASILY

pillar可以让sls文件变得更加灵活,减少不必要的重构

示例分析:
/srv/salt/edit/vim.sls:

 1 vim:
 2   pkg.installed: []
 3 
 4 /etc/vimrc:
 5   file.managed:
 6     - source: salt://edit/vimrc
 7     - mode: 644
 8     - user: root
 9     - group: root
10     - require:
11       - pkg: vim
View Code

这是一个sls文件,编写的目的非常明确,使用状况非常单一
改良的示例:

/srv/salt/edit/vim.sls:

 1 vim:
 2   pkg.installed:
 3     - name: {{ pillar['pkgs']['vim'] }}
 4 
 5 /etc/vimrc:
 6   file.managed:
 7     - source: {{ pillar['vimrc'] }}
 8     - mode: 644
 9     - user: root
10     - group: root
11     - require:
12       - pkg: vim
View Code

/srv/pillar/edit/vim.sls:

1 {% if grains['id'].startswith('dev') %}
2 vimrc: salt://edit/dev_vimrc
3 {% elif grains['id'].startswith('qa') %}
4 vimrc: salt://edit/qa_vimrc
5 {% else %}
6 vimrc: salt://edit/vimrc
7 {% endif %}
View Code

/srv/pillar/top.sls:

1 base:
2   '*':
3     - pkg
4     - edit.vim
View Code

评析:
  将需要同步的vim配置文件路径和pkg包名参数化,使之可以根据minion端的实际环境进行灵活的适应


SETTING PILLAR DATA ON THE COMMAND LINE

在命令行操作pillar变量

当运行state.apply <salt.modules.state.apply_()时pillar变量会在命令行被直接设置
示例:

1 salt '*' state.apply pillar='{"foo": "bar"}'
2 salt '*' state.apply my_sls_file pillar='{"hello": "world"}'
3 salt '*' state.sls my_sls_file pillar='{"foo": {"bar": "baz"}}'
View Code

注意:pillar变量可以覆盖sls文件中已经设置好的变量值


MORE ON PILLAR

pillar被在master生成定义且被安全的芬分发到minion端,pillar除了在pillar的sls文件中定义,还可以从外部引入。


MINION CONFIG IN PILLAR

在minion端配置pillar变量和master端是一样的,例如配置minion的returner使用mysql模块的配置,这在你需要动态配置的时候非常方便

示例:

  mysql.pass: hardtoguesspassword

原文地址:https://www.cnblogs.com/solitarywares/p/7461214.html