Chef infra 如何将模板文件读入字符串?

Chef infra 如何将模板文件读入字符串?,chef-infra,Chef Infra,我想使用模板内容作为POST请求的主体 body = IO::Read('templatefile') # ??? response = Chef::REST::RESTRequest.new(:POST, 'http://localhost:8080/createItem', body, nil).call 正确的方法是什么?模板的大多数使用模式涉及创建文件,而不是将模板用于其他方法 注意:理想情况下,该解决方案甚至不会创建临时文件。厨师模板并不是真正设计用于这种方式的,但到那时,您可能能够

我想使用模板内容作为POST请求的主体

body = IO::Read('templatefile') # ???
response = Chef::REST::RESTRequest.new(:POST, 'http://localhost:8080/createItem', body, nil).call
正确的方法是什么?模板的大多数使用模式涉及创建文件,而不是将模板用于其他方法


注意:理想情况下,该解决方案甚至不会创建临时文件。

厨师模板并不是真正设计用于这种方式的,但到那时,您可能能够做您想做的事情。您可以在POST请求中使用呈现的模板文本。

我曾经在一本食谱中提到过这个问题。
body = IO::Read('templatefile') # ???
response = Chef::REST::RESTRequest.new(:POST, 'http://localhost:8080/createItem', body, nil).call
我建议您不要将这些文件放入模板子目录,而是将其放入文件子目录(与菜谱、tempaltes等子目录的级别相同)。原因很简单:正如您自己所说,template subdir不是用来存储此类文件的,因此它被认为是一种不好的做法

例如,您可以将您的文件
myfile
放入
your\u cookbook\u dir/files/default/myfile
,希望您的文件系统上的cookbook diry名为
your\u cookbook\u dir

然后,在配方中,可以在运行时将文件系统上的绝对路径影响到字符串:

myfilepath=“#{run_context.cookbook_collection[cookbook_name].root_dir}/files/default/myfile”

在这一点上,在另一个ruby指令中使用变量来读取它就变得很简单了

我认为这是一个更好的方法(符合厨师设计)来解决您的问题


嗯。

我明白了,谢谢!我最终将模板写入了/tmp文件