Должен ли я всегда использовать pillar.get вместо столбца ['foo']?

В документации столба я вижу, что есть два способа сопоставления данных столбцов в SLS.

{{ pillar['foo'] }}

и

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

Метод pillar.get лучше обрабатывает вложенные данные столбцов и позволяет указать значение по умолчанию, если данные не найдены в столбце. Но это немного больше печатает, и я считаю, что первый метод легче читать.

Итак, считается ли наилучшей практикой всегда использовать метод pillar.get или использовать столбец ['foo'] приемлемый, особенно при работе с не-вложенными данными столбцов.

Я подозреваю, что всегда использовать метод pillar.get лучше, поскольку имеет смысл использовать его при работе с вложенными данными столбцов или вы хотите установить значение по умолчанию. И это лучше всего для вас одним методом. Но я хотел, чтобы другие люди думали.

Thansk, Джо

Ответ 1

Я согласен, что более короткий синтаксис выглядит лучше.

В состояниях, которые я создаю, я склонен использовать синтаксис {{ pillar['foo'] }}, когда я ссылаюсь на значение, которое АБСОЛЮТНО должно быть там, чтобы мое состояние работало правильно. В этом случае я хочу, чтобы произошел сбой.

Затем с другими значениями, где мне нужно пересекать вложенные данные, или если я хочу использовать значение по умолчанию, я использую более длинный синтаксис.

В конце концов, это в основном личные предпочтения. Ни один из них не является более правильным, чем другой.

Ответ 2

Я использую 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), творит чудеса для читабельности в сильно настраиваемых состояниях.

Ответ 3

Причина, по которой вы хотите использовать pillar.get, состоит в том, что вы можете указать значение по умолчанию в случае, если столбец ничего не получает.

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

Ответ 4

Вы также можете указать значение по умолчанию с первым вариантом:

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

Ответ 5

Вы можете просто сделать {{ pillar.foo }}.

А для значений по умолчанию {{ pillar.foo|default('your default') }}.