1

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

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

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

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

4

2 回答 2

1

Chef 模板并非真正设计为以这种方式使用,但您可以通过查找模板文件的路径然后手动渲染模板来做您想做的事情。您可以在 POST 请求中使用呈现的模板文本。

于 2013-10-10T05:48:52.790 回答
1

我曾经在一本食谱中遇到过这个问题。我建议您不要将此类文件放入模板子目录中,而是将其放入文件子目录中(与食谱、模板、...子目录相同的级别)。原因很简单:正如您自己所说,模板子目录并非旨在存储此类文件,因此被认为是一种不好的做法。

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

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

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

在这一点上,使用另一个 ruby​​ 指令中的变量来读取它变得微不足道!

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

HTH。

于 2013-10-15T13:52:28.973 回答