【发布时间】:2012-10-05 15:10:54
【问题描述】:
我对 ruby 和 chef 还很陌生,我想知道是否有一种方法可以使用模板创建文件?我尝试搜索它,但找不到太多东西。我尝试创建一个黑名单文件并通过厨师将一些正则表达式插入其中。所以我想添加属性并使用template.erb 在运行厨师时创建文件。任何提示,指针?
【问题讨论】:
标签: ruby erb chef-infra
我对 ruby 和 chef 还很陌生,我想知道是否有一种方法可以使用模板创建文件?我尝试搜索它,但找不到太多东西。我尝试创建一个黑名单文件并通过厨师将一些正则表达式插入其中。所以我想添加属性并使用template.erb 在运行厨师时创建文件。任何提示,指针?
【问题讨论】:
标签: ruby erb chef-infra
Chef 有一个名为template 的特殊资源,用于从模板创建文件。你需要把你的模板放在模板/默认目录下的食谱中,然后在你的食谱中使用它,提供变量。
cookbooks/my_cookbook/templates/default/template.erb:
# template.erb
A is: <%= @a %>
B is: <%= @b %>
C is: <%= @c %>
cookbooks/my_cookbook/recipes/default.rb:
template "/tmp/config.conf" do
source "template.erb"
variables( :a => 'Hello', :b => 'World', :c => 'Ololo' )
end
【讨论】:
cookbooks/my_cookbook/recipes/default.rb - 是一个食谱。
require 'erb'
class Foo
attr_accessor :a, :b, :c
def template_binding
binding
end
end
new_file = File.open("./result.txt", "w+")
template = File.read("./template.erb")
foo = Foo.new
foo.a = "Hello"
foo.b = "World"
foo.c = "Ololo"
new_file << ERB.new(template).result(foo.template_binding)
new_file.close
所以 a、b 和 c 现在可以作为模板中的变量使用
I.E.
# template.erb
A is: <%= @a %>
B is: <%= @b %>
C is: <%= @c %>
结果 =>
# result.txt:
A is Hello
B is World
C is Ololo
【讨论】:
rb?
can 是什么意思?我想知道正确的方法。所以.. :)