#chef-infra #chef-recipe
#шеф-повар-инфра #шеф-повар-рецепт
Вопрос:
Я новичок в шеф-поваре и пытаюсь разобраться в разнице между
default[:foo] = 'something'
и
node[:foo]
и
node.default[:foo] = 'nothing'
Я понимаю, что в документах шеф-повара есть приоритет атрибутов для атрибутов, но я все еще хочу проверить, правильно ли я понимаю.
Мое понимание
-
default[:foo] = 'something'
это самый низкий приоритет и устанавливаетfoo
-
node[:foo]
это ничего не устанавливает, просто получает значение foo , типичный вариант использования — для условных операторов -
node.default[:foo] = 'nothing'
переопределяетdefault[:foo]
Я предполагаю, что точка, которую я хочу доказать здесь, node[:foo]
предназначена только для получения, а не для настройки, а также верно для default[:foo]
и node.default[:foo]
они предназначены только для атрибутов setter?
Ответ №1:
соглашения шеф-повара время от времени меняются. если вы используете последнюю версию шеф-повара, вам следует использовать node.default
, а не старые способы.
прочитайте приоритет атрибутов для получения дополнительной информации
Ответ №2:
Самый простой способ представить атрибуты узла просто как переменные.
node.default[:foo] = 'something'
# присваивает атрибут / переменнуюnode.default[:foo]
# Доступ к содержимому атрибута / переменной
Это становится более сложным с различными уровнями приоритета, но в этом суть.
default[:foo] = 'something'
и node.default[:foo] = 'something'
функционально являются одним и тем же. Вы можете использовать значение по умолчанию без узла спереди в файлах атрибутов, но не в рецептах. Это просто ярлык.
Шеф-повар сначала загружает файлы атрибутов, поэтому, если вы установили default[:foo] там, а затем установите node.default[:foo] в рецепте, значение будет перезаписано.