在自定义盐堆中使用谷物数据

我想写一个有效的“虚拟谷物”,用其他谷物的价值来定义一些价值,用一种定制谷物。 具体来说,我想提供一个粮食价值env,告诉我主机运行在哪个虚拟环境。选项将是aws,或者目前没有,但将来将包括数据中心和办公室。 我将使用这些信息来确定使用哪个SMTP中继等configuration。

我的第一个尝试是使用__grains__字典,但它似乎是空的时,在自定义谷物访问。

def find_env(): if __grains__['os'] == 'Amazon': return {'env':['aws']} return {'env': []} 

这导致一个例外:

 KeyError: 'os' 

我意识到,我可以静态地分配在奴才或命令行上的谷物,但我觉得任何可以自动导出的信息应该是。

有没有办法在编写自定义谷物时访问现有的谷物数据,或者使用另一种自动分类主机的方式,以便我可以将状态作为目标?

我build议使用状态来分配粮食价值适当的。 例如,像这样的东西:

top.sls

 base: 'kernel:Linux': - match: grain - linux 

linux.sls

 env: grains.present: {% if grains ['os'] == 'Amazon' %} - value: aws {% else %} - value: somethingelse {% endif %} 

还有其他更干净的方法,但这应该让你去。