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

[经验分享] SaltStack Pillar攻略

[复制链接]

尚未签到

发表于 2015-11-26 11:16:33 | 显示全部楼层 |阅读模式
  这个攻略假设读者已经读过了基本的SaltStack攻略
  


  Salt中的pillar接口是Salt开发中最重要的接口之一。Pillar是用来产生特定于minions的任意数据的接口。pillar中产生的数据几乎可以在Salt的任何组件中使用,用途广泛:
  高度敏感的数据:
  通过pillar传输的数据会保证只向选定的minions展现,这使得pillar可以作为Salt中管理安全信息的引擎,比如加密的key和密码。
  


  Minion配置:
  minion模块,像是execution模块,states,和returner可以通过存储在pillar中的数据配置。
  


  Variables:
  特定minions或者groups需要变量可以定义在pillar中,以后可以在sls公式或者模板文件中使用。
  


  任意的数据:
  Pillar可以包含任何基础数据结构,像是一个列表的值,键值存储结构都可以定义使得可以在sls公式中简单的遍历一组值。
  


  Pillar是使用Salt时最重要的系统之一,本攻略的目的就是在几分钟内创建并运行一个简单的pillar,然后去深入到pillar的功能和指明pillar的数据在哪里是可用的。
  


  创建一个Pillar
  pillar在Salt中已经是默认运行的。minion中的pillars可以通过以下的命令来查看:
  


  

salt "*" pillar.items


注意,在0.16.2之前的版本中,这个函数的名字是pillar.data。为了与以前版本兼容,这个函数名仍然是可用的。  
  


  默认情况下,master配置文件中的内容是被载入到每个minion的pillar中的。这使得master的配置文件可以作为所有minions的全局配置。
  


  pillar和state tree的建立方式相似,由sls文件组成,并有一个top文件,这和state tree类似。pillar默认的路径是:/srv/pillar。
  


  注意,pillar的位置可以通过master配置见中的pillar_roots配置项来自定义。
  


  要来是建立pillar的话,我们需要/srv/pillar目录已经存在:
  

mkdir /srv/pillar


现在,一个简单的top文件,和states的top文件一样的格式,需要被创建:  
  

/srv/pillar/top.sls
base:
'*':
- data


这个top文件将所有的minions和data.sls关联起来。现在/srv/pillar/data.sls文件需要被填入一些内容:  
  

/srv/pillar/data.sls
info: some data


现在这个文件已经保存了,minions的pillars将会被更新:  
  

salt '*' pillar.items

  
  info将会出现在返回的pillar数据中。
  


  更复杂一些的数据
  Pillar文件是sls文件,和states一样,但是不同于states,它们不需要定义公式,数据可以任意的,这个例子就创建了一个带有UID的用户:
  

/srv/pillar/users/init.sls
users:
thatch: 1000
shouse: 1001
utahdave: 1002
redbeard: 1003


注意,sates中的目录查询在pillar中也同样适用,所以users/init.sls这个文件可以通过在top文件中指定users来获得引用。  
  

/srv/pillar/top.sls:
base:
'*':
- data
- users


现在,数据对于minions就是可用的了。要在state中使用pillar数据,值需要通过Jinja来访问pillar即可:  
  

/srv/salt/users/init.sls
{% for user, uid in pillar.get('users', {}).items() %}
{{user}}:
user.present:
- uid: {{uid}}
{% endfor %}


这种方法允许用户在pillar中安全地定义数据,然后在sls文件中应用这些数据。  
  


  通过pillar来参数化states
  


  pillar中最强大的抽象之一就是将states参数化的能力。不是通过在state上下文中定义宏或者函数,整棵state树都可以自由地根据minion的pillar来参数化。
  


  这种方法使得Salt在拥有了很大灵活性的同时,仍然看上去非常直观。这也意味着,在state树中简单的sls公式可以在不重构state树的前提下直接参数化。
  


  一个非常简单的例子:根据不同的Linux发行版本,映射到不同的包名:
  

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


新的pkg sls需要更新到top文件中:  
  


  

/srv/pillar/top.sls
base:
'*':
- data
- users
- pkg


现在minions在pillar中,会自动根据操作系统来确定值,所以sls文件可以被安全地参数化:  
  

/srv/salt/apache/init.sls
apache:
pkg.installed:
- name: {{ pillar['pkgs']['apache'] }}


或者,如果没有找到指定的pillar,也可以使用一个默认值来代替:  
  

/srv/salt/apache/init.sls
apache:
pkg.installed:
- name: {{ salt['pillar.get']('pkgs:apache', 'httpd') }}


在上面的例子中,如果pillar['pkgs']['apache']的pillar值没有指定,那么默认的httpd就会被使用。  
  


  Pillar使简单的state可以简单扩展
  


  pillar的设计目标之一就是简单地扩展sls公式到更加灵活的公式,而不会重构或者使state变复杂。
  


  一个简答的公式:
  

/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


可以简单地转换成一个强大的、参数化的公式:  
  

/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


这是vimrc的src地址现在就可以通过pillar来改变了:  
  

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


确认正确的vimrc被发送到正确的minion上。  
  


  关于Pillar更多
  


  pillar数据是在Salt master上生成的并被安全地分布到minions上。Salt当定义pillar的时候,不必限制在sls文件,也可以从外部资源获得数据。这对于架构信息存储于其它地方的情况下非常有用。
  


  

运维网声明 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-143832-1-1.html 上篇帖子: 基于saltstack实现的配置集中化管理 下篇帖子: SaltStack Execution Modules
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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