zoukankan      html  css  js  c++  java
  • PILLAR WALKTHROUGH(实践)

    PILLAR WALKTHROUGH

    pillar作为一个树状结构配置在master端,然后分发到minion端,有时候grains数据可能与pillar数据之间存在一定的重合,目前发现的是当你在master端定义的pillar数据依赖于grains时,这部分数据是重合的,分属于grains和pillar,可以分别使用grains.items和pillar.items同时看到他们。
    有时候会把grains与pillar这两个东西弄混淆,grains一般是由minion端自己生成的数据,譬如系统信息和具体的环境信息,而pillar数据则定义一个或多个minion的特征数据,在master生成。

    pillar数据的用途:

    (1)高度敏感的数据
        保证指定信息只能被传递到指定的minion端,有利于信息安全,譬如存储密钥密码之类的
    (2)配置minion
        一些执行模块,state文件,returner,需要进行被修改的,会被定义在pillar里面
    (3)变量
        定义pillar变量,便于sls文件和模板文件进行访问
    (4)任意数据
        pillar作为一个可以包含任何基础数据的字典结构,以键值对的形式存放


    SETTING UP PILLAR

    查看pillar变量
    salt '*' pillar.items

    默认pillar数据没有被加载到minion端,由于pillar端的数据比较敏感,非常不建议这么做,配置方法:
    在master端配置pillar_opts为True

    pillar配置与state的状态树类似,也有一个top文件,默认在/srv/pillar,可以自定义的配置环境,注意不要配置在file_roots里面,top文件示例:

    1 /srv/pillar/top.sls:
    2 base:
    3   '*':
    4     - data
    View Code

    *表示默认关联到所有minion上,data sls文件需要被定义
    /srv/pillar/data.sls:
    info: some data

    将新的pillar变量同步到minion端,使用如下命令:
    salt '*' saltutil.refresh_pillar

    使用salt '*' pillar.items可以查看新的pillar变量是否成功


    MORE COMPLEX DATA

    与state文件不同的是,pillar文件不需要被定义成formulas格式,譬如下面一个设置UID的配置
    /srv/pillar/users/init.sls:

    1 users:
    2   thatch: 1000
    3   shouse: 1001
    4   utahdave: 1002
    5   redbeard: 1003
    View Code

    在sls文件中使用pillar数据,可以以模板的形式引入:

    1 {% for user, uid in pillar.get('users', {}).items() %}
    2 {{user}}:
    3   user.present:
    4     - uid: {{uid}}
    5 {% endfor %}
    View Code

    释义:
    1、pillar.get()获取到users键里面定义好的用户UID键列表
    2、{% for %}
       {% endfor %}
       为模板for循环的格式
    3、{{user}}为pillar数据的引用方法


    PARAMETERIZING STATES WITH PILLAR

    利用pillar将state文件编写的参数化,使之更灵活的匹配指定的minion
    示例:
    /srv/pillar/pkg/init.sls:

     1 pkgs:
     2   {% if grains['os_family'] == 'RedHat' %}
     3   apache: httpd
     4   vim: vim-enhanced
     5   {% elif grains['os_family'] == 'Debian' %}
     6   apache: apache2
     7   vim: vim
     8   {% elif grains['os'] == 'Arch' %}
     9   apache: apache
    10   vim: vim
    11   {% endif %}
    View Code

    再将pkgs添加到pillar环境top文件中
    /srv/pillar/top.sls:

    1 base:
    2   '*':
    3     - data
    4     - users
    5     - pkg
    View Code

    最后将pillar用于sls文件中
    /srv/salt/apache/init.sls:

    1 apache:
    2   pkg.installed:
    3     - name: {{ pillar['pkgs']['apache'] }}
    View Code

    当模板中定义的条件均不匹配时可以使用pillar.get设置默认值

    1 apache:
    2   pkg.installed:
    3     - name: {{ salt['pillar.get']('pkgs:apache', 'httpd') }}
    View Code

    整个逻辑分析:

    (1)定义pillar数据,在pillar数据结构里面引入jinja模板的逻辑并使用grains变量作为参数条件,使之可以灵活的匹配minion端的具体环境
    (2)将定义好的pillar数据包含到top文件中,指定匹配的minion使用范围
    (3)在sls文件中引入pillar变量

    注意:pillar就是一个python的字典结构,所以模板引擎可以使用get,items这些字典方法来操作


    PILLAR MAKES SIMPLE STATES GROW EASILY

    pillar可以让sls文件变得更加灵活,减少不必要的重构

    示例分析:
    /srv/salt/edit/vim.sls:

     1 vim:
     2   pkg.installed: []
     3 
     4 /etc/vimrc:
     5   file.managed:
     6     - source: salt://edit/vimrc
     7     - mode: 644
     8     - user: root
     9     - group: root
    10     - require:
    11       - pkg: vim
    View Code

    这是一个sls文件,编写的目的非常明确,使用状况非常单一
    改良的示例:

    /srv/salt/edit/vim.sls:

     1 vim:
     2   pkg.installed:
     3     - name: {{ pillar['pkgs']['vim'] }}
     4 
     5 /etc/vimrc:
     6   file.managed:
     7     - source: {{ pillar['vimrc'] }}
     8     - mode: 644
     9     - user: root
    10     - group: root
    11     - require:
    12       - pkg: vim
    View Code

    /srv/pillar/edit/vim.sls:

    1 {% if grains['id'].startswith('dev') %}
    2 vimrc: salt://edit/dev_vimrc
    3 {% elif grains['id'].startswith('qa') %}
    4 vimrc: salt://edit/qa_vimrc
    5 {% else %}
    6 vimrc: salt://edit/vimrc
    7 {% endif %}
    View Code

    /srv/pillar/top.sls:

    1 base:
    2   '*':
    3     - pkg
    4     - edit.vim
    View Code

    评析:
      将需要同步的vim配置文件路径和pkg包名参数化,使之可以根据minion端的实际环境进行灵活的适应


    SETTING PILLAR DATA ON THE COMMAND LINE

    在命令行操作pillar变量

    当运行state.apply <salt.modules.state.apply_()时pillar变量会在命令行被直接设置
    示例:

    1 salt '*' state.apply pillar='{"foo": "bar"}'
    2 salt '*' state.apply my_sls_file pillar='{"hello": "world"}'
    3 salt '*' state.sls my_sls_file pillar='{"foo": {"bar": "baz"}}'
    View Code

    注意:pillar变量可以覆盖sls文件中已经设置好的变量值


    MORE ON PILLAR

    pillar被在master生成定义且被安全的芬分发到minion端,pillar除了在pillar的sls文件中定义,还可以从外部引入。


    MINION CONFIG IN PILLAR

    在minion端配置pillar变量和master端是一样的,例如配置minion的returner使用mysql模块的配置,这在你需要动态配置的时候非常方便

    示例:

      mysql.pass: hardtoguesspassword

  • 相关阅读:
    python os一些相关操作
    查看linux系统占用的端口号
    asp.net 2.0
    winform oracle
    winform sql server 增删查改
    CPTW移仓程序Procedure
    创建一个类,实现只会实例化一次。
    javascript静态页面传值的三种方法,让你一次爽个够!
    点击链接或按钮使框架页面整体跳出到指定的页面
    javascript动态添加控件
  • 原文地址:https://www.cnblogs.com/solitarywares/p/7461214.html
Copyright © 2011-2022 走看看