Templates Chef-计算模板文件的值
用必须首先计算的值填充模板的最佳方法(使用Chef)是什么?例如,计算包括:调用数据库获取服务id或从TPN获取硬件id。有一些模板文件需要这些值 我的方法是创建一个库文件(NameConfiguration.rb),为模板文件(mytest.conf.erb)生成所有必需的值。如何访问模板文件中的这些变量 [default.rb-cookbook]Templates Chef-计算模板文件的值,templates,chef-infra,Templates,Chef Infra,用必须首先计算的值填充模板的最佳方法(使用Chef)是什么?例如,计算包括:调用数据库获取服务id或从TPN获取硬件id。有一些模板文件需要这些值 我的方法是创建一个库文件(NameConfiguration.rb),为模板文件(mytest.conf.erb)生成所有必需的值。如何访问模板文件中的这些变量 [default.rb-cookbook] template '/etc/mytest.conf' do source 'mytest.conf.erb' mode '0644'
template '/etc/mytest.conf' do
source 'mytest.conf.erb'
mode '0644'
variables ({ :NAME => '???' })
end
[模板:mytest.conf.erb]
My test Text <%= @NAME %>
确保库文件
NameConfiguration.rb
位于烹饪书的/libraries
目录中。然后,您可以将该库用作
可以在库中定义模板帮助器模块。当扩展需要跨配方重用时,这非常有用,或者当扩展需要使管理代码变得更容易时,这些代码本来是在每个配方的基础上内联定义的
template'/path/to/template.erb'do
助手(MyHelperModule)
结束
我强烈建议您访问上面的链接,获取文档和示例。谢谢您的回答。使用“module NameGen”和“def self.create”,它可以按预期工作,但当我想使用“class NameGen”时,会收到错误消息“错误的参数类型class(预期的模块)”。也可以使用类而不是模块吗?@user5580578:如果我的答案对您有好处,请将其标记为已接受的解决方案:)当然,您可以使用类,请参考文章中的链接,查看使用ruby类和模块的示例,但它不适用于“class NameGen”。错误是“uninitialized constant#>::NameGen”@user5580578:无需抱歉。如果你遵循厨师记录,它将为你工作。祝你好运。
# complex name calculation (just a simple example)
class NameGen
firstName = "Heinz"
LastName = "Winter"
def create
sprintf("%s--%s test", firstName, LastName)
end
end