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

[经验分享] STORING STATIC DATA IN THE PILLAR 在pillar设置静态数据

[复制链接]

尚未签到

发表于 2017-11-22 14:16:40 | 显示全部楼层 |阅读模式
STORING STATIC DATA IN THE PILLAR

在pillar中存储静态变量
  介绍:
  pillar作为一个提供全局变量的接口,可以分发给minion,使用类似salt 状态树的方式管理,一般放在master上,可以将敏感数据的使用具体到某些minion上。


在master端声明pillar变量
  参照file_roots环境配置,为每一个环境提供一个pillar环境,不可放在state状态树的子目录下,示例:


DSC0000.gif DSC0001.gif


pillar_roots:
   base:
     - /srv/pillar

在pillar中使用top.sls文件
base:
   '*':
     - packages
View Code  base:表示应用于pillar定义的base环境,每一个file_roots对应一个pillar_roots环境。
*:表示匹配minion,可以有多种匹配方式,可以使用grains变量
- packages:表示一个packages的sls文件被调用,以/srv/pillar/packages.sls或/srv/pillar/packages/init.sls的方式存在

  对于pilar中top.sls文件的一点理解:
  相当于一个必要的pillar变量使用环境的控制信息,可以与saltenv环境相关联,是必要存在的,每一个在file_roots引用了的pillar变量,都必须在对应的pillar_roots环境下的top.sls被完整定义。
  一个在top文件中使用grains配置的示例:





dev:
   'os:Debian':
     - match: grain
     - packages
View Code  #在sls文件中使用模板





/srv/pillar/packages.sls
{% if grains['os'] == 'RedHat' %}
apache: httpd
git: git
{% elif grains['os'] == 'Debian' %}
apache: apache2
git: git-core
{% endif %}
View Code  注意:pillar数据可以在within modules, renderers, State SLS files被使用。
  一个在sls中使用pillar变量的示例:





git:
   pkg.installed:
     - name: {{ pillar['git'] }}
View Code  pillar变量定义的两种方式:
  (1)直接在sls文件中定义键值对





base:
   '*':
      - common_pillar

common_pillar.sls
foo: bar
boo: baz
View Code  (2)使用init.sls的方式





common_pillar/init.sls
foo: bar
boo: baz
View Code  在多pillar环境下如果灵活的使用top文件:





{{ saltenv }}:
   '*':
      - common_pillar
View Code  saltenv变量由执行state.sls模块时的saltenv='XX'参数决定。


PILLAR NAMESPACE FLATTENING
  示例:





base:
   '*':
     - packages
     - services

packages.sls
bind: bind9

services.sls
bind: named
View Code  在这种情况下bind的值会取第二个,第一个会被覆盖,所以要避免这种问题,可以使用嵌套字典的形式。


PILLAR DICTIONARY MERGING
  pillar字典合并,当多个sls文件定义了相同的键,且定义的键都是一个嵌套字典,pillar将递归的进行合并键里面的内容示例:





packages.sls:
bind:
   package-name: bind9
   version: 9.9.5
   
services.sls:
bind:
   port: 53
   listen-on: any
View Code  结果是:
$ salt-call pillar.get bind





local:
     ----------
     listen-on:
         any
     package-name:
         bind9
     port:
         53
     version:
         9.9.5
View Code

INCLUDING OTHER PILLARS
  pillar中的sls文件可以包含其他pillar sls文件,这个功能可以用于将一些公共的pillar变量抽象出来存放在一个基础的sls文件中,被其他sls文件引用。
  示例:





include:
   - users
   
include:
   - users:
       defaults:
           sudo: ['bob', 'paul']
       key: users
View Code  可以提供两个附加的选项,定义用于设置默认值的键值对


IN-MEMORY PILLAR DATA VS. ON-DEMAND PILLAR DATA
  由于pillar数据不会总是在master端实时进行编译,所以minion会存一份pillar数据
  查看minion端的pillar数据的几种方式
  pillar.item
  pillar.get
  pillar.raw
  由于minion中的pillar数据并不是实时更新的,所以有时候需要进行手动刷新,以上的3个命令不会触发数据刷新,手动刷新命令如下:
  salt '*' saltutil.refresh_pillar
  但是在执行某些命令的时候会触发pillar数据刷新,如下:
  Running states #运行state文件
  Running pillar.items执行items命令时


HOW PILLAR ENVIRONMENTS ARE HANDLED
  在使用多个pillar环境的时候,默认pillar是将所有环境的数据集合到一起的。
  如何限制minion端接受pillar变量的环境,minion端配置:
  pillarenv: base  
  #该选项会忽略除base以外的pillar变量
  还有一种方式在执行state模块执行的时候指定pillar环境:
  salt '*' state.apply mystates pillarenv=testing


VIEWING PILLAR DATA
  有以下几个函数展示pillar数据:
  pillar.item
从in-memory中检索一个或多个键值对
  pillar.items
会先刷新一遍master端的pillar数据,再同步过来
  pillar.raw
类似于上一个,但是不会获取最新的数据
  pillar.get
该方法的使用如下示例:





     foo:
       bar:
         baz: qux
     #一个嵌套的字典结构
View Code  模板中是这样引用的:
  {{ pillar['foo']['bar']['baz'] }}
  pillar.get函数能够更加安全的引用这个pillar变量,且当变量不存在的时候可设置默认值
  {{ salt['pillar.get']('foo:bar:baz', 'qux') }}


SETTING PILLAR DATA AT THE COMMAND LINE
  在命令行配置pillar变量,意味着pillar不止是可以从pillar环境中取得,示例如下:
  salt 'xxx' state.sls XXconfig saltenv='XXX' pillar='{"ip": "spam"}'
释义:手动设置的pillar数据将覆盖从file_roots环境取得的IP变量数据


MASTER CONFIG IN PILLAR
  pillar数据一般存储在master端,也可以将这些数据推送到所有minion端,但是这是非常危险的,因为这样几乎把master上的所有配置的数据全部暴露出去了,包含master端的配置文件信息,node分组信息等,默认是禁止的。
  pillar_opts: True


MINION CONFIG IN PILLAR
  在minion端配置pillar
  参考master的pillar配置,譬如配置一个mysq密码
  mysql.pass: hardtoguesspassword


MASTER PROVIDED PILLAR ERROR
  master端提供pillar数据错误报警,可以设置为关掉
  pillar_safe_render_error: False

运维网声明 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-409514-1-1.html 上篇帖子: Linux 入侵检测 下篇帖子: linux中安装软件的集中方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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