Chef infra 厨师配方资源中的node.override属性已设置但未使用

Chef infra 厨师配方资源中的node.override属性已设置但未使用,chef-infra,Chef Infra,我的配方中有一个覆盖节点属性的自定义资源。当我在同一配方的后续资源部分中使用该节点属性时,它使用的是cookbook属性文件中设置的默认属性,而不是自定义配方资源中设置的值。在chef客户端运行之后,节点上的属性值将显示预期的覆盖值。是什么导致配方不使用覆盖属性?我假设您正在尝试覆盖节点['something']['content'],您的配方如下所示: my_resource 'a name' do action :run end file '/tmp/file' do conten

我的配方中有一个覆盖节点属性的自定义资源。当我在同一配方的后续资源部分中使用该节点属性时,它使用的是cookbook属性文件中设置的默认属性,而不是自定义配方资源中设置的值。在chef客户端运行之后,节点上的属性值将显示预期的覆盖值。是什么导致配方不使用覆盖属性?

我假设您正在尝试覆盖
节点['something']['content']
,您的配方如下所示:

my_resource 'a name' do
  action :run
end

file '/tmp/file' do
  content node['something']['content']
end
自定义资源的
:run
操作中定义的代码在聚合时执行,而文件资源中使用的属性
节点['something']['content']
在编译时读取

作为参考,chef客户端运行可以描述为:

  • 库加载
  • 属性编译(在这里设置属性的默认值)
  • 配方编译(这是使用参数构建my_资源和文件资源的地方)
  • 资源聚合(这是执行
    :run
    操作代码和覆盖属性的地方)
  • 报告(这是将覆盖的属性值发送到chef服务器的位置)

这完美地解释了我看到的行为-谢谢!我所做的是在一个配方(而不是资源)中包含覆盖节点属性的逻辑,并在需要新值的默认配方中包含该配方,这似乎效果更好。