来自ruby block的chef节点属性 - 懒惰eval

问题描述 投票:0回答:1

如何在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". << ---我如何在这里使用懒惰的eval?

试过这个,没有运气

deploy_art = "#{id}-lazy{ #{node['artifact']['version']}}.war"懒惰的评价

我想用ruby_block属性构造deploy_art变量,以便在整个配方中使用更多逻辑。显然,我想使用懒惰的eval作为一种干净的方式。

ruby chef
1个回答
0
投票

无论酒店是什么,它都必须在整个酒店周围。所以如果你有:

some_resource 'deploythething' do
  artifact lazy { "#{id}-#{node['artifact']['version']}.war" }
end

那会有用。你可以做deploy_art = lazy { "#{id}-#{node['artifact']['version']}.war" },但请记住,只有当deploy_art用作属性的值时它才有效,因此它实际上与上面的例子相同。

© www.soinside.com 2019 - 2024. All rights reserved.