标签:arc name vim配置文件 foo 分析 jin debian 重构 混淆
pillar作为一个树状结构配置在master端,然后分发到minion端。
有时候会把grains与pillar这两个东西弄混淆,grains一般是由minion端自己生成的数据,譬如系统信息和具体的环境信息,而pillar数据则定义一个或多个minion的特征数据,在master生成。
(1)高度敏感的数据
保证指定信息只能被传递到指定的minion端,有利于信息安全,譬如存储密钥密码之类的
(2)配置minion
一些执行模块,state文件,returner,需要进行被修改的,会被定义在pillar里面
(3)变量
定义pillar变量,便于sls文件和模板文件进行访问
(4)任意数据
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
*表示默认关联到所有minion上,data sls文件需要被定义
/srv/pillar/data.sls:
info: some data
将新的pillar变量同步到minion端,使用如下命令:
salt ‘*‘ saltutil.refresh_pillar
使用salt ‘*‘ pillar.items可以查看新的pillar变量是否成功
与state文件不同的是,pillar文件不需要被定义成formulas格式,譬如下面一个设置UID的配置
/srv/pillar/users/init.sls:
1 users: 2 thatch: 1000 3 shouse: 1001 4 utahdave: 1002 5 redbeard: 1003
在sls文件中使用pillar数据,可以以模板的形式引入:
1 {% for user, uid in pillar.get(‘users‘, {}).items() %} 2 {{user}}: 3 user.present: 4 - uid: {{uid}} 5 {% endfor %}
释义:
1、pillar.get()获取到users键里面定义好的用户UID键列表
2、{% for %}
{% endfor %}
为模板for循环的格式
3、{{user}}为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 %}
再将pkgs添加到pillar环境top文件中
/srv/pillar/top.sls:
1 base: 2 ‘*‘: 3 - data 4 - users 5 - pkg
最后将pillar用于sls文件中
/srv/salt/apache/init.sls:
1 apache: 2 pkg.installed: 3 - name: {{ pillar[‘pkgs‘][‘apache‘] }}
当模板中定义的条件均不匹配时可以使用pillar.get设置默认值
1 apache: 2 pkg.installed: 3 - name: {{ salt[‘pillar.get‘](‘pkgs:apache‘, ‘httpd‘) }}
整个逻辑分析:
(1)定义pillar数据,在pillar数据结构里面引入jinja模板的逻辑并使用grains变量作为参数条件,使之可以灵活的匹配minion端的具体环境
(2)将定义好的pillar数据包含到top文件中,指定匹配的minion使用范围
(3)在sls文件中引入pillar变量
注意:pillar就是一个python的字典结构,所以模板引擎可以使用get,items这些字典方法来操作
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
这是一个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
/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 %}
/srv/pillar/top.sls:
1 base: 2 ‘*‘: 3 - pkg 4 - edit.vim
评析:
将需要同步的vim配置文件路径和pkg包名参数化,使之可以根据minion端的实际环境进行灵活的适应
在命令行操作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"}}‘
注意:pillar变量可以覆盖sls文件中已经设置好的变量值
pillar被在master生成定义且被安全的芬分发到minion端,pillar除了在pillar的sls文件中定义,还可以从外部引入。
在minion端配置pillar变量和master端是一样的,例如配置minion的returner使用mysql模块的配置,这在你需要动态配置的时候非常方便
示例:
mysql.pass: hardtoguesspassword
标签:arc name vim配置文件 foo 分析 jin debian 重构 混淆
原文地址:http://www.cnblogs.com/solitarywares/p/7461214.html