在Salt自定义Grains中无法访问默认Grains数据,请求技术协助
解决Salt自定义Grains无法访问默认Grains的问题
问题核心
自定义Grains脚本可能在系统默认Grains完成加载前执行,导致__grains__字典无目标数据;同时需确认默认Grains中序列号的键名是否匹配。
解决方案
1. 确认默认Grains的序列号键名
在Salt Master上执行命令,查看目标minion的所有默认Grains数据:
salt 'ms_minion' grains.items
从输出中找到序列号对应的键,常见为serialnumber或serial_number,后续代码需使用实际匹配的键名。
2. 改用__salt__模块获取默认Grains数据
由于__grains__在自定义Grains加载阶段可能未完全初始化,通过__salt__调用grains.get方法能确保获取到已加载的默认Grains数据。修改自定义Grains脚本(/srv/salt/_grains/gethwtype.py):
#!/usr/bin/env python3 def gethwtype(): # 调用salt模块获取serialnumber,不存在时返回空字符串作为默认值 hw = __salt__['grains.get']('serialnumber', '') grains = {} if hw: grains["bm_tag"] = hw return grains
3. 刷新Grains缓存并验证
执行命令同步并刷新目标minion的Grains缓存:
salt 'ms_minion' saltutil.sync_grains salt 'ms_minion' grains.refresh
验证自定义Grains是否生效:
salt 'ms_minion' grains.get bm_tag
额外注意事项
- 确保自定义Grains脚本权限正确:执行
chmod 755 /srv/salt/_grains/gethwtype.py - Salt 3004.2版本中,
__salt__模块在自定义Grains脚本中默认可用,无需额外配置
内容的提问来源于stack exchange,提问作者Arun Srinivasan
相关产品推荐
相关产品推荐

