如何从Chef模板创建临时文件,仅在厨师运行期间使用

时间:2015-01-30 17:36:20

标签: json powershell chef erb

我有一个Chef配方,可以在Microsoft Azure中为我的Windows VM启用扩展。这是通过powershell_script资源完成的。 PowerShell脚本上载JSON配置文件。我想要做的是为此配置文件创建一个模板,并在文件系统上临时创建此文件,并从PowerShell脚本调用该JSON文件。厨师运行完成后,删除该文件。当然,我可以将所有逻辑写入脚本(创建文件,然后删除它)但我的问题是,Chef中是否有内置机制来执行此操作?我如何从我的powershell脚本中引用该临时位置?我相信我可以使用:

Chef::Config[:file_cache_path]

设置划痕位置,但我不知道如何,或者如果我可以,让我的erb在该位置创建。这是一个Windows框,虽然它可能没什么区别。

1 个答案:

答案 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个资源(创建文件,运行脚本,删除文件),这不是一件好事。