grains

grains 类似于puppet的facter 负责采集客户端一些基本信息,这个也完全可以自定义。一般从服务器端定义然后推下去,采集完后,再汇报上来。

altstack里的Grains功能,是控制minion端的静态变量,在master端通过Grains可以获得minion对应的变量值。

查看minion的全部静态变量,可以通过如下实现:

# salt '*' grains.ls  

JYD-test-3:

    - SSDs  

    - biosreleasedate  

    - biosversion  

    - cpu_flags  

    - cpu_model  

    - cpuarch    

     ......  

所列出静态变量是成组出现的,如上只是列出了组的key(用python的思维理解)

用如下命令可列出被控端的key及vlaue:

# salt '*' grains.items

JYD-test-3:

    ----------

    SSDs:

    biosreleasedate:

        07/02/2015

    biosversion:

        6.00

    cpu_flags:

        - fpu

       ......  

也可以指定查看key值,如查看系统类型(grains.item后面跟的为grains组的key):

# salt '*' grains.item osfinger --out=pprint

{'JYD-test-2': {'osfinger': 'CentOS-6'}}

{'JYD-test-3': {'osfinger': 'CentOS-6'}}


  自定义grains.item

第一种方法(很少使用):

在minion端:

修改配置文件/etc/salt/minion  中 去掉 default_include: minion.d/*.conf 前的#号
在minion端的/etc/salt/minion.d/ 目录下新建并编辑conf文件,如:

# vi /etc/salt/minion.d/web.conf

grains:             #必须声明  

  web: nginx 

  user: dong  

重启salt-minion服务,并在master端验证:

# /etc/init.d/salt-minion restart

Stopping salt-minion daemon:                               [确定]

Starting salt-minion daemon:                               [确定]

# salt 'JYD-test-2' grains.item web --out=pprint

{'JYD-test-2': {'web': 'nginx'}}


第二种方法:

在master端添加

创建/srv/salt/_grains/目录,编写grains文件(python代码)

# mkdir -pv /srv/salt/_grains/ 

mkdir: 已创建目录 "/srv/salt"

mkdir: 已创建目录 "/srv/salt/_grains/"

以下为获取被控主机系统允许最大打开文件数的grains数据的拓展模块。

# vi /srv/salt/_grains/get_openfile.py

import os,sys,commands    


def Grains_openfile():    

    grains = {}    


    #init default value    

    _open_file=65536    


    try:    

      getulimit=commands.getstatusoutput('source /etc/profile;ulimit -n')    

    except Exception,e:    

        pass    

    if getulimit[0]==0:    

        _open_file=int(getulimit[1])    

    grains['max_open_file'] = _open_file    #max_open_file是grains的项,_open_file即grains这一项的值。

    return grains    

注:python的必须缩进,否则会识别错误。

将该python文件同步到被控主机,并刷新重载模块使之生效。

# salt 'JYD-test-2' saltutil.sync_grains 

JYD-test-2:

    - grains.get_openfile


# salt 'JYD-test-2' sys.reload_modules

JYD-test-2:

    True

在被控端上查看

# ll /var/cache/salt/minion/extmods/grains/        #存放扩展模块文件

-rw-------. 1 root root 353 2月  26 19:00 get_openfile.py

-rw-------. 1 root root 646 2月  26 19:11 get_openfile.pyc

# ll /var/cache/salt/minion/files/base/_grains/      #临时存放位置

-rw-------. 1 root root 353 2月  26 19:00 get_openfile.py

大功告成,接下来在master端查看效果。

# salt 'JYD-test-2' grains.item max_open_file

JYD-test-2:

    ----------

    max_open_file:

        1024