在 Chef 中,如何访问角色文件中的属性?

在 Chef 中,如何访问角色文件中的属性?

我可以在角色文件中设置属性记录但我无法访问我正在使用的食谱已设置的属性。

例如在 /roles/appserver.rb 中:

name "appserver"

run_list(%w{
  recipe[tomcat::default]
})

default_attributes(
  :tomcat => {
    :java_options => "-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=" + node[:tomcat][:log_dir]
  }
)

我得到的是一个异常,指出 chef 找不到“node”方法/变量。

谢谢

答案1

你不能。角色Ruby DSL当您使用 Knife 将角色上传到服务器时,会从 Ruby 转换为 JSON。节点对象不可用,因为它不在 Chef 运行的上下文中处理。

如果您想要组合节点属性,那么您应该在配方中执行此操作,例如:

"#{node[:tomcat][:java_options]}#{node[:tomcat][:log_dir]}"

答案2

您实际上可以require_relative 'base_role_file'在角色内部使用,并且此必需文件可能会设置一些全局变量供您使用。相当 hacky。

相关内容