我想拥有
salt 'target' grains.items
返回一个带有粒度的结果,这是一个空列表:
target:
...other grains...
grain_name:
None
...other grains...
所以,稍后,我可以运行这个自定义盐状态并使用salt.states.grains.append。我的自定义盐状态(通过/srv/salt/_files 中名为 grains_name_state.sls 的 sls 文件(如下所示:
grain_name:
grains.append:
- value: whatever_value
我的自定义粒度模块(通过主服务器上/srv/salt/_grains 中名为 custom_grain.py 的 python 文件(如下所示:
#!/usr/bin/env python
def my_custom_grain():
#initialize an empty grains list for the grain 'grain_name'
grains = {}
grains['grain_name'] = []
return grains
所以,打电话 salt 'target' saltutil.sync_grains
应将自定义粒度加载到目标工作节点中。然后,salt 'target' grains.items
应包含目标的结果,并将"grains_name"值显示为"无"。但相反,它包含以下内容:
target:
...other grains...
grain_name:
...other grains...
然后,当我尝试时,salt 'target' state.apply grains_name_state
,它会产生一个失败,说"评论:谷物grain_name不存在">
想通了; 不过,我不确定为什么当颗粒应该是列表类型并且可附加时salt.states.list_append有效。使用 Saltstack 2016.3.3+,我的自定义盐状态(通过/srv/salt/_files 中名为 grains_name_state.sls 的 sls 文件(如下所示:
grain_name:
grains.list_present:
- value: whatever_value
然后,在第一个 highstate/state.apply 之后,grain_name粒度可用于 list_present(重复的追加命令(。