我想将模板内容用作 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
这样做的正确方法是什么?模板的大多数使用模式都涉及创建文件,而不是将模板用于其他方法。
注意:理想情况下,该解决方案甚至不会创建临时文件。
我曾经在一本食谱中遇到过这个问题。我建议您不要将此类文件放入模板子目录中,而是将其放入文件子目录中(与食谱、模板、...子目录相同的级别)。原因很简单:正如您自己所说,模板子目录并非旨在存储此类文件,因此被认为是一种不好的做法。
例如,您可以将文件myfile
放入your_cookbook_dir/files/default/myfile
,期望文件系统上的食谱目录名为your_cookbook_dir
.
然后,在您的配方中,您可以在运行时将文件系统上的绝对路径影响为字符串:
myfilepath = "#{run_context.cookbook_collection[cookbook_name].root_dir}/files/default/myfile"
在这一点上,使用另一个 ruby 指令中的变量来读取它变得微不足道!
我认为这是解决您的问题的更好方法(符合厨师设计)。
HTH。