【问题标题】:Create file using template.erb使用 template.erb 创建文件
【发布时间】:2012-10-05 15:10:54
【问题描述】:

我对 ruby​​ 和 chef 还很陌生,我想知道是否有一种方法可以使用模板创建文件?我尝试搜索它,但找不到太多东西。我尝试创建一个黑名单文件并通过厨师将一些正则表达式插入其中。所以我想添加属性并使用template.erb 在运行厨师时创建文件。任何提示,指针?

【问题讨论】:

    标签: ruby erb chef-infra


    【解决方案1】:

    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
    

    【讨论】:

    • 谢谢德拉科。 :) 这正是我想要的。
    • @Draco:有一个问题。所以在这里,我需要在配方中创建文件对吗?我的意思是 fl00r 写的代码,应该放在配方中吗?
    • 没有。除了我写的,你不需要任何东西。 cookbooks/my_cookbook/recipes/default.rb - 是一个食谱。
    【解决方案2】:
    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
    

    所以 abc 现在可以作为模板中的变量使用

    I.E.

    # template.erb
    A is: <%= @a %>
    B is: <%= @b %>
    C is: <%= @c %>
    

    结果 =>

    # result.txt:
    A is Hello
    B is World
    C is Ololo
    

    【讨论】:

    • 所以,澄清一下,这个类必须是一个 ruby​​ 文件,对吧? rb?
    • 嗯,can 是什么意思?我想知道正确的方法。所以.. :)
    • 我不确定 Chef,所以如果 Chef 食谱是用 Ruby 编写的,你可以把这个类和其他东西放在一起,比如渲染 erb。或者你可以创建一个带有类的新文件,所以不要忘记在使用前要求它。
    猜你喜欢
    • 2018-07-29
    • 2015-10-26
    • 2016-01-28
    • 2020-11-11
    • 2013-11-28
    • 2018-02-07
    • 1970-01-01
    • 2012-03-02
    • 2010-10-09
    相关资源
    最近更新 更多