设为首页 收藏本站
查看: 750|回复: 0

[经验分享] PILLAR WALKTHROUGH(实践)

[复制链接]

尚未签到

发表于 2017-11-22 22:35:06 | 显示全部楼层 |阅读模式
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文件示例:


DSC0000.gif DSC0001.gif


/srv/pillar/top.sls:
base:
   '*':
     - 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:





users:
   thatch: 1000
   shouse: 1001
   utahdave: 1002
   redbeard: 1003
View Code  在sls文件中使用pillar数据,可以以模板的形式引入:





{% for user, uid in pillar.get('users', {}).items() %}
{{user}}:
   user.present:
     - uid: {{uid}}
{% 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:





pkgs:
   {% if grains['os_family'] == 'RedHat' %}
   apache: httpd
   vim: vim-enhanced
   {% elif grains['os_family'] == 'Debian' %}
   apache: apache2
   vim: vim
   {% elif grains['os'] == 'Arch' %}
   apache: apache
   vim: vim
   {% endif %}
View Code  再将pkgs添加到pillar环境top文件中
/srv/pillar/top.sls:





base:
   '*':
     - data
     - users
     - pkg
View Code  最后将pillar用于sls文件中
/srv/salt/apache/init.sls:





apache:
   pkg.installed:
     - name: {{ pillar['pkgs']['apache'] }}
View Code  当模板中定义的条件均不匹配时可以使用pillar.get设置默认值





apache:
   pkg.installed:
     - 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:





vim:
   pkg.installed: []

/etc/vimrc:
   file.managed:
     - source: salt://edit/vimrc
     - mode: 644
     - user: root
     - group: root
     - require:
       - pkg: vim
View Code  这是一个sls文件,编写的目的非常明确,使用状况非常单一
改良的示例:
  /srv/salt/edit/vim.sls:





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

/etc/vimrc:
   file.managed:
     - source: {{ pillar['vimrc'] }}
     - mode: 644
     - user: root
     - group: root
     - require:
       - pkg: vim
View Code  /srv/pillar/edit/vim.sls:





{% if grains['id'].startswith('dev') %}
vimrc: salt://edit/dev_vimrc
{% elif grains['id'].startswith('qa') %}
vimrc: salt://edit/qa_vimrc
{% else %}
vimrc: salt://edit/vimrc
{% endif %}
View Code  /srv/pillar/top.sls:





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


SETTING PILLAR DATA ON THE COMMAND LINE
  在命令行操作pillar变量
  当运行state.apply <salt.modules.state.apply_()时pillar变量会在命令行被直接设置
示例:





salt '*' state.apply pillar='{"foo": "bar"}'
salt '*' state.apply my_sls_file pillar='{"hello": "world"}'
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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-409675-1-1.html 上篇帖子: Linux安装php环境phpstudy版 下篇帖子: Recovering unassigned shards on elasticsearch 2.x——副本shard可以设置replica为0在设置回来
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表