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

时间:2018-03-03 09:15:17

标签: ruby chef

如何在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作为一种干净的方式。

1 个答案:

答案 0 :(得分:0)

无论财产是什么,它都必须围绕整个财产。所以如果你有:

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

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