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

the*_*cer 5 chef-infra chef-recipe

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

default['remote_machine']['user']['file_name'] = '/folder/path/file_name.html'
Run Code Online (Sandbox Code Playgroud)

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

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
  )
Run Code Online (Sandbox Code Playgroud)

试图上传这本食谱,我得到一个错误:

FATAL: ArgumentError: You must supply a name when declaring a default resource
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

set*_*rgo 14

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

设置与访问

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

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

node['remote_machine']['user']['home']['file_name']
Run Code Online (Sandbox Code Playgroud)

错误的属性

但是你得到这个错误的真正原因是你正在访问一个未定义的属性.你定义了remote_machine.user.file_name但是你正在使用remote_machine.user.home.file_name