0

如何从 Chef 模板中的 ERB 文件访问数据包 JSON 文件中的值。

我有一个名为chef-repo/data_bags/test.json包含此数据的数据包文件:

{
  "id": "test",
  "test": {
    "name": "doel"
  }
}

chef-repo/cookcooks/test/templates/default.erb我看到的范围内,它<% @test.name %>被访问并准确地显示了值。

我想了解@test在 Chef 中为实例变量分配数据包值的位置。

4

1 回答 1

2

数据包在配方中被读取。然后将提取的值传递给模板,然后在 ERB 上下文中可用。这看起来像这样:

test = data_bag_item("my_data_bag", "test")

template "/path/to/target/file" do
  source "default.erb"
  variables :test => test
end

您可以在模板文档中阅读有关模板中变量的更多信息。

最后,您的食谱和厨师存储库中缺少一些目录。erb 文件必须位于chef-repo/cookcooks/test/templates/default/default.erb(注意添加的默认目录)。数据包项应位于以数据包命名的目录中(请记住,有许多数据包,每个包含许多数据包项)。因此,在上面的代码示例中,您的数据包应该位于chef-repo/data_bags/my_data_bag/test.json.

于 2013-12-05T11:09:31.457 回答