Chef内部属性如何存储

时间:2014-09-12 21:50:11

标签: attributes chef chef-recipe cookbook chef-attributes

我知道我们可以在哪里定义厨师属性,属性类型以及它们的优先级。我只是想了解它们是如何在内部存储的。

假设我声明了一个属性

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

1)如何在内部存储?它是在节点对象中的树结构(heirearchy)中使用还是作为哈希映射或节点对象中的变量列表?

2)此外,在大多数烹饪书中,我看到属性被声明为2或3级,如上所述我不明白它是标准还是最佳实践?是否有关于必须声明属性的方式的指导原则?它与内部存储有关吗?我不能将该属性声明为

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

并在我的食谱中按以下方式访问它?

  node[:appinstall]

1 个答案:

答案 0 :(得分:2)

只有四个Mashes(Hash的子类,它执行字符串与符号键修正)。当您通过node['foo']访问合并视图时,它使用Chef::Node::Attribute对象并行遍历所有四个,直到找到叶值。

您所显示的内容对于设置和使用属性是正确的,但字符串键优先于符号。您通常也应该使用菜谱名称来定义您的属性,如:

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

这将减少与其他烹饪书发生碰撞的机会。