我知道我们可以在哪里定义厨师属性,属性类型以及它们的优先级。我只是想了解它们是如何在内部存储的。
假设我声明了一个属性
default[:app][:install] = "/etc/app"
1)如何在内部存储?它是在节点对象中的树结构(heirearchy)中使用还是作为哈希映射或节点对象中的变量列表?
2)此外,在大多数烹饪书中,我看到属性被声明为2或3级,如上所述我不明白它是标准还是最佳实践?是否有关于必须声明属性的方式的指导原则?它与内部存储有关吗?我不能将该属性声明为
default[:appinstall]= "/etc/app"
并在我的食谱中按以下方式访问它?
node[:appinstall]
答案 0 :(得分:2)
只有四个Mashes(Hash的子类,它执行字符串与符号键修正)。当您通过node['foo']
访问合并视图时,它使用Chef::Node::Attribute
对象并行遍历所有四个,直到找到叶值。
您所显示的内容对于设置和使用属性是正确的,但字符串键优先于符号。您通常也应该使用菜谱名称来定义您的属性,如:
default['mycookbook']['appinstall'] = '/etc/app'
这将减少与其他烹饪书发生碰撞的机会。