Должен ли я всегда использовать 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') }}
.