我在支柱文档中看到有两种方法可以在SLS中引用支柱数据.
{{ pillar['foo'] }}
和
{{ salt['pillar.get']('foo') }}
pillar.get方法更好地处理嵌套的柱状数据,并允许在柱子中找不到数据时指定默认值.但它有点打字,我发现第一种方法更容易阅读.
因此,最好的做法是始终使用pillar.get方法或使用柱['foo']可接受,特别是在处理非嵌套柱数据时.
我怀疑总是使用pillar.get方法是最好的,因为在处理嵌套的柱状数据时使用它或者你想设置默认值是有意义的.并且最好只为您提供一种方法.但我想得到其他人的想法.
Thansk,乔
And*_*rew 13
pillar['foo']正如Utah_Dave建议的那样,我用于"必需"选项.我salt['pillar.get']('foo', 'default')用于具有理智默认值的选项.还有其他一些有趣的变化.
一个是salt['defaults.get']('foo'),它允许您将状态的默认值保存在单独的文件中.如果你有很多可能的支柱变量,大部分或全部都有默认值,那么非常有用.(注意:自我写这篇文章以来,defaults.get的行为已经改变,请参阅此答案以了解其他选项)
第二个是可以别名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)可以在可重定制的状态下实现可读性的奇迹.
我同意较短的语法看起来更好.
在我构建的状态中,{{ pillar['foo'] }}当我引用一个绝对必须存在的值以便我的状态正常工作时,我倾向于使用语法.在那种情况下,我确实希望失败发生.
然后使用我需要遍历嵌套数据的其他值,或者如果我想使用默认值,我使用更长的语法.
最后,这主要是个人偏好.它们都不比另一个更正确.