一次分配默认属性

一次分配默认属性

为什么在所有 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

相关内容