2012-10-05 10 views
11

Ich bin ziemlich neu in Ruby und Chef, wollte ich wissen, ob es eine Möglichkeit gibt, eine Datei mit einer Vorlage zu erstellen? Ich habe versucht, danach zu suchen, konnte aber nicht viel finden. Ich versuche, eine Blacklist-Datei zu erstellen und über Chefkoch etwas Regex einzufügen. Also wollte ich die Attribute hinzufügen und eine template.erb verwenden, um die Datei beim Ausführen von Chef zu erstellen. Irgendwelche Hinweise, Hinweise?Erstelle Datei mit template.erb

Antwort

21

Chef hat spezielle Ressource template, mit dem Namen, um Dateien von Vorlagen zu erstellen. Sie müssen Ihre Vorlage in das Kochbuch unter Vorlagen/Standardverzeichnis einfügen und dann in Ihrem Rezept verwenden, indem Sie die Variablen bereitstellen.

Kochbücher/my_cookbook/templates/default/template.erb:

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

Kochbücher/my_cookbook/Rezepte/default.rb:

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

oh, gut zu wissen :) nie benutzt Chef – fl00r

+1

Danke Draco. :) Genau das habe ich gesucht. – noMAD

+0

@Draco: Haben Sie eine Frage. Also, hier muss ich die Datei im Rezept richtig erstellen? Ich meine der Code fl00r hatte geschrieben, soll das in das Rezept gehen? – 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 

So a, b und c jetzt availible als Variablen in der Vorlage

I.E.

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

Ergebnis =>

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

Also, nur zu klären, die Klasse muss eine Ruby-Datei sein, oder? 'rb'? – noMAD

+0

Es kann eine Ruby-Datei sein :) – fl00r

+0

Nun, 'can' bedeutet? Ich wollte den richtigen Weg wissen. So .. :) – noMAD