Понимание атрибутов шеф-повара

#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] в рецепте, значение будет перезаписано.