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

时间:2013-10-09 18:24:11

标签: chef

我想将模板内容用作POST请求的正文。

body = IO::Read('templatefile') # ???
response = Chef::REST::RESTRequest.new(:POST, 'http://localhost:8080/createItem', body, nil).call

这样做的正确方法是什么?模板的大多数使用模式涉及创建文件,而不是将模板用于其他方法。

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

2 个答案:

答案 0 :(得分:1)

主厨模板并非真正设计为以这种方式使用,但您可以通过finding the path of the template file然后rendering the template by hand执行所需操作。您可以在POST请求中使用呈现的模板文本。

答案 1 :(得分:1)

我曾经在食谱中遇到过这个问题。 我建议你把它放到一个文件子目录(与食谱,tempaltes,...子目录相同的级别),而不是将这些文件放入模板子目录中。原因很简单:正如您所说,模板子目录不是为存储此类文件而设计的,因此它被认为是一种不好的做法。

例如,您可以将文件myfile放入your_cookbook_dir/files/default/myfile,期望您的文件系统上的菜谱名称为your_cookbook_dir

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

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

此时,在另一个ruby指令中使用该变量来读取它变得微不足道了!

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

HTH。