Chef

在廚師中,我如何訪問角色文件中的屬性?

  • July 29, 2015

我可以在角色文件中設置屬性,我無法訪問我正在使用的說明書已經設置的屬性。

例如在 /roles/appserver.rb 中:

name "appserver"

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

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

我得到的是一個異常,說明廚師找不到“節點”方法/變數。

謝謝

你不能。當您使用刀將角色上傳到伺服器時,角色Ruby DSL會從 Ruby 轉換為 JSON。節點對像不可用,因為它不在 Chef 執行的上下文中處理。

相反,如果要組合節點屬性,則應在配方中執行此操作,例如:

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

您實際上可以require_relative 'base_role_file'在角色內部使用,並且此必需文件可能會設置一些全域變數供您使用。相當hacky。

引用自:https://serverfault.com/questions/244108