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

    参考:https://docs.saltstack.com/en/latest/topics/pillar/index.html

    grains 和pillar的区别

      grains 负责采集客户端的基本信息的,可以在客户端自定义然后汇报给服务端,也可在服务端配置然后下发给客户端。grains是静态的,不常变化的。比如主机名,IP,接口。

       grains是minion每一次启动的时候都会采集的静态数据,再向master汇报一次。可以用在salt的模块和其他组件。

       pillar 给minion定义你需要的数据,这些数据库可以被salt的其他组件使用。数据是动态的,
     
    区别:
        1、grains是静态、不常变化的;pillar则是动态的
        2、grains是存储在minion本地,而pillar存储在master本地
        3、minion有权限操作自己的grains值,如增加、删除,但minion只能查看自己的pillar,无权修改

    pillar是在master端配置定义的,可以配置指定的数据给指定的minion访问,所以可以配置敏感的数据。

    默认的pillar_roots目录是: /srv/pillar/ 不存在需要创建。

    配置pillar_roots目录

    [root@cong-33 pillar]# cat /etc/salt/master |grep -A 3 "pillar_roots"
    pillar_roots:
    base:
    - /srv/salt/pillar    ##我配置的pillar_roots目录是在/srv/salt/pillar
    #
    [root@cong-33 pillar]#

    配置打开系统自带的pillar参数

    [root@cong-33 pillar]# cat /etc/salt/master |grep "^pillar_opts"
    pillar_opts: True  
    [root@cong-33 pillar]#

    重启master端的salt-master服务

    [root@cong-33 pillar]# /etc/init.d/salt-master restart

    pillar目录,pillar文件编写

    [root@cong-33 pillar]# pwd
    /srv/salt/pillar
    [root@cong-33 pillar]# ll
    total 24
    -rw-r--r--. 1 root root  28 Oct 30 16:27 data.sls
    -rw-r--r--. 1 root root 112 Nov 15 09:45 httpd.sls
    -rw-r--r--. 1 root root  28 Nov 14 17:34 ip.sls
    -rw-r--r--. 1 root root  73 Nov 15 09:45 top.sls  ##pillar的入口文件
    -rw-r--r--. 1 root root  74 Nov 14 19:32 uid.sls
    -rw-r--r--. 1 root root  11 Oct 31 09:31 user.sls
    [root@cong-33 pillar]# 

    查看pillar的入口文件top.sls

    [root@cong-33 pillar]# cat top.sls 
    base:        ##配置文件的环境选项
        '*':      ##minion,这里是匹配所有的minion。可以使用正则匹配
            - ip    ##会引用pillar_roots目录下的ip.sls文件,或ip/init.sls文件,优先读取ip.sls
            - user
            - uid
            - httpd
    'web*':    ##匹配以web开头的minion_id,然后执行这个定义下面的文件操作
    - vim [root@cong
    -33 pillar]#

    查看pillar文件

    [root@cong-33 pillar]# cat ip.sls 
    ip: {{ grains['ipv4'][1] }}    ##设置pillar的ip key,value是使用grains的信息,根据grains获取IP信息
    [root@cong-33 pillar]# cat user.sls 
    user: cong    ##配置pillar的user kye,值为cong
    [root@cong-33 pillar]# cat uid.sls 
    user_id:    ##pillar信息的一个嵌套,
      thatch: 1000
      shouse: 1001
      utahdave: 1002
      redbeard: 1003
    
    [root@cong-33 pillar]# cat httpd.sls   ##根据grains获取系统类型,然后根据系统类型设置软件包的名称
    {% if grains['os'] == 'CentOS' %}
    apache: httpd
    {% elif grains['os'] == 'Debian' %}
    apache: apache2
    {% endif %}
    [root@cong-33 pillar]#

    刷新pillar数据到minion

    [root@cong-33 pillar]# salt '*' saltutil.refresh_pillar
    cong-55:
        True
    cong-49:    ##这个minion没启动所以报错
        Minion did not return. [Not connected]
    [root@cong-33 pillar]# 

    查看pillar信息

    [root@cong-33 pillar]# salt 'cong-55' pillar.ls
    cong-55:
        - apache
        - ip
        - user_id
        - user
        - master
    [root@cong-33 pillar]# salt 'cong-55' pillar.item ip
    cong-55:
        ----------
        ip:
            192.168.1.126
    [root@cong-33 pillar]# salt 'cong-55' pillar.item apache
    cong-55:
        ----------
        apache:
            httpd
    [root@cong-33 pillar]# salt 'cong-55' pillar.item user_id
    cong-55:
        ----------
        user_id:
            ----------
            redbeard:
                1003
            shouse:
                1001
            thatch:
                1000
            utahdave:
                1002
    [root@cong-33 pillar]# salt 'cong-55' pillar.item user_id:redbeard
    cong-55:
        ----------
        user_id:redbeard:
            1003
    [root@cong-33 pillar]# 

    在minion端获取

    [root@cong-55 ~]# salt-call pillar.item user_id
    local:
        ----------
        user_id:
            ----------
            redbeard:
                1003
            shouse:
                1001
            thatch:
                1000
            utahdave:
                1002
    [root@cong-55 ~]# salt-call pillar.item user_id:thatch
    local:
        ----------
        user_id:thatch:
            1000
    [root@cong-55 ~]# 

    这样我们在写sls文件是也可以条用pillar的信息数据了。

    pillar的函数

    [root@cong-33 pillar]# salt 'cong-55' sys.list_functions pillar
    cong-55:
        - pillar.data
        - pillar.ext
        - pillar.fetch
        - pillar.file_exists
        - pillar.filter_by
        - pillar.get
        - pillar.item
        - pillar.items
        - pillar.keys
        - pillar.ls
        - pillar.obfuscate
        - pillar.raw
    [root@cong-33 pillar]#

    查看函数的使用方法

    [root@cong-33 pillar]# salt 'cong-55' sys.doc pillar.ls
    pillar.ls:
    
        New in version 2015.8.0
    
        Calls the master for a fresh pillar, generates the pillar data on the
        fly (same as :py:func:`items`), but only shows the available main keys.
    
        CLI Examples:
    
            salt '*' pillar.ls
        
    
    [root@cong-33 pillar]# salt 'cong-55' sys.doc pillar.item
    pillar.item:
    
        New in version 0.16.2
    
        Return one or more pillar entries from the :ref:`in-memory pillar data
        <pillar-in-memory>`.
    
        delimiter
            Delimiter used to traverse nested dictionaries.
    
            Note:
                This is different from :py:func:`pillar.get
                <salt.modules.pillar.get>` in that no default value can be
                specified. :py:func:`pillar.get <salt.modules.pillar.get>` should
                probably still be used in most cases to retrieve nested pillar
                values, as it is a bit more flexible. One reason to use this
                function instead of :py:func:`pillar.get <salt.modules.pillar.get>`
                however is when it is desirable to retrieve the values of more than
                one key, since :py:func:`pillar.get <salt.modules.pillar.get>` can
                only retrieve one key at a time.
    
            New in version 2015.8.0
    
        CLI Examples:
    
            salt '*' pillar.item foo
            salt '*' pillar.item foo:bar
            salt '*' pillar.item foo bar baz
        
    
    [root@cong-33 pillar]# 
  • 相关阅读:
    .NET WinForm 状态栏添加分隔符
    使用 MMC / IE 查看证书
    配置IIS在64位Windows上运行 32 位 ASP.NET 应用程序
    WCF部署到IIS:证书必须具有能够进行密钥交换的私钥,该进程必须具有访问私钥的权限
    PB6 调用 .net Web Service
    .NET程序加壳 — 之动态加载程序集
    statusStrip 状态条 toolStripStatusLabel 居右显示
    C# 使用 Stopwatch 测量代码运行时间
    Application_Start 事件中使用 Response.Redirect
    解决IIS中部署WCF时,访问.svc文件的404错误问题
  • 原文地址:https://www.cnblogs.com/LYCong/p/7878192.html
Copyright © 2011-2022 走看看