Chef infra 在Chef Recipe中创建临时文件的平台无关方式

Chef infra 在Chef Recipe中创建临时文件的平台无关方式,chef-infra,chef-recipe,Chef Infra,Chef Recipe,我有一个厨师食谱,它使用模板生成xml文档。该文档在文件系统中的位置并不重要;该位置只需交给命令行工具即可,该工具将读取文件并使用它配置应用程序。xml文件不需要在命令执行之后继续存在。因此,在我看来,该文件应该在平台无关的临时文件目录中创建。C:\Temp(在windows上)或/TMP(在大多数nix机器上)。chef是否提供了创建临时文件、检测临时文件位置或以其他方式实现目标的方法?最佳选择:使用chef::Config['file\u cache\u path'],chef使用它存储瞬态

我有一个厨师食谱,它使用模板生成xml文档。该文档在文件系统中的位置并不重要;该位置只需交给命令行工具即可,该工具将读取文件并使用它配置应用程序。xml文件不需要在命令执行之后继续存在。因此,在我看来,该文件应该在平台无关的临时文件目录中创建。C:\Temp(在windows上)或/TMP(在大多数nix机器上)。chef是否提供了创建临时文件、检测临时文件位置或以其他方式实现目标的方法?

最佳选择:使用chef::Config['file\u cache\u path'],chef使用它存储瞬态数据。例如:
template“#{Chef::Config['file\u cache\u path']}/myfile.xml”do

在评论后留下(重新措辞),因为出于一般目的,仍然值得一提:

根据注释,执行资源将使用此输入以任何方式运行,以确保应用程序得到相应配置,只有在执行资源运行时,文件才必须存在,对于其他情况,请记住以下内容

chef背后的一个关键思想是幂等性,chef可以运行100次,只在需要做的时候才做

在这种情况下,模板将生成一次,并且永远不会更改,除非属性中有参数更改


在这种情况下(生成的文件应该更新),chef会注意到它,替换它,并根据上面定义的任何通知采取相应的行动。

Yep,有效。关于幂等性,这一点已被理解,但与当前的考虑无关。正在执行的命令是幂等的,无论模板输出是否已更改,都必须运行该命令。我们希望确保按照配方配置应用程序,并覆盖可能发生的任何手动配置更改。这样的手动更改不会触发任何文件中的更改。好的,编辑了答案,留下了一些部分,因为我发现它们与一般答案相关。