mwjhw216 发表于 2018-7-31 09:02:54

saltstack grains与pillar使用和订制

  一、grains与pillar简介
  grains是minion启动时加载,在minion运行过程中不会发生变化,所以是静态数据。grains数据的定制可以在各minion端,也可以放在master端;grains中包含许多的信息,如:运行的内核版本,操作系统,网络接口地址,MAC地址,cpu,内存等等信息。
  Pillar是Salt用来分发全局变量到所有或指定minion的一个定制接口,所以相对grains来说可以称为动态的数据,保存在master端。
  由于涉及的配置文件采用yaml格式,如果对yaml语法不在熟悉请访问这里
  http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt
  最好也了解下jinjia2的格式,如不熟悉请访问这里
  http://docs.jinkan.org/docs/jinja2/intro.html
  saltstack的安装部署请看这里
  http://dyc2005.blog.51cto.com/270872/1967147
  二、grains日常使用入门
  1、获取minion的grains所有数据
salt "minion_152" grains.items类似如图:
  2、获取单项grains值
#salt "minion_152" grains.item os  如图:

  3、获取grains中的所有项(键)
#salt "minion_152" grains.ls   #以minion_152上的为例
  这样就可通过grains.item项去获取具体对应的值啦
  4、在minion上订制grains数据
  订制grains数据有两种方法分别如下:
  方法一:
  修改/etc/salt/minion配置文件去掉12行左右的注释
  default_include: minion.d/*.conf
  在/etc/salt/minion.d目录下
  创建一个test.conf 内容如下:
grains:  
   Data:
  
      - test
  
   Project:
  
      - wgdbl_game
  重启minion
#salt "minion_152" grains.items  如图:

  方法二:
  在master操作
mkdir -pv /srv/salt/_grains  
cd/srv/salt/_grains
  
cat hello.py
#!/usr/bin/python  
def GrainsHello():
  
    grains = {}
  
    grains["project"] = "myTestProject"
  
    grains["name"] = "san game"
  
    return grains
  在服务端写好脚本再同步刷新到指定minion
#salt "minion_152" saltutil.sync_grains  如图:

  推送更新成功。
  此时到minion_152所在的机器
  /var/cache/salt/minion/files/base/_grains/会发现 在master端创建的hello.py grains脚本已经推送至此,如图:

  并且在该minion下的
  /var/cache/salt/minion/extmods/grains 下有执行的标记生成了hello.pyc

  第一种方法是grains中的纯静态指定minion下生成并且要重启minion生效,第二种方法可以统一放在胳端管理,再推送到各指定minions 动态生成管理。
  三、pillar的使用
  1、获取指定minion上pillar的数据
  首先与grains不同的是要获取pillar需要在master的配置文件中打开
  取消552行的注释如下:
  pillar_opts: True
  并重启salt-master
#salt"minion_152" pillar.data  
如图:

  注意:最好不要在线上使用 salt "*" pillar.data   这想会卡的哦。
  2、pillar数据定制
  配置master的pillar的根目录
  取消529 -532 的注释
529 pillar_roots:  
530   base:
  
531   - /srv/pillar
  创建根目录
  mkdir -pv /srv/pillar
  重启salt-master
  切换到/srv/pillar目录
  创建pillar顶层入口文件(相当于目录)top.sls,注意必须要以sls后缀。
cat top.sls  
base:   "*":
  
   - data   "minion_152":
  
   - minion152
  创建 data.sls
  cat data.sls
project_name: san  
subject:
  
   - zgws
  
   - wgdbl
  创建 minion152.sls
  cat minion152.sls
Minion_152: info  
HostName:
  
   - zgws_game01
  
IP:
  
   - 172.16.3.152
  
game:
  
   - zgws
  向minion同步pillar数据
#salt "minion_152" saltutil.refresh_pillar  如图:
查看minion_152 pillar数据
#salt "minion_152" pillar.data  

  
#salt "minion_152" pillar.items
  如图:


  由于只对minion_152进行推送更新pIllar 因此其他的minion不会收到更新。
  3、pillar配置文件中增加jinjia2格式的判断
  cat top.sls
base:  
   "*":
  
      - data
  
   "minion_152":
  
      - minion152
  
      - osinfo
  创建osinfo.sls
  cat osinfo.sls
OS_INFO:  
    - {{ grains.os}}
  
    {% if grains["os"] == "CentOS"%}
  
    - Linux System
  
    {% endif %}
  刷新pillar数据
#salt "minion_152" saltutil.refresh_pillar  查看minion_152 pillar数据
  如图:

  通过grains和pillar可以很方便的定制出特定的数据,pillar 配置是完全保存在master端的,而grains既可以保存在master端也可以单独至minion端,每次修改需要重启minion端。pillar偏向敏感数据的统一存放在master端且灵活修改。
页: [1]
查看完整版本: saltstack grains与pillar使用和订制