node.override 厨师食谱资源中的属性已设置但未被使用
node.override attribute in chef recipe resource gets set but not getting used
我的配方中有一个自定义资源覆盖了节点属性。当我在同一配方的后续资源部分中使用该节点属性时,它使用的是说明书属性文件中设置的默认属性,而不是自定义配方资源中设置的值。在 chef-client 运行 之后,节点上的属性值显示了预期的覆盖值。是什么导致配方不使用覆盖属性?
我假设您正在尝试覆盖 node['something']['content']
并且您的食谱看起来像:
my_resource 'a name' do
action :run
end
file '/tmp/file' do
content node['something']['content']
end
自定义资源的 :run
操作中定义的代码在收敛时执行,而文件资源中使用的属性 node['something']['content']
在编译时读取。
作为参考,厨师客户 运行 可以描述为:
- 库加载
- 属性编译(这是设置属性默认值的地方)
- 配方编译(这是您的 my_resource 和文件资源使用其参数构建的地方)
- 资源收敛(这是执行
:run
操作代码和覆盖您的属性的地方)。
- 报告(这是您的覆盖属性值发送到厨师服务器的地方)。
我的配方中有一个自定义资源覆盖了节点属性。当我在同一配方的后续资源部分中使用该节点属性时,它使用的是说明书属性文件中设置的默认属性,而不是自定义配方资源中设置的值。在 chef-client 运行 之后,节点上的属性值显示了预期的覆盖值。是什么导致配方不使用覆盖属性?
我假设您正在尝试覆盖 node['something']['content']
并且您的食谱看起来像:
my_resource 'a name' do
action :run
end
file '/tmp/file' do
content node['something']['content']
end
自定义资源的 :run
操作中定义的代码在收敛时执行,而文件资源中使用的属性 node['something']['content']
在编译时读取。
作为参考,厨师客户 运行 可以描述为:
- 库加载
- 属性编译(这是设置属性默认值的地方)
- 配方编译(这是您的 my_resource 和文件资源使用其参数构建的地方)
- 资源收敛(这是执行
:run
操作代码和覆盖您的属性的地方)。 - 报告(这是您的覆盖属性值发送到厨师服务器的地方)。