zoukankan      html  css  js  c++  java
  • salt之pillar组件

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

    pillar的定义:

    1、主配置文件定义

    salt默认将主控端配置文件中的所有数据都定义到pillar中,而且对所有被控主机开放,可通过修改/etc/salt/master配置中的pillar_opts: True或False来定义是否开户或禁用这项功能,修改后执行salt '*' pillar.data来观察效果。

    2、SLS文件定义

    pillar支持在slsy文件中定义数据,格式须符合YAML规范,与salt和state组件十分相似,两者文件的配置格式、入口文件top.sls都是一致的。

    (1)定义pillar的主目录

    修改主配置文件/etc/salt/master的pillar_roots参数,定义pillar的主目录

    同时创建pillar目录,执行命令: install -d /srv/pillar

    (2)定义入口文件top.sls

    入口文件的作用一般是定义pillar的数据覆盖被控主机的有效域范围,"*" 代表任意主机,其中包括了一个data.sls文件,

    /srv/pillar/top.sls

    base:

      '*':

        - data

    /srv/pillar/data.sls

    appname: website

    flow:

      maxconn: 30000

      maxmem: 6G

    (3)校验pillar

    通过 salt 'myhost' pillar.data appname flow 命令可以看到多出了上面定义的 data.sls数据项。如果结果不符合预期,可以尝试刷新被控机pillar数据,

    运行 salt 'myhost' saltutil.refresh_pillar 即可刷新

     

    3、pillar的使用

     完成pillar配置后,接下来我们可以在state、模板文件中引用,模板格式为 "{{ pillar变量 }}" ,例如:

    {{ pillar['appname'] }} (一级字典)

    {{ pillar['flow']['maxconn'] }} (二级字典) 或 {{ salt['pillar.get']('flow: maxconn'),{} }}

     

    Python API格式如下:

    pillar['flow']['maxconn']

    pillar.get('flow:appname',{})

     结合grains处理数据的差异性----示例:

     3.1 创建pillar目录和top.sls文件

    1
    2
    3
    4
    5
     # mkdir /srv/pillar
     # vi /srv/pillar/top.sls
     base:
       '*':
     - ip

     3.2 先通过pillar获取minion主机IP

    1
    2
     # vi /srv/pillar/ip.sls
     ip: {{ grains['ipv4'][1] }}

     #写完后,执行sls命令,可以看到已经获取到IP

    1
    2
    3
    4
    5
    6
    7
    8
    9
     # salt '*' pillar.item ip
     host2:
         ----------
         ip:
             192.168.18.213
     host1:
         ----------
         ip:
             192.168.18.212

     

     

     

     

    既然grains与pillar类似,就说下区别:

    1.grains是minion每次加载时获取本地系统信息数据,是静态的,固定的,而pillar是动态加载数据,随时变化的,比grains更灵活。

    2.grains数据存储在minion本地,pillar存储在master

     

     

    jinja2官网语法介绍: http://jinja.pocoo.org/docs/dev/templates/

     

     

     

  • 相关阅读:
    jquery easy ui 学习 (8)basic treegrid
    jquery easy ui 学习 (7) TreeGrid Actions
    jquery easy ui 学习 (6) basic validatebox
    jquery easy ui 学习 (5) windowlayout
    jquery easy ui 学习 (4) window 打开之后 限制操纵后面元素属性
    提示“应用程序无法启动,因为应用程序的并行配置不正确”不能加载 System.Data.SQLite.dll
    visual studio 添加虚线的快捷键
    VS2010打开项目时,出现“已经在解决方案中打开了具有该名称的项目”问题的解决方案
    visual studio 编译时 出现 Files 的值 乱码
    微信 连接被意外关闭
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/5089582.html
Copyright © 2011-2022 走看看