如何在ruby块中设置节点级别属性。我有一个用例,我在所有资源中使用该属性。 我正在阅读有关融合与编译时间的内容,我明白了。但是我需要一些关于如何在这里使用延迟评估的建议。
这是我的代码,读取json文件并将该值用作节点属性
ruby_block 'package' do
block do
file = open("/tmp/pkg.json")
json = file.read
parsed = JSON.parse(json)
node.override['artifact']['version'] = parsed["artifact"]["version"]
end
only_if { File.exist?("/tmp/pkg.json") }
action :run
end
和配方如下
deploy_art = "#{id}-#{node['artifact']['version']}.war".
<< ---我如何在这里使用lazy eval?
试过这个,没有运气
deploy_art = "#{id}-lazy{ #{node['artifact']['version']}}.war"
懒惰评估
我想用ruby_block属性构造deploy_art变量,以便在整个配方中使用更多逻辑。 显然,我想使用懒惰的eval作为一种干净的方式。
答案 0 :(得分:0)
无论财产是什么,它都必须围绕整个财产。所以如果你有:
some_resource 'deploythething' do
artifact lazy { "#{id}-#{node['artifact']['version']}.war" }
end
这会奏效。您可以执行deploy_art = lazy { "#{id}-#{node['artifact']['version']}.war" }
但请记住,仅当deploy_art
用作属性的值时才有效,因此它与上面的示例实际上相同。