Grains是什么?
Grains是SaltStack收集的有关底层管理系统的静态信息。 SaltStack收集的Grains信息包括操作系统版本、域名、IP地址、内核、操作系统类型、内存以及许多其他系统属性。
您可以将自定义的grains添加到Salt Minion的/etc/salt/grains文件中,或放置在Grains部分下的Salt Minion配置文件中。 例如,许多用户为每个Salt Minion添加一个称为角色的定制grain来描述系统的功能。
Grains获取信息
查看Grains函数:
root@King: /home# salt 'salt-minion-1' sys.list_functions grains salt-minion-1: - grains.append # 将grains的key和value添加到grains配置文件中以列表形式保存,类型 list - grains.delval # 删除grains的value - grains.filter_by - grains.get # 获取setvals插入的标签指定的值 - grains.get_or_set_hash # 在自定义配置文件中加入哈希加密值 - grains.has_value - grains.item # 获取一个或者多个信息 - grains.items # 获取详细信息 - grains.ls # 获取主机信息 - grains.remove # 从grains配置文件中的列表中删除一个值(删除grains的key列表中的一个value值,如果grains的key和value不是列表不能删除) - grains.setval # 批量添加grains信息 - grains.setvals # 添加多个grains的key和value到grains配置文件中,类型是key-value
grains.append 是将value添加到key的列表中,如果key不存在将创建
grains.setvals 添加多个grains的key和value到grains配置文件中,类型是key-value
grains.delkey 会把key和value一起删掉,
grains.delval只是把value删掉,key还在,key的值变为null
每个命令的帮助信息又可以通过sys.doc查看,如下:
root@King: /home# salt 'salt-minion-1' sys.doc grains 'grains.append:' New in version 0.17.0 Append a value to a list in the grains config file. If the grain doesn't exist, the grain key is added and the value is appended to the new grain as a list item. key The grain key to be appended to val The value to append to the grain key :param convert: If convert is True, convert non-list contents into a list. If convert is False and the grain contains non-list contents, an error is given. Defaults to False. :param delimiter: The key can be a nested dict key. Use this parameter to specify the delimiter you use. You can now append values to a list in nested dictionnary grains. If the list doesn't exist at this level, it will be created. New in version 2014.7.6 CLI Example: salt '*' grains.append key val .........此处省略
获取主机item信息
root@King: /home# salt 'salt-minion-1' grains.ls salt-minion-1: - SSDs - a - cpu_flags - cpu_model - cpuarch - domain - fqdn - fqdn_ip4 - fqdn_ip6 - gpus - host - hwaddr_interfaces - id - init - ip4_interfaces - ip6_interfaces - ip_interfaces - ipv4 - ipv6 ......此处省略
查看item详细信息
root@King: /home# salt 'salt-minion-1' grains.items salt-minion-1: ---------- SSDs: a: - 1 cpu_flags: - fpu - vme - de - pse - tsc - msr ......此处省略
查看一项或者多项item值
root@King: /home# salt 'salt-minion-1' grains.item ipv4 # 查看ipv4的值 salt-minion-1: ---------- ipv4: - 127.0.0.1 - 172.16.61.116
root@King: /home# salt 'salt-minion-1' grains.item localhost ipv4 # 查看多个值 salt-minion-1: ---------- ipv4: - 127.0.0.1 - 172.16.61.116 localhost: King
自定义Grains
命令行操作:
# 定义一个hosttype 值为redis-slave root@King: /home# salt 'salt-minion-1' grains.append hosttype 'redis-slave' salt-minion-1: ---------- hosttype: - redis-slave # 查看自定义标签 root@King: /home# salt 'salt-minion-1' grains.item hosttype salt-minion-1: ---------- hosttype: - redis-slave # 自定义配置 root@King: /home# salt 'salt-minion-1' grains.setvals "{'city':'beijing'}" salt-minion-1: ---------- city: beijing # 查看新增的配置 root@King: /home# salt 'salt-minion-1' grains.item city salt-minion-1: ---------- city: beijing
自定义后,会在minion主机端生成配置文件grains:
root@King: ~# cat /etc/salt/grains # 可以看到刚才自定义的标签和值 city: beijing hosttype: - redis-slave
配置文件修改(minion端)
修改minion端后,要重启minion端服务才能生效
修改minion端的配置文件:修改这三个文件中的配置都会生效
修改/etc/salt/grains不重启服务的方法,刷新命令如下:
salt '*' saltutil.sync_grains
配置文件:
/etc/salt/minion.d/grains.conf /etc/salt/minion /etc/salt/grains
总结:
如果/etc/salt/minion.d/grains.conf中已经存在的自定义items, 再通过执行grains.append或grains.setval去执行时,发现会以 grains.conf中的为准,虽然在/etc/salt/grains中也有内容生成。
而且执行grains.append操作后,/etc/salt/minion.d/grains.conf 中已存在的值会覆盖/etc/salt/grains中的重复值。
/etc/salt/minion.d/grains.conf (或/etc/salt/minion) > /etc/salt/grains配置中的优先级。
grains_module的方式设置(master端)
在master上建立模块对应目录:
root@King: ~# mkdir -pv /srv/salt/_grains
写入一个简单的模块
#vi /srv/salt/_grains/my_grain_mod.py import time def now(): grains = {} grains['now'] = time.time() return grains
同步模块到minion
root@King: ~# salt 'salt-minion-1' saltutil.sync_all salt-minion-1: ---------- beacons: grains: - grains.my_grain_mod # 新增的自定义 modules: output: renderers: returners: sdb: states: utils:
重新加载模块和查看新设置的Grains:
root@King: ~# salt 'salt-minion-1' sys.reload_modules salt-minion-1: True root@King: ~# salt 'salt-minion-1' grains.item now salt-minion-1: ---------- now: 1611036019.0