grains主要负责采集并返回客户端minion的一些基本信息, saltstack自带grains模块可以采集机器的很多基本信息,对于比较特别的信息grains可以在客户端或服务器端自定义item后采集,不管是那种方式自定义grains的item,最终grains的item值都是由客户端minion采集完成后上报给服务端master的,采集动作只在启动客户端或有新的grains添加时触发,grains采集上报的数据可以作为资产管理的元数据。
一个客户端在启动时就将自定义或基本的item信息值读取到内存了,这些值是个常量在下次重启客户端之前不会改变。
先看看怎样使用,然后瞧瞧怎样自定义(4种自定义方法)
查看所有的grains项 grains.ls
1 | $ salt minion01 grains.ls |
查看所有的grains项的详细信息 grains.items
1 | $ salt minion01 grains.items |
查看grains指定的item信息
1 | $ salt minion01 grains.item shell |
grains添加自定义items
1、在master端添加
在配置文件file_roots指定的目录(默认是/srv/salt)下创建_grains目录,编写可以返回一个字典的py文件(需要懂点python)。
1 | $ grep -Ev "^$|^#" /etc/salt/master |
例如grains添加自定义item(disk_size)返回磁盘的大小,注意python脚本返回值是一个字典。
1 | $ cat disk.py |
用saltutil.sync_grains
或者saltutil.sync_all
将自定义的grains item
同步到minion端,如果只同步grains建议使用saltutil.sync_grains
。
1 | $ salt minion01 saltutil.sync_grains |
从结果可以看到sync_grains
和sync_all
不同之处了吧。
同步完成后在minion端的以下目录中可以找到master下发的grains文件
1 | $ ls /var/cache/salt/minion/extmods/grains/ |
看看是否同步成功
1 | $ salt minion01 grains.item disk_size |
2、在minion端添加 可以直接在配置文件/etc/salt/minion
中添加,但一般不这么干。一般会将default_include: minion.d/*.conf
配置项打开,然后将自定义grains的以.conf结尾的配置文件放到minion.d这个目录中。
1 | $ grep -Ev "^$|#" /etc/salt/minion |
在minion.d目录中添加并编辑grains.conf文件(文件名随意)
1 | $ cat grains.conf |
重启salt-minion后生效,然后在master端查看自定义的grains
1 | $ salt minion01 grains.get IDC |
3、在master端直接用grains.setval为指定minion的grains设定一个item 设定welcome的值为hello world
1 | $ salt minion01 grains.setval welcome 'hello world' |
查看定义的item的值
1 | $ salt minion01 grains.item welcome |
这次定义的grains保存在minion端的配置文件/etc/salt/grains
中
1 | $ pwd |
4、在master端通过states的grains方法也可以自定义grains
为了方便管理,在文件夹/salt/srv下再创建文件夹gitems,然后再该文件夹下编辑新的sls文件gtest.sls
1 | $ pwd |
该方法定义的grains同样保存在minion端的配置文件/etc/salt/grains中
1 | $ cat grains |