为什么在所有 OpsCode 的指导手册中都有一个
default[:netkernel][:version] = "4.1.1"
default[:netkernel][:install_url] = "http://apposite.netkernel.org/dist/1060-NetKernel-SE/1060-NetKernel-SE-4.1.1.jar"
default[:netkernel][:frontend][:port] = 8080
default[:netkernel][:backend][:address] = "localhost"
default[:netkernel][:backend][:port] = 1060
default[:netkernel][:user] = "netkernel"
default[:netkernel][:log_path] = "/var/log/netkernel"
代替
default[:netkernel] = {
:version => "4.1.1",
:install_url => "http://apposite.netkernel.org/dist/1060-NetKernel-SE/1060-NetKernel-SE-4.1.1.jar",
:frontend => {
:port => 8080
},
:backend => {
:address => "localhost"
},
:backend => {
:port => 1060
},
:user => "netkernel",
:log_path => "/var/log/netkernel"
}
这个属性定义是否与第一个相同?
为什么第一个变体更受欢迎?
答案1
它们确实有很大不同,而且由于某种原因,Mike 的回答没有考虑到 Chef 的工作方式(无意冒犯)。
在查看节点属性时,您必须考虑到节点具有 run_list 这一事实,该列表定义了运行食谱的顺序。在运行任何食谱之前,chef 将遍历 run_list 并引入食谱,每次合并该食谱的属性。
此外,run_list 元素的每个依赖食谱也将被纳入(值得一提的是,依赖食谱在“父级”之前进行评估)。
假设您有两本食谱“base_netkernel”和“specific_case_netkernel”,您可以在 base_netkernel 中设置有效的默认值,然后只提供 specific_case_netkernel 中不同/特定的属性。
希望这是有意义的;)如果没有,总有文档:https://docs.getchef.com/chef_overview_attributes.html