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/

     

     

     

  • 相关阅读:
    I2C总线之(三)---以C语言理解IIC
    /sys/class/gpio 文件接口操作IO端口(s3c2440)
    CSP-201503
    CSP-201409
    CSP-201412
    Linux命令行学习笔记
    sstream
    VECTOR
    CSP-201403
    CSP-201312
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/5089582.html
Copyright © 2011-2022 走看看