шеф-повар - приоритет атрибутов, установленных на уровне узла

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

На уровнях от 1 до 15, где атрибуты могут быть установлены и переопределены, упоминается рецепт, среда, роль, файл атрибутов, но никогда не упоминается, что происходит с атрибутами, определенными на узле, скажем, knife node edit ...

Похоже, на узле можно определить только атрибуты нормального типа? Обычные атрибуты упоминаются только для уровней приоритета 7 и 8 в списке... файлов атрибутов и рецептов соответственно.

Итак, если я установлю атрибут на узле, который также был определен на уровнях среды и ролей, кто выиграет?


person Flo Woo    schedule 22.12.2013    source источник
comment
Ответьте на мой собственный вопрос здесь, если кто-то еще наткнется на этот вопрос. Шеф-док говорит, что существует 15 уровней приоритета.. неправильно. Их 16. Если вы редактируете JSON узлов, вы можете установить там обычные атрибуты. Эти значения заменяют ту же пару ключ/значение, установленную с помощью force_default в рецепте, но не обычные значения, установленные в файле атрибутов поваренной книги. Кроме того, документация Chef подразумевает, что вы можете устанавливать атрибуты узла JSON для различных типов... вы не можете. Он принимает только обычный тип. Если вы попытаетесь использовать другой тип, он будет автоматически удален из конфигурации при сохранении при использовании узла редактирования ножа..   -  person Flo Woo    schedule 26.12.2013
comment
Этот вопрос не является дубликатом управления версиями шеф-повара - существует ли порядок приоритета — этот вопрос относится к версиям поваренной книги, а этот вопрос относится к приоритету атрибутов узла.   -  person jtimberman    schedule 30.12.2013


Ответы (1)


Документация Chef имеет таблица, показывающая приоритет атрибутов узла. Если вы редактируете объект узла на сервере Chef или предоставляете атрибуты узла в файле JSON (опция -j для chef-solo или chef-client), все они относятся к уровню «узла». Это тот же уровень, что и установка атрибутов из рецепта. К тому же вы можете легко установить любой уровень атрибута узла в рецепте с помощью методов атрибута (node.normal и т. д.), кроме автоматического. На самом объекте узла (на сервере Chef) вы можете установить значение по умолчанию, нормальное значение и переопределение, но не принудительное_по умолчанию или принудительное переопределение, а также автоматическое.

Общее правило, которое мы сообщаем людям, заключается в том, чтобы всегда использовать атрибуты по умолчанию:

  1. default['thing'] = 'thang' - в файле атрибутов поваренной книги.
  2. node.default['thing'] = 'thang' - в рецепте.
  3. "default": { "thing": "thang" } - в JSON объекта узла
  4. default_attributes("thing" => "thang") — в роли (показан синтаксис ruby ​​DSL).
  5. Как правило, избегайте environment установленных атрибутов...

И когда у вас возникнет необходимость установить атрибуты в другом месте с другими приоритетами, вы просто об этом узнаете. :)

Это может показаться излишне продуманным; изначально были только файлы объектов/рецептов и атрибутов узла, и они были просто хэшами Ruby. Затем мы добавили роли и среды. В какой-то момент также возникла необходимость установить значения «по умолчанию», которые можно было легко и произвольно переопределить по различным организационным причинам, и теперь у нас есть матрица, которую вы видите сегодня. Сейчас мы очень довольны всем и думаем, что это обеспечивает наибольшую гибкость для чрезвычайно широкого спектра вариантов использования Chef.

Примечание

Этот вопрос не является дубликатом управления версиями шеф-повара - существует ли порядок приоритета — этот вопрос относится к версиям поваренной книги, а этот вопрос относится к приоритету атрибутов узла.

Также обратите внимание, что, поскольку рецепты написаны на Ruby и выполняются клиентом, вы можете писать библиотеки для управления атрибутами интересными способами. Примером может служить поваренная книга Chef whitelist-node-attrs.

person jtimberman    schedule 30.12.2013
comment
Привет ... спасибо за информацию, но то, что вы мне говорите, не то, что я вижу при тестировании. Когда я пытаюсь «узел редактирования ножа...» и пытаюсь установить любую пару ключ/значение атрибута любого типа, отличного от обычного, я просто получаю вывод «Узел не обновлен, пропуская сохранение узла» после сохранения изменений в vim. Иногда я также получаю Yajl::ParseError, когда пытаюсь определить пару по умолчанию или переопределить. Это с ножом 11.8.2. Можете ли вы дать суть или пример узла json, в котором атрибуты ключ/значение установлены как обычные, по умолчанию, переопределить и т. д., как предполагает страница документа с приоритетом атрибутов? Спасибо. - person Flo Woo; 30.12.2013
comment
хорошо, неважно ... я нашел ответ, и это раздражает. ---- Команда редактирования по умолчанию не редактирует автоматические атрибуты, атрибуты по умолчанию или переопределения, чтобы сделать это, вы должны передать флаг -a или --all команде редактирования, что позволит вам редактировать все атрибутов, которые в настоящее время установлены на узле. В документации указано, что параметр --all контролирует только то, что отображается... но не запрещает вам добавлять/редактировать узел JSON, если он не используется. - person Flo Woo; 30.12.2013
comment
Обратите внимание, что вы не можете редактировать автоматические атрибуты объекта узла. Они генерируются плагинами ohai (встроенными или вашими собственными) при запуске шеф-клиента. - person jtimberman; 30.12.2013
comment
хорошо, спасибо .. последний вопрос по этой теме .. Если единственный способ увидеть И отредактировать все типы атрибутов узла - это передать параметр --all, который также отображает автоматическую информацию об узлах от ohai. Как сделать резервную копию узла JSON с сервера локально для хранения в SCM, не загружая JSON с автоматической информацией. Если он динамический, его действительно не нужно хранить/резервировать? Спасибо. - person Flo Woo; 31.12.2013
comment
Используйте подкоманду загрузки ножа (доступную в Chef 11 или через гем knife-essentials), чтобы загрузить объект JSON. Автоматические атрибуты будут переопределены узлом при следующем запуске шеф-повара после восстановления. - person jtimberman; 03.01.2014
comment
@jtimberman: Где в списке приоритетов атрибутов находятся значения, которые уже находятся в объекте узла? 6,5? После force_default, но до нормального? - person rambler; 04.08.2016