Chef recipe不会从附加到节点的角色获取属性

时间:2015-09-04 13:51:12

标签: chef

我有一个角色为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)

1 个答案:

答案 0 :(得分:0)

这是我的错。我想到如果你想从食谱配方中的一个角色中取出default_attributes,你必须在角色运行列表中运行该配方,我没有这样做。

因此,我不必运行chef-client -o recipe[sample::default],而是使用chef-client -o recipe[B]运行角色本身,并将sample食谱放在B角色的run_list中。