2012-10-05 36 views
11

Oldukça yeni bir yakut ve şef olmak için yeni bir şablon kullanarak bir dosya oluşturmanın bir yolu olup olmadığını öğrenmek istedim. Onu aramayı denedim ama çok fazla şey bulamadım. Bir kara liste dosyası oluşturmaya çalışıyorum ve şefin üzerine bir regex ekleyelim. Bu yüzden öznitelikleri eklemek istedim ve şefi çalıştırırken dosya oluşturmak için bir template.erb kullanın. Herhangi bir ipucu, işaretçiler?template.erb dosyasını kullanarak dosya oluştur

cevap

21

Chef şablonlardan dosyaları oluşturmak için template adlı özel bir kaynak vardır. Şablonunuzu yemek kitabının içine şablonlar/varsayılan dizinler altına koymanız ve daha sonra tarifinizde değişkenleri sağlamanız gerekir.

yemek kitapları/my_cookbook/templates/default/template.erb:

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

yemek kitapları/my_cookbook/tarifleri/default.rb:

template "/tmp/config.conf" do 
    source "template.erb" 
    variables(:a => 'Hello', :b => 'World', :c => 'Ololo') 
end 
+0

oh, bilmek güzel :) hiç kullanmadım Chef – fl00r

+1

Teşekkürler Draco. :) Bu tam olarak aradığım şey. – noMAD

+0

@Draco: Bir sorum var. Bu yüzden, dosyayı tarifte oluşturmam gerekiyor mu? Ben fl00r'in yazdığı kod, yani tarife girmeli mi? – noMAD

3
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 

Şablonunuzdaki bir değişken olarak Yani a, b ve c şimdi availible

I.E.

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

Sonucu =>

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

Yani, sadece netleştirmek için, sınıf bir ruby ​​dosyası olmalı? 'Rb'? – noMAD

+0

Bu bir ruby ​​dosyası olabilir :) – fl00r

+0

Eh, '' 'anlamına gelir? Bunu yapmak için doğru yolu bilmek istedim. Yani .. :) – noMAD

İlgili konular