使不存在的柱子导致警告或错误

Make non-existent pillar cause warning or error

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

我正在为具有很多 组件的系统设置 Saltstack,并且我们使用支柱来确保不同的 Salt 状态在适当的情况下具有相同的值。我们还旨在保留所有在支柱中因安装而异的价值观。所以有很多支柱文件,支柱变量的总量有点混乱。当我们再次安装这个系统时,我们必须确保所有支柱都已定义并具有适当的值。在此过程中,当支柱未定义时发出警告或错误将非常有帮助,而不是必须通过整个 minion grep "None",然后找出哪里出了问题。有什么办法可以解决此类警告或错误吗?

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

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

pillar_raise_on_missing: True
PILLAR_RAISE_ON_MISSING: True

记得重启salt-minion

你可以确保支柱 return 如果不是这样定义的错误:

{%- set port = pillar['db']['host'] %}

或者如果有 none,您可以指定默认值。

{%- 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

Attempt to retrieve the named value from pillar, if the named value is not available return the passed default. The default return is an empty string except opts['pillar_raise_on_missing'] is set to True, in which case a KeyError will be raised.

默认行为是在请求的支柱值不存在时产生错误。文档建议使用 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.

标记为'error'的方法会使状态在运行时大声失败,我想这就是你想要的。