我想从checkout git存储库读取一个文件来解析一个配置文件并使用这些数据执行一些资源命令。
git "/var/repository" do
action :sync
end
config = JSON.parse(File.read("/var/repository/config.json" ))
config.each do |job, flags|
#do some resources stuff here
end
这不起作用,因为文件在编译时不存在:
=============================================== ================================= / var / chef / cache / cookbooks /中的配方编译错误 ================================================== ==============================
变量Errno :: ENOENT
没有这样的文件或目录 - /var/repository/config.json
我试图在ruby_block中加载文件并在那里执行Chef资源操作,但这没有用。将解析后的配置设置为变量并在ruby_block之外使用它也不起作用。
ruby_block "load config" do
block do
config = JSON.parse(File.read("/var/repository/config.json"))
#node["config"] = config doesn't work - node["config"] will not be set
config.each do |job, flags|
#do some stuff - will not work because Chef context is missing
end
end
end
知道如何在运行时读取文件并在配方中使用解析后的值吗?
答案 0 :(得分:0)
您可能还会发现在此类情况下使用lazy evaluation会很有帮助。
在某些情况下,在chef-client的执行阶段运行之前,无法知道属性的值。在这种情况下,使用属性值的延迟评估可能会有所帮助。可以改为为其分配代码块,而不是为属性分配值。