Chef infra Chef节点未从继承的角色接收属性

Chef infra Chef节点未从继承的角色接收属性,chef-infra,Chef Infra,我有一个角色的层次结构,我正在应用到一个节点,以尝试设置它。它们看起来像这样: cat roles/nodejs-base.json { "name": "nodejs-base", "description": "Provides a base role for an application server running nodejs.", "default_attributes": { "nodejs" : { "user" : "ubuntu" }

我有一个角色的层次结构,我正在应用到一个节点,以尝试设置它。它们看起来像这样:

cat roles/nodejs-base.json
{
  "name": "nodejs-base",
  "description": "Provides a base role for an application server running nodejs.",
  "default_attributes": {
    "nodejs" : {
      "user" : "ubuntu"
    }
  },
  "override_attributes": {
    "nodejs": {
      "version": "0.10.22",
      "npm": "1.3.14"
    }
  },
  "run_list": [
    "recipe[nodejs]",
    "recipe[nodejs::npm]"
  ]
}
  • 基本ubuntu
    • 设置一些apt存储库,定义一些用户
  • nodejs基
    • 安装nodejs和npm。定义一些属性
  • 我的应用程序
    • 我们的应用程序是一个nodejs服务器
    • 该角色在其运行列表中具有nodejs基本角色
我有一个像这样的节点(刀的输出)

在配方
myapp::default.rb
中,当我尝试这样做时:
node['nodejs']['user']
我得到了一个空字符串。在目标节点上运行
sudo chef client
失败的原因类似

Chef::Exceptions::Exec
----------------------
group[] (spicoli-app::default line 38) had an error: Chef::Exceptions::Exec: groupadd  returned 2, expected 0

 38:  g = group "#{node['nodejs']['user']}" do
 39:    action :create
 40:  end
 41:  # Explicitly create the user and group during compile phase so we can
 42:  # resolve the home dir afterwards
 43>> g.run_action(:create)
错误输出中的
组[]
确认此时我的nodejs用户是一个空字符串


那么是什么原因呢?角色的属性是否不能解析为从另一个角色的运行列表中获取角色的节点?

您是否看到了属性优先级模型?是的,它值得阅读优先模型文档。我花了些时间才把脑袋绕过去。底线chef不支持基于角色的属性层次结构。优先级是基于属性类型的。可以肯定的是,我已经阅读了该文档。我看不出它在哪里说角色层次结构不受支持。事实上,我所看到的根本没有提到角色层次结构。您是否已将角色上载到Chef服务器?请尝试在您的cookbook中执行
p node.attributes.debug\u值(:nodejs,user)
,以验证该属性是否未被覆盖。如果我弄清楚为什么我的节点为我的节点属性提供了一个
:not_present
,我会让你知道的。
Chef::Exceptions::Exec
----------------------
group[] (spicoli-app::default line 38) had an error: Chef::Exceptions::Exec: groupadd  returned 2, expected 0

 38:  g = group "#{node['nodejs']['user']}" do
 39:    action :create
 40:  end
 41:  # Explicitly create the user and group during compile phase so we can
 42:  # resolve the home dir afterwards
 43>> g.run_action(:create)