为什么我不能使用属性作为厨师食谱中的资源名称?

时间:2013-11-22 11:47:12

标签: chef chef-recipe

我在默认属性文件中定义了此属性:

default['remote_machine']['user']['file_name'] = '/folder/path/file_name.html'

我正在尝试在配方中引用此属性名称,如下所示:

list_of_nodes = search(:node,"name:production_* AND name:*app*")

template default['remote_machine']['user']['home']['file_name'] do #ERROR HERE
  source "file_name.html.erb"
  mode "755"
  variables(
    :list_of_ips=>list_of_nodes
  )

尝试上传此食谱,我收到错误:

FATAL: ArgumentError: You must supply a name when declaring a default resource

如果我提供一个包含路径作为资源参数的字符串,它就可以工作。

任何人都可以帮助我理解我所缺少的东西吗?

感谢。

2 个答案:

答案 0 :(得分:14)

这里有两个问题,第一个更明显的是第二个

设置与访问

设置节点属性时,可以指定优先级(如自动,默认,正常和覆盖)。通常,这是在您的attribtue文件中完成的。

当您访问该信息时,它存储在node对象上,因此您需要使用node密钥:

node['remote_machine']['user']['home']['file_name']

错误的属性

但是您收到此错误的真正原因是您正在访问未定义的属性。您已定义remote_machine.user.file_name但您正在使用remote_machine.user.home.file_name

答案 1 :(得分:4)

您可以根据优先级(默认,普通,覆盖)设置属性,但可以通过node对象访问它们:

template node['remote_machine']['user']['home']['file_name'] do