Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates Chef-计算模板文件的值_Templates_Chef Infra - Fatal编程技术网

Templates Chef-计算模板文件的值

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'

用必须首先计算的值填充模板的最佳方法(使用Chef)是什么?例如,计算包括:调用数据库获取服务id或从TPN获取硬件id。有一些模板文件需要这些值

我的方法是创建一个库文件(NameConfiguration.rb),为模板文件(mytest.conf.erb)生成所有必需的值。如何访问模板文件中的这些变量

[default.rb-cookbook]

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