我想将模板内容用作POST请求的正文。
body = IO::Read('templatefile') # ???
response = Chef::REST::RESTRequest.new(:POST, 'http://localhost:8080/createItem', body, nil).call
这样做的正确方法是什么?模板的大多数使用模式涉及创建文件,而不是将模板用于其他方法。
注意:理想情况下,解决方案甚至不会创建临时文件。
答案 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。