PILLAR WALKTHROUGH(实践)

PILLAR WALKTHROUGH

pillar作为一个树状结构配置在master端,然后分发到minion端。
有时候会把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

*表示默认关联到所有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

在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数据的引用方法


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 %}

再将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 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

这是一个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端的实际环境进行灵活的适应


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"}}‘

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


MORE ON PILLAR

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


MINION CONFIG IN PILLAR

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

示例:

  mysql.pass: hardtoguesspassword

时间: 2024-08-24 23:19:35

PILLAR WALKTHROUGH(实践)的相关文章

OPEN(SAP) UI5 学习入门系列之四:更好的入门系列-官方Walkthrough

好久没有更新了,实在不知道应该写一些什么内容,因为作为入门系列,实际上应该更多的是操作而不是理论,而在UI5 SDK中的EXPLORER里面有着各种控件的用法,所以在这里也没有必要再来一遍,还是看官方的用法更地道. 看一下基于最新的库所推荐的项目结构. 另外,我觉得对于初学者来说是一个非常好的消息,就是UI5版本从1.28更新到1.30以及更高之后,Tutorial系列有了重大更新,之前的Get Started->Tutorials->Application Best Practice现在改为

敏捷测试的方法和实践

文 / 朱少民 有一次,当开发人员完成当前Sprint 任务的代码之后,测试人员.开发人员和产品经理一起来浏览产品.从头到尾走一遍,产品经理发现了问题,认为需要对功能进行比较大的修改.这时开发人员估计需要两天时间才能完成代码,但测试人员反对这样做,我们本来只有5天测试时间,加上这次新做的功能比较多.开发代码质量不高,验收测试已经很紧张.如果再延迟两天,测试没法完成.产品经理说,你们不是在用敏捷测试方法,应该测得很快,三天应该能完成测试工作啊! 什么是敏捷测试呢?敏捷测试当然不能简单地理解为测得更

Saltstack系列5:Saltstack之pillar组件

pillar组件 pillar也是Saltstack最重要的组件之一,其作用是定义与被控主机相关的任何数据,定义好的数据可以被其他组件使用,如模板.state.API等. 在pillar中定义的数据与不同业务特性的被控主机相关联,这样不同被控主机只能看到自己匹配的数据,因此pillar安全性很高,适用于一些比较敏感的数据,这也是区别于grains最关键的一点,如定义不同业务组主机的用户id.组id.读写权限.程序包等信息,定义的规范是采用Python字典形式,即键/值,最上层的键一般为主机的id

自动化运维之SaltStack实践视频教程

点我开始学习: http://edu.51cto.com/course/course_id-2354.html 1      培训目标 本课程的目标是让所有参加培训的学员都可以使用SaltStack进行服务器管理,熟练使用远程执行的功能批量操作服务器,使用配置管理进行自动化安装.部署和管理.同时可以根据企业的生产需求进行自定义的开发.最后带领学员完成生产项目-使用<SaltStack进行OpenStack自动化部署>. 2      预备知识 l  熟悉Linux基本命令及系统管理. l  熟

5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践

5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践 扩展 vim的特殊用法 http://www.apelearn.com/bbs/thread-9334-1-1.html vim常用快捷键总结 http://www.apelearn.com/bbs/thread-407-1-1.html vim快速删除一段字符 http://www.apelearn.com/bbs/thread-842-1-1.html vim乱码 http://www.apelearn.com/bbs/thr

分布式开放消息系统(RocketMQ)的原理与实践

分布式消息系统作为实现分布式系统可扩展.可伸缩性的关键组件,需要具有高吞吐量.高可用等特点.而谈到消息系统的设计,就回避不了两个问题: 消息的顺序问题 消息的重复问题 RocketMQ作为阿里开源的一款高性能.高吞吐量的消息中间件,它是怎样来解决这两个问题的?RocketMQ 有哪些关键特性?其实现原理是怎样的? 关键特性以及其实现原理 一.顺序消息 消息有序指的是可以按照消息的发送顺序来消费.例如:一笔订单产生了 3 条消息,分别是订单创建.订单付款.订单完成.消费时,要按照顺序依次消费才有意

php各种设计模式简单实践思考

前言 我一直觉得什么框架,版本,甚至语言对于一个coder来说真的不算什么,掌握一个特别高大上的一个框架或者是一个新的,少众的语言真的不算什么,因为你可以,我要花时间也可以,大家都是这样的.所以基本的显得额外重要,即是算法和数据结构,再就是好的设计模式了,,,听过一句话,是好的数据结构是让计算机更快的工作,而一个好的设计模式则是使开发者工作的更快! 单例模式 单例模式特点 $_instance 必须声明为静态的私有变量 构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new 类从而失去

VS2010 Extension实践(2)

在上一篇(VS2010 Extension (1)实践)里,主要展示了如何使用MEF扩展VS2010,来扩展编辑控制和展现自己的UI:在实现QuickToolbar的时候,发现MEF仅仅提供了很基本的编辑控制,如果需要高级的操作,比如注释选择的代码,就捉襟见肘,很是麻烦. 本篇我将展示如何深入挖掘VS2010 Extension,使它成为锋利的军刀,而不是绣花枕头.鉴于此,这里就从上面提到了的Feature--注释和取消注释选择的代码来剖析,希望可以为大家拓宽思路,更好的利用VS2010. 首先

displaytag的Excel导出实践

本文转自 http://lingceng.iteye.com/blog/1820081/ Displaytag官网有1.0, 1.1, 1.2等,注意找到对应的版本.源码和API可以在Maven库中找到.   常规的使用不是问题,这里说说关于Excel导出的问题,中文乱码,使用POI等.我使用的是Displaytag1.1. 基本导出功能   这种情况只需引入displaytag-1.1.jar.   设置column属性media="html"将不会导出,media="ex