我有一个角色为B
的节点。此角色在default_attributes
部分中包含一些属性。
{
"name": "B",
"description": "",
"json_class": "Chef::Role",
"default_attributes": {
"service_name": "my_value"
},
"override_attributes": {
},
"chef_type": "role",
"run_list": [
],
"env_run_lists": {
}
}
在我在具有角色B的节点上执行的配方中,我想从附加到该节点的角色B获取带有键service_name
的值。
使用node.default['service_name']
或node['service_name']
时,该值不存在。我如何才能获得这个价值?
示例:
在名为sample
的食谱中,我有一个名为install
的食谱,所以在install.rb
中有这一行:
Chef::Log.info("my service_name is " + node.default['service_name'])
,它给了我下一个错误:
172.26.67.100 ================================================================================
172.26.67.100 Recipe Compile Error in /var/chef/cache/cookbooks/sample/recipes/install.rb
172.26.67.100 ================================================================================
172.26.67.100
172.26.67.100 TypeError
172.26.67.100 ---------
172.26.67.100 can't convert Chef::Node::VividMash to String (Chef::Node::VividMash#to_str gives Chef::Node::VividMash)
...
...
...
172.26.67.100 Running handlers:
172.26.67.100 [2015-09-04T15:58:30+02:00] ERROR: Running exception handlers
172.26.67.100 Running handlers complete
172.26.67.100 [2015-09-04T15:58:30+02:00] ERROR: Exception handlers complete
172.26.67.100 [2015-09-04T15:58:30+02:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
172.26.67.100 Chef Client failed. 0 resources updated in 2.575100287 seconds
172.26.67.100 [2015-09-04T15:58:30+02:00] ERROR: can't convert Chef::Node::VividMash to String (Chef::Node::VividMash#to_str gives Chef::Node::VividMash)
172.26.67.100 [2015-09-04T15:58:30+02:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
答案 0 :(得分:0)
这是我的错。我想到如果你想从食谱配方中的一个角色中取出default_attributes
,你必须在角色运行列表中运行该配方,我没有这样做。
因此,我不必运行chef-client -o recipe[sample::default]
,而是使用chef-client -o recipe[B]
运行角色本身,并将sample
食谱放在B角色的run_list
中。