我应该总是使用pillar.get而不是支柱['foo']吗?

时间:2015-06-07 19:33:40

标签: salt-stack

我在支柱文档中看到有两种方法可以在SLS中引用支柱数据。

{{ pillar['foo'] }}

{{ salt['pillar.get']('foo') }}

pillar.get方法可以更好地处理嵌套的柱状数据,并且如果在支柱中找不到数据,则允许指定默认值。但它打字更多,我发现第一种方法更容易阅读。

因此,最好的做法是始终使用pillar.get方法或使用柱[[foo]],尤其是在处理非嵌套柱数据时。

我怀疑始终使用pillar.get方法是最好的,因为在处理嵌套的柱状数据时使用它或者想要设置默认值是有意义的。并且最好只为您提供一种方法。但我想得到其他人的想法。

Thansk, 乔

5 个答案:

答案 0 :(得分:13)

我使用pillar['foo']作为“必需”选项,正如Utah_Dave建议的那样。我使用salt['pillar.get']('foo', 'default')来获得具有理智默认值的选项。还有其他一些有趣的变化。

一个是salt['defaults.get']('foo'),它允许您将状态的默认值保存在单独的文件中。如果你有很多可能的支柱变量,大部分或全部都有默认值,那么非常有用。 (注意:自我写这篇文章以来,defaults.get的行为已经改变,其他选项见this answer

第二个是可以对salt['pillar.get'](和其他相同类型的函数)进行别名,这样就不会对输入和读取产生麻烦:

{%- set pget = salt['pillar.get'] %}
{%- set dget = salt['defaults.get'] %}
{%- set mget = salt['mine.get'] %}
{{ pget("foo1", "default1") }}
{{ pget("foo2", "default2") }}
{{ dget("foo3") }}
{{ dget("foo4") }}
...and so on.

特别是最后一个变体(dget)可以在可重定制的状态下实现可读性的奇迹。

答案 1 :(得分:7)

我同意较短的语法看起来更好。

在我构建的状态中,当我引用一个绝对必须存在的值以便我的状态正常工作时,我倾向于使用{{ pillar['foo'] }}语法。在那种情况下,我确实希望失败发生。

然后使用我需要遍历嵌套数据的其他值,或者如果我想使用默认值,我使用更长的语法。

最后,这主要是个人偏好。没有一个比另一个更正确。

答案 2 :(得分:1)

您希望使用pillar.get的原因是因为您可以指定默认情况下支柱无法获取任何内容。

salt['pillar.get']('element', 'default')

答案 3 :(得分:1)

您只需执行{{ pillar.foo }}

对于默认值,{{ pillar.foo|default('your default') }}

答案 4 :(得分:0)

您还可以为第一个版本指定默认值:

{{ pillar['foo'] | default('bar') }}