2012-10-05 11 views
11

Sono abbastanza nuovo da Ruby e Chef, volevo sapere se esiste un modo per creare un file usando un modello? Ho provato a cercarlo ma non ho trovato molte cose. Sto provando a creare un file di lista nera e inserisco alcune regex tramite lo chef. Quindi volevo aggiungere gli attributi e usare un template.erb per creare il file mentre esegui lo chef. Qualche suggerimento, puntatori?Crea file usando template.erb

risposta

21

Chef ha risorsa speciale denominata template, per creare file da modelli. Devi inserire il tuo modello all'interno del libro di cucina sotto modelli/directory di default e poi usarlo nella tua ricetta, fornendo le variabili.

libri di cucina/my_cookbook/templates/default/template.erb:

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

libri di cucina/my_cookbook/Ricette/default.rb:

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

oh, buono a sapersi :) mai usato Chef – fl00r

+1

Grazie Draco. :) Questo e 'esattamente quello che stavo cercando. – noMAD

+0

@Draco: avere una domanda. Quindi qui, ho bisogno di creare il file nella ricetta giusto? Intendo dire che il codice fl00r ha scritto, dovrebbe andare nella ricetta? – 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 

Così a, b e c ora availible come variabili nel modello

OSSIA

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

Risultato =>

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

Così, tanto per chiarire, il la classe deve essere un file rubino vero? 'Rb'? – noMAD

+0

Può essere un file rubino :) – fl00r

+0

Bene, 'can' significa? Volevo sapere il modo giusto per farlo. Quindi .. :) – noMAD