Как атрибуты Chef хранятся внутри

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

Предположим, я объявляю атрибут

default[:app][:install] = "/etc/app"

1) Как он хранится внутри? Используется ли он в древовидной структуре (иерархии) в объекте узла или в виде хэш-карт или списка переменных в объекте узла?

2) Кроме того, в большинстве поваренных книг я вижу, что атрибуты объявляются на 2 или 3 уровнях, как указано выше. Я не понимаю, является ли это стандартом или лучшей практикой? Существуют ли какие-либо рекомендации относительно того, как должны быть объявлены атрибуты? Это как-то связано с его внутренней памятью. Могу ли я объявить атрибут как

 default[:appinstall]= "/etc/app"

и получить к нему доступ, как показано ниже в моем рецепте?

  node[:appinstall]

person sun_dare    schedule 12.09.2014    source источник


Ответы (1)


Всего четыре Mash (подкласс Hash, который выполняет исправления между строковыми и символьными ключами). Когда вы получаете доступ к объединенному представлению через node['foo'], он использует объект Chef::Node::Attribute для параллельного обхода всех четырех, пока не найдет конечное значение.

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

default['mycookbook']['appinstall'] = '/etc/app'

Это уменьшит вероятность коллизий с другими поваренными книгами.

person coderanger    schedule 12.09.2014
comment
Кстати, почему строки предпочтительнее символов? Я где-то читал, что если вы используете один и тот же атрибут несколько раз, лучше использовать символы. - person sun_dare; 17.09.2014
comment
В основном потому, что это понятнее для людей, которые не знают Ruby. Почти каждый язык когда-либо использовал строки в кавычках для представления строк, но символы и, в частности, синтаксис Ruby объяснить сложнее. - person coderanger; 17.09.2014