gpt4 book ai didi

chef-infra - 如何在配方编译时读取 Recipe 文件?

转载 作者:行者123 更新时间:2023-12-04 14:28:27 25 4
gpt4 key购买 nike

这种事情在厨师食谱中很常见:

%w{foo bar baz}.each do |x|
file "#{x}" do
content "whatever"
end
end

但是我想从与食谱一起保存的文件中读取要循环的项目,例如:
File.open('files/default/blah.txt').each do |x|
file "#{x}" do
content "whatever"
end
end

如果我提供 blah.txt 的完整路径,这将起作用厨师客户端碰巧缓存它的地方,但它不可移植。如果我像示例中那样编写它就行不通,“希望”当前目录是食谱的根目录。有没有办法在编译食谱时获取食谱根目录?

最佳答案

在 Chef 11 中,您可以变得聪明并使用 Dir globbing 来实现您想要的行为:

  • 禁用 Assets 的延迟加载。启用延迟资源加载后,Chef 将在 Chef Client 运行期间根据请求获取资源(如食谱文件、模板等)。在您的用例中,您需要这些 Assets 存在于服务器 之前 配方执行开始。将以下内容添加到 client.rb :
    no_lazy_load true
  • 在磁盘上找到说明书缓存的路径。这有点神奇和实验,但是:
    "#{Chef::Config[:file_cache_path]}/cookbooks/NAME"
  • 获取正确的文件:
    path = "#{Chef::Config[:file_cache_path]}/cookbooks/NAME/files/default/blah.txt"
    File.readlines(path).each do |line|
    name = line.strip

    # Whatever chef execution here...
    end

  • 您可能还想查看 Cookbook.preferred_filename_on_disk如果您关心使用文件特异性处理程序。

    关于chef-infra - 如何在配方编译时读取 Recipe 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21006941/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com