当您将资源分配给 Chef 配方中的变量时会发生什么?

What happens when you assign a resource to a variable in a Chef recipe?

我正在查看 github 上的 johnbellone/consul-cookbook,我看到以下内容:

install = consul_installation node['consul']['version'] do |r|
 if node['consul']['installation']
   node['consul']['installation'].each_pair { |k, v| r.send(k, v) }
 end
end

当它将资源分配给安装变量时,它会执行 resource/provider 吗?也许它会立即执行?而不是将编译和收敛的两阶段过程作为单独的阶段进行?

它不会改变任何东西,DSL 方法总是有一个 return 值,通常您会忽略它,所以它会被丢弃。具体来说,每个 DSL 方法 returns 已编译的资源对象,在本例中是 ConsulInstallation class.

的一个实例

在这种情况下使用它是因为我的模式对 Chef 资源进行依赖 inversion/injection。稍后您可以看到 install.consul_program 正在执行反向命令查找,因为 consul_installation 资源有多个底层提供程序,这些提供程序在运行时可能会有所不同。