配置管理篇(2)_SaltStack grains

转载自: https://www.xiaomastack.com/2014/10/31/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谢谢!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值