企业——saltstack自动化部署软件之Grains、Pillar

一.什么是Grains和Pillar?

  Grains:grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报一次的。grains是minion启动时加载的,在运行过程中不会发生变化,所以是静态数据。grains中包含诸如运行的内核版本,操作系统等信息。在master端通过Grains可以获得minion对应的变量值。

  Pillar:Pillar是在salt 0.9.8版本后才添加的功能组件。它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。在Salt的设计中,Pillar使用独立的加密sesstion,所以Pillar可以用来传递敏感的数据,例如ssh-key,加密证书等。
     存储位置:存储在master端,存放需要提供给minion的信息
     应用场景:敏感信息:每个minion只能访问master分配给自己的信息

二.Grains的相应的配置

 查看远端服务器的数据的命令:
   salt wf2 grains.item os      ##查看 wf2 的 os 的类型
    salt wf2 grains.item ipv4    ##查看 wf2 的 ip
    salt -G 'os:redhat' cmd.run hostname      ## -G表示匹配   'os:redhat'表示前面匹配所有红帽的系统  cmd 表示匹配到一致的远端的服务器执行cmd后面的命令
    更改信息的方式有两种:一在minion端更改,二在master端更改


1. 在minion端,有两种方法更改grains

 方法一:在minion的配置文件中更改默认的 roles 值
   cd /etc/salt/
   ls
   vim minion
    grains:
      roles:
        - apache      ##更改默认的roles的值
   /etc/init.d/salt-minion restart     ##因为是静态的更改配置文件,所以要重新启动服务

   测试:在master上    salt wf2 grains.item roles     ##可以看到输出的是,刚更改的配置文件的数据
  

 方法二:在minion端的salt下编写一个文件
   cd /etc/salt
   ls
   vim grains
    roles: nginx     ##因为不是更改的配置文件,所以不需要重起
   
   测试:在master端上    salt wf3 grains.item roles
        ##虽然编写了配置文件,但是master端没有识别这个文件,并不知道这个文件的存在,所以需要触发一下,模块刷一下
    salt wf3 saltutil.sync_grains    ##刷新
    salt wf3 grains.item roles    ##再次查看,就可以看到添加的文件里面的信息


2在master端,有两种方法更改grains

     ##什么系统操作什么命令  role自定义角色
     ##无需重起,只需要在master上触发一下grains


 方法一:编辑top.sls文件
  top file中不需要匹配主机名,批量的配置服务器
   vim top.sls
    base:
      "wf1":
        - haproxy.service
      "roles:apache":
        - match: grain
        - apache.install
      "roles:nginx":
        - match: grain
        - nginx.service

 方法二:在master端,编写py脚本     优点是:不需要登陆远程的服务端
   mkdir _grains
   cd _grains/
   vim my_grains.py
     #!/usr/bin/env python
     def my_grains():
         grains = {}
         grains['hello'] = 'westos'
         grains['salt'] = 'stack'
         return grainsa
   salt wf3 saltutil.sync_grains  ##查看 wf3 的 grains 的值
   
   测试:
   在wf3处: cd /var/cache/salt -> tree . -> 将my文件传送了过来
   在wf1处: salt wf3 grains.item hello/salt

==================================================================================
注意:如果同时编写了这些,那么这四个的优先级又是什么呢?
   1.grains    ##配置文件中的grains的默认的(或者更改的)值
   2./etc/salt/grains    ##在 minion 端编写的文件
   3./etc/salt/minion    
   4._grains/my_grains.py    ##在master上面添加的目录和文件
==================================================================================

三.Pillar的相应的配置

 wf1上:
   cd /etc/salt/
   vim master
      pillar_roots:
        base:
          - /srv/pillar
   /etc/init.d/salt-master restart

   mkdir /srv/pillar
   cd /srv/pillar
   mkdir web
   cd web
   vim install.sls
      {% if grains['fqdn'] == 'wf2' %}
      webserver: httpd
      {% elif grains['fqdn'] == 'wf3' %}
      webserver: nginx
      {% endif %}

   cd ..
   vim top.sls
      base:
        '*':
          - web.install

   测试:  salt '*' pillar.items
      salt '*' saltutil.refresh_pillar    ##刷新
      salt wf2/3 pillar.item webserver     ##单独看的话,就查看不了,需要刷新
      salt '*' saltutil.refresh_pillar    ##刷新
      salt wf2/3 pillar.item webserver    ##刷新过后就可以查看

==================================================================================   
注意:pillar的用法:-I 匹配  -S扫描整个网络
   salt -I 'webserver:httpd' test.ping
   salt -S 172.25.254.0/24 test.ping
==================================================================================

原文地址:https://www.cnblogs.com/wf-aiyouwei/p/10831259.html