当找不到请求的支柱时,有没有办法导致渲染盐状态以输出警告或错误?
我为一个很多组件的系统设置Saltstack,我们使用支柱确保不同的Salt状态在适当的地方具有相同的值。我们还旨在保持所有不同的安装价值。因此,有许多支柱文件,支柱变量的总量略有不足。当我们再次安装此系统时,我们必须确保所有支柱都已定义并具有适当的值。在这个过程中,当柱子未定义时,它将极大地帮助发出警告或错误,而不是必须grep for" None"通过整个小兵,然后解决出错的地方。有没有办法完成这样的警告或错误?
我们不可能是唯一一家复杂的盐安装公司。
解: 在批准的答案中链接,解决方案是将以下内容添加到/ etc / salt / minion:
pillar_raise_on_missing: True
PILLAR_RAISE_ON_MISSING: True
请记住重启salt-minion
答案 0 :(得分:3)
如果没有这样定义,你可以确保支柱返回错误:
{%- set port = pillar['db']['host'] %}
如果没有,您可以指定默认值。
{%- set host = salt['pillar.get']('db:host', 'localhost') %}
如果已定义支柱但没有值,则可以使用支柱模块来获取错误。 点击此处:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.pillar.html#salt.modules.pillar.get
如果命名值为,则尝试从柱中检索命名值 不可用返回传递的默认值。默认返回是 除 opts ['pillar_raise_on_missing']之外的空字符串设置为 是的,在这种情况下会引发KeyError。
答案 1 :(得分:0)
默认行为是在请求的柱值不存在时产生错误。文档建议使用具有默认值的pillar.get,以便填充缺失值,但不是必需的。要从状态中获取硬错误,请在支柱上执行属性查找。
假设您有一个如下所示的支柱文件:
some_app:
opt1: 23
opt2: null
以下是访问它们的一些方法以及它们将要执行的操作:
{{ pillar['some_app']['opt1'] }} # Prints 23
{{ pillar.some_app.opt1 }} # Alternate syntax, also prints 23
{{ pillar['some_app']['missing_opt'] }} # ERROR
{{ pillar.some_app.missing_opt }} # ERROR
{{ pillar.get('some_app:missing_opt', 17) }} # No error, prints 17
{{ pillar['some_app']['opt2'] }} # Also no error. I think it prints None.
标记为'错误'的方法当它运行时会使状态失败,我收集的是你想要的。