fdsdff 发表于 2016-12-21 09:39:23

(四)slatstack静态数据系统grains

Grains:静态数据, 当minion启动的时候收集minion本地的相关信息
操作系统版本,内核版本,CPU,内存,硬盘,设备型号,序列号

应用场景:

  1)资产管理系统,信息查询
  2)用于目标选择(找到100台机器当中,内存是64G系统机器有哪些)
  3)配置管理中使用


salt的数据系统主要有两个方面,其中一个就是Grains,那么可能有人会说数据系统到底有什么用呢?我们设想这样一个例子?假如说领导让我们收集服务器的SN号,这时如果我们手动去收集可能。。。。。(后果太严重,不敢设想)。再比如假设我们的环境不统一,我们要在所有centos系统上执行操作,这时就需要我们的grains了。
    首先说Grains的数据是在minion端启动的时候进行加载的,所以如果自定义了Grains参数就必须要重启minion端才会进行获取。现在我们将正式开始Grains之旅。




总结:
简单的理解Grains的数据系统是通过key的名称和key的值去区分远程主机的。

列出Grains可用key

# salt 'salt-client.com' grains.ls
salt-client.com:
    - SSDs
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model
    - cpuarch
    - domain

列出key下面的指标值可以这样子理解
# salt 'salt-client.com' grains.items
salt-client.com:
    ----------
    SSDs:
    biosreleasedate:
      07/31/2013
    biosversion:
      6.00


查看你想要的项
例如我要查询机器的快速服务代码

# salt 'salt-client.com' grains.item server_id
salt-client.com:
    ----------
    server_id:
      1644829902
#请注意,本次的item后面没有s


# salt 'salt-client.com' grains.get server_id
salt-client.com:
    1644829902
#也可以直接get,相比item的方式get返回显得更清爽些,直接返回所需的数值



要在所有centos上执行一个命令,可以通过grains的返回值进行匹配即可

# salt 'salt-client.com' grains.get os #获取所有主机的os信息,os是grains的一个key的值
salt-client.com:
    CentOS
# salt -G os:Centos cmd.run 'df -h'
salt-client.com:
    Filesystem      SizeUsed Avail Use% Mounted on
    /dev/sda2       7.9G1.7G5.9G22% /
    tmpfs         242M   12K242M   1% /dev/shm
    /dev/sda1       194M   29M155M16% /boot

#其中-G代表的方式就是以grains方式进行匹配,只看centos机器的信息,不是centos系统的不看,远程主机的操作系统可能不一样




grains自定义key

假设有一天nginx发现了一个严重bug,需要对所有nginx服务器进行升级,这时如果我们在之前定义grains就可能通过匹配到所有nginx主机,进而漏洞的修复。



grains的定义其实很简单,只需要修改client端的配置文件即可,
vim /etc/salt/minion    #进入之后我们搜索grains之后取出相应的注释

#grains:
#roles:
#    - webserver
#    - memcache
#deployment: datacenter4
#cabinet: 13
#cab_u: 14-15

修改后
grains:
roles:         #-->roles则代表角色
    - webserver#这台机器的角色是webserver 如果要定义多个角色请在下方通过- 角色名的方式添加(注意前面的四个空格)
#    - memcache
#deployment: datacenter4
#cabinet: 13
#cab_u: 14-15


/etc/init.d/salt-minion restart    #由于grains是在重启时收集的所以我们新增加的信息必须重启才会生效


进行验证
salt -G roles:webserver cmd.run "date"    #由于我们只在minion1上进行了修改因此只有minion1的结果进行了返回

# salt -G roles:webserver cmd.run "date"
salt-client.com:
    Thu Dec 15 07:16:04 CST 2016


把grains信息单独定义一个文件

vim /etc/salt/grains    #这个文件默认是没有的,用vim这种方式建立即可

# cat /etc/salt/grains
web:#-->key的名称
    - nginx   #key的值

值得注意的是,如果在配置文件里minion里配置了grains同时又在/etc/salt/grains里配置了grains应确保key的名称不重复。如果重复那么只有minion里的配置才会生效


/etc/init.d/salt-minion restart


salt -G web:nginx cmd.run 'date'    #其中web是我们定义的key的名称而nginx是key的值,这条命令是指在所有nginx主机上执行date命令

# salt -G web:nginx cmd.run 'date'
salt-client.com:
    Thu Dec 15 07:24:39 CST 2016





开发python脚本来管理自定义grains,python脚本放置的路径一定是/srv/salt/_grains
例如:
# mkdir /srv/salt/_grains
# cd /srv/salt/_grains
vim my_grains.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def my_grains():
  #初始化一个grains字典
  grains = {}
  #设置字典中的key-valaue
  grains['iaas'] = 'openstack'
  grains['www'] = 'bier'
  #返回这个字典
return grains
然后保存退出

然后把在master写的grains同步给给minion(同步master写的grains到minion端的/var/cache/salt)

#然后刷新配置文件具体命令:
# salt '*' saltutil.sync_grains
salt-client.com:
    - grains.my_grains


查看一下
# salt '*' grains.item iaas
salt-client.com:
    ----------
    iaas:

可以看看minion端的日志python脚本返回了什么


grains的优先级:
 1.系统自带
 2.grains文件写的
 3.minion配置文件写的
 4.自己写的

页: [1]
查看完整版本: (四)slatstack静态数据系统grains