zoukankan      html  css  js  c++  java
  • Saltstack pillar组件

     pillar组件

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

    下面详细描述如何进行pillar的定义和使用.

    pillar的定义:

    1.主配置文件的定义

      Saltstack认将主控端配置文件中的所以数据都定义到pillar中,而且对所有被控主机开放,可通过修改/etc/salt/master配置中的pillar_opts:Ture或False来定义是否开启或禁用这项功能,修改后执行salt '*' pillar.data 来观察效果。如下为pillar_opts:Ture的返回结果,以主机'SN100-128'为例,执行salt 'SN100-128' pillar.data .

    [root@localhost ~]# salt 'SN100-128' pillar.data
    SN100-128:
            ----------
            __role:
                master
            auth_mode:
                1
            auto_accept:
                True
            cache_sreqs:
                True
            cachedir:
                /var/cache/salt/master
            cli_summary:
                False
            client_acl:
                ----------
            client_acl_blacklist:
                ----------
            cluster_masters:
            cluster_mode:
                paranoid
            con_cache:
                False
            conf_file:
                /etc/salt/master
            config_dir:
                /etc/salt
            cython_enable:
                False
            daemon:
                True
            default_include:
                master.d/*.conf
    
    #(主机所有pillar信息,部分截图)
    

    2.SLS文件定义

        pillar支持在sls文件中定义数据,格式须符合YAML规范,与Saltstack的state组件十分相似,两者文件的配置格式、入口文件top.sls都是一致的。下面详细介绍pillar使用sls定义的配置过程。

    (1)定义pillar的主目录

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

    pillar_roots:
      base:
        - /srv/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
     maxmen:6G
    

     (3)效验pillar

      通过查看 "SN100-128" 主机的pillar数据,可以看到多出了data.sls数据项,原因是我们定义top.sls时使用“ * ”覆盖了所有主机,这样当查看“ SN100-128” 的pillar数据时可以看到我们定义的数据。如下所示,如果结果不符合预期,可以尝试刷新被控主机pillar数据,运行 salt '*' saltutil.refresh_pillar即可。

    [root@localhost~]# salt 'SN100-128' pillar.data appname flow
    SN100-128:
        ----------
        appname:
            website
        flow:
            maxconn:30000 maxmen:6G
    
    #返回主机pillar的信息
    

    pillar的使用:

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

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

     Python API格式如下:

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

    1.操作目标主机

    通过-I 选项来使用pillar来匹配被控主机:

    [root@localhost]# salt -I 'appname:website' test.ping
    SN100-128:
        True
    SN100-129:
        True
    SN100-130:
        True
    

    2.结合grains处理数据的差异性

        首先通过结合grains的ID信息来区分不同id的maxcpu的值,其次进行引用观察匹配的信息。将data.sls修改成如下形式,其中,"if ... else...endfi"为jinja2的模板语法。

    appname: website
    flow:
     maxconn:30000
     maxmen:6G
     {% if grains['id'] == 'SN100-128' %}
      maxcpu: 8
     {% else %}
      maxcpu: 4
     {% endif %}
    

    查看被控主机的pillar数据

    salt 'SN100-128' pillar.data appname flow
    

    Pillar在top.sls定义实例:

    在master端配置文件中打开pillar_root
    
    pillar_roots:
      base:
        - /etc/salt/pillar
    
    mkdir /etc/salt/pillar
    mkdir /etc/salt/pillar/init
    
    重启 /etc/init.d/salt-master restart
    
    vim /etc/salt/pillar/top.sls
    base:
      '*':
        - init.rsyslog
    
    vim /etc/salt/pillar/init/rsyslog.sls
    
    {% if grains['osfinger'] == 'CentOS-6' %}
    
    syslog:rsyslog
    {% elif grains['osfinger'] == 'CentOS-5' %}
    
    syslog: syslog
    
    {% endif %}
    
    salt '*' saltutil.refresh_pillar  //刷新
    

      

       

      

  • 相关阅读:
    Opensource .NET and Mono REST Web Services framework.NET Community Content on InfoQ Servicestack
    动态软件框架开发模型图
    数据库镜像
    DDD:策略模式如何结合动态表达式
    CentOS下j2ee环境搭建
    C#代码段编辑/编译工具
    .NET平台下不借助Office实现Word、Powerpoint等文件的解析(完)
    .NET Attribute(特性)的作用与用法
    tornado开发输入输出,数据库操作,内置模板,综合示例
    基于事件的异步编程模式(EMP)
  • 原文地址:https://www.cnblogs.com/saneri/p/5619720.html
Copyright © 2011-2022 走看看