配置管理篇(2)_SaltStack grains

grains主要负责采集并返回客户端minion的一些基本信息, saltstack自带grains模块可以采集机器的很多基本信息,对于比较特别的信息grains可以在客户端或服务器端自定义item后采集,不管是那种方式自定义grains的item,最终grains的item值都是由客户端minion采集完成后上报给服务端master的,采集动作只在启动客户端或有新的grains添加时触发,grains采集上报的数据可以作为资产管理的元数据。一个客户端在启动时就将自定义或基本的item信息值读取到内存了,这些值是个常量在下次重启客户端之前不会改变。

先看看怎样使用,然后瞧瞧怎样自定义(4种自定义方法)
查看所有的grains项 grains.ls

[root@saltstack ~]# salt minion01 grains.ls
minion01:
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model
    - cpuarch
    - defaultencoding
... ... ...

查看所有的grains项的详细信息 grains.items

[root@saltstack ~]# salt minion01 grains.items
minion01:
  biosreleasedate: 07/02/2012
  biosversion: 6.00
... ... ...

查看grains指定的item信息

[root@saltstack ~]# salt minion01 grains.item shell
minion01:
  shell: /bin/sh
[root@saltstack ~]# salt minion01 grains.item os
minion01:
  os: CentOS
[root@saltstack ~]# salt minion01 grains.item ipv4
minion01:
  ipv4:
      127.0.0.1
      192.168.186.135

grains添加自定义items

1、在master端添加
在配置文件file_roots指定的目录(默认是/srv/salt)下创建_grains目录,编写可以返回一个字典的py文件(需要懂点python)。

[root@saltstack ~]# grep -Ev "^$|^#" /etc/salt/master
file_roots:
  base:
    - /srv/salt
pillar_roots:
  base:
    - /srv/pillar
[root@saltstack ~]#

例如grains添加自定义item(disk_size)返回磁盘的大小,注意python脚本返回值是一个字典。

[root@saltstack _grains]# cat disk.py
#coding=utf-8
import os

def disk_size():
    ''' get disk size '''

    disk = os.statvfs("/")
    capacity = disk.f_bsize * disk.f_blocks
    ret = int(float(capacity)/1000/1000/1000)
    if ret > 1000:
        obj = ret/1000.0
        disk_size = ("%.1f" % obj) + 'T'
    else:
        ret = str(ret)
        disk_size = ret + 'G'

    return {'disk_size': disk_size}

用saltutil.sync_grains或者saltutil.sync_all将自定义的grains item 同步到minion端,如果只同步grains建议使用saltutil.sync_grains。

[root@saltstack _grains]# salt minion01 saltutil.sync_grains
minion01:
    - grains.__init__
    - grains.disk
[root@saltstack _grains]# salt minion01 saltutil.sync_all
minion01:
    ----------
    grains:
    modules:
    outputters:
    renderers:
    returners:
    states:

从结果可以看到sync_grains和sync_all不同之处了吧。

同步完成后在minion端的以下目录中可以找到master下发的grains文件

[root@minion01 minion.d]# ls /var/cache/salt/minion/extmods/grains/
disk.py      disk.pyc     __init__.py

看看是否同步成功

[root@saltstack _grains]# salt minion01 grains.item disk_size
minion01:
  disk_size: 19G
[root@saltstack _grains]#

2、在minion端添加
可以直接在配置文件/etc/salt/minion中添加,但一般不这么干。一般会将default_include: minion.d/*.conf配置项打开,然后将自定义grains的以.conf结尾的配置文件放到minion.d这个目录中。

[root@minion01 ~]# grep -Ev "^$|#" /etc/salt/minion
default_include: minion.d/*.conf
master: 192.168.186.134
id: minion01

在minion.d目录中添加并编辑grains.conf文件(文件名随意)

[root@minion01 minion.d]# cat grains.conf
grains:
  IDC: xxx-xxx-xxx
  dFlag: 2014/10/31
[root@minion01 minion.d]#

重启salt-minion后生效,然后在master端查看自定义的grains

[root@saltstack _grains]# salt minion01 grains.get IDC
minion01:
    xxx-xxx-xxx
[root@saltstack _grains]# salt minion01 grains.get dFlag
minion01:
    2014/10/31
[root@saltstack _grains]# salt minion01 grains.item dFlag
minion01:
  dFlag: 2014/10/31
[root@saltstack _grains]# salt minion01 grains.item IDC
minion01:
  IDC: xxx-xxx-xxx
[root@saltstack _grains]#

3、在master端直接用grains.setval为指定minion的grains设定一个item
设定welcome的值为’hello world’

[root@saltstack _grains]# salt minion01 grains.setval welcome 'hello world'
minion01:
  welcome: hello world

查看定义的item的值

[root@saltstack _grains]# salt minion01 grains.item welcome
minion01:
  welcome: hello world
[root@saltstack _grains]# salt minion01 grains.get welcome
minion01:
    hello world
[root@saltstack _grains]#

这次定义的grains保存在minion端的配置文件/etc/salt/grains中

[root@minion01 salt]# pwd
/etc/salt
[root@minion01 salt]# cat grains
welcome: hello world

4、在master端通过states的grains方法也可以自定义grains
为了方便管理,在文件夹/salt/srv下再创建文件夹gitems,然后再该文件夹下编辑新的sls文件gtest.sls

[root@saltstack gitems]# pwd
/srv/salt/gitems
[root@saltstack gitems]# ls
gtest.sls
[root@saltstack gitems]# cat gtest.sls
country:
  grains.present:
    - value: china
[root@saltstack gitems]#

下发到minion端,并查看新添加的item

[root@saltstack gitems]# salt minion01 state.sls gitems.gtest
minion01:
----------
          ID: country
    Function: grains.present
      Result: True
     Comment: Set grain country to china
     Changes:
              ----------
              country:
                  china

Summary
------------
Succeeded: 1
Failed:    0
------------
Total:     1
[root@saltstack gitems]# salt minion01 grains.get country
minion01:
    china

该方法定义的grains同样保存在minion端的配置文件/etc/salt/grains中

[root@minion01 salt]# cat grains
country: china
welcome: hello world
[root@minion01 salt]#

转载请注明出处:http://www.xiaomastack.com/2014/10/31/saltstack-grains/ 谢谢!

发表评论:

你的电子邮件地址将不会被公开.

× 1 = 2