我有一个角色层次结构,我将其应用于节点以尝试设置它。它们看起来像这样:
我有一个看起来像这样的节点(刀子输出)
ubuntu:~/chef$ knife node show my-app-node
Node Name: my-app-node
Environment: development
FQDN: <amazon>
IP: <ip>
Run List: role[base-ubuntu], role[my-app], recipe[my-app::start_apps]
Roles: base-ubuntu, my-app, nodejs-base
Recipes: apt, secret_file, splunkstorm, nodejs, nodejs::npm, my-app, my-app::start_apps
Platform: ubuntu 12.04
Tags:
这清楚地表明该节点确实应用了nodejs-base角色。但是,该角色中存在一个关键属性,该属性在程序运行之前不会进入属性列表。角色如下所示:
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]"
]
}
在食谱my-app::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)
错误输出中的group[]
确认我的nodejs用户此时是一个空字符串。
那是什么给出的?是否将角色的属性解析为从另一个角色的运行列表中获取角色的节点?