我有一个Chef配方,可以在Microsoft Azure中为我的Windows VM启用扩展。这是通过powershell_script资源完成的。 PowerShell脚本上载JSON配置文件。我想要做的是为此配置文件创建一个模板,并在文件系统上临时创建此文件,并从PowerShell脚本调用该JSON文件。厨师运行完成后,删除该文件。当然,我可以将所有逻辑写入脚本(创建文件,然后删除它)但我的问题是,Chef中是否有内置机制来执行此操作?我如何从我的powershell脚本中引用该临时位置?我相信我可以使用:
Chef::Config[:file_cache_path]
设置划痕位置,但我不知道如何,或者如果我可以,让我的erb在该位置创建。这是一个Windows框,虽然它可能没什么区别。
答案 0 :(得分:0)
Chef没有任何内置机制来创建临时文件。你确定每次运行后都必须删除吗?为什么不能留下来?
my_file_path = ::File.join( Chef::Config[:file_cache_path], 'my_file.json' )
template my_file_path do
[...]
notifies :run, "powershell_script[upload #{my_file_path}]"
end
powershell_script "upload #{my_file_path}" do
action :nothing
code "Upload #{my_file_path}" #just an example
end
上面的代码在Chef :: Config [:file_cache_path]目录中的模板中创建文件,但不会删除它。通过这种方式,您可以配置您的配方,使其不会每次都执行powershell脚本,但只有在文件发生更改时才会执行。
如果您确定要删除它,请添加
template my_file_path do
action :delete
end
到食谱的最后。但是这将使每个Chef运行都执行所有3个资源(创建文件,运行脚本,删除文件),这不是一件好事。