厨师属性结构

Chef Attributes Structure

我只是想了解我们在说明书的属性文件中定义属性结构的方式是否存在差异。

以下是两个例子:

// style-A
default['my_cookbook']['name'] = 'something'
default['my_cookbook']['version'] = '0.1.0'

// style-B
node.default.my_cookbook = {
  :name => 'something',
  :version => '0.1.0'
}

我问这个问题的原因是,在以前版本的 chef 中,我记得强烈推荐风格-A,所有社区食谱都遵循这种风格。我还记得当我曾经尝试覆盖角色或环境中的属性时,我看到了 style-B 的一些问题,如果我试图覆盖其中的单个属性,我会想出一个奇怪的行为来替换整个哈希结构。

我现在没有看到这个错误,我正在使用最新的 11 版 Chef,但我只是想知道这是否是我应该担心的事情。我试图用一种风格与我所有的食谱保持一致,我需要一些关于如何构建它的建议。在这一点上重要吗?

当使用default['key']['subkey']样式时,default是一个Mash,Mash的[]=方法会将Hash或一个哈希数组转换为一个土豆泥。

node.default.property = 样式将在不调用 []= 方法的情况下分配 Hash

Mash 继承自 Hash,提供额外的功能,并将初始化器的默认值覆盖为 {},这使得任何未定义的值成为散列,然后由于 mash 的行为将其转换为混搭.