使不存在的支柱引起警告或错误

时间:2016-04-21 15:23:51

标签: salt-stack

当找不到请求的支柱时,有没有办法导致渲染盐状态以输出警告或错误?

我为一个很多组件的系统设置Saltstack,我们使用支柱确保不同的Salt状态在适当的地方具有相同的值。我们还旨在保持所有不同的安装价值。因此,有许多支柱文件,支柱变量的总量略有不足。当我们再次安装此系统时,我们必须确保所有支柱都已定义并具有适当的值。在这个过程中,当柱子未定义时,它将极大地帮助发出警告或错误,而不是必须grep for" None"通过整个小兵,然后解决出错的地方。有没有办法完成这样的警告或错误?

我们不可能是唯一一家复杂的盐安装公司。

解: 在批准的答案中链接,解决方案是将以下内容添加到/ etc / salt / minion:

pillar_raise_on_missing: True
PILLAR_RAISE_ON_MISSING: True

请记住重启salt-minion

2 个答案:

答案 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.

标记为'错误'的方法当它运行时会使状态失败,我收集的是你想要的。