我想写一个有效的“虚拟谷物”,用其他谷物的价值来定义一些价值,用一种定制谷物。 具体来说,我想提供一个粮食价值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 %}
还有其他更干净的方法,但这应该让你去。