2012-10-05 35 views
11

Soy bastante nuevo para ruby ​​y chef, quería saber si hay una manera de crear un archivo usando una plantilla. Traté de buscarlo pero no pude encontrar muchas cosas. Intento crear un archivo de lista negra e insertar algunas expresiones regulares en él a través del chef. Así que quería agregar los atributos y usar un template.erb para crear el archivo mientras ejecuto el chef. Alguna indirecta, punteros?Crear archivo usando template.erb

Respuesta

21

chef tiene recurso especial llamado template, para crear archivos de plantillas. Debe colocar su plantilla dentro del libro de recetas debajo de las plantillas/directorio predeterminado y luego usarlo en su receta, proporcionando las variables.

libros de cocina/my_cookbook/templates/default/template.erb:

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

libros de cocina/my_cookbook/recetas/default.rb:

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

oh, es bueno saber :) nunca ha usado Chef – fl00r

+1

Gracias Draco. :) Esto es exactamente lo que estaba buscando. – noMAD

+0

@Draco: Tengo una pregunta. Entonces, aquí, necesito crear el archivo en la receta, ¿verdad? Quiero decir, el código fl00r había escrito, ¿debería ir en la receta? – 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 

Así a, bc y ahora dotados como variables en su plantilla

POR EJEMPLO

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

Resultado =>

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

Por lo tanto, sólo para aclarar, la clase tiene que ser un archivo ruby ​​¿verdad? 'rb'? – noMAD

+0

Puede ser un archivo ruby ​​:) – fl00r

+0

Bueno, 'can' significa? Quería saber la forma correcta de hacerlo. Así que ... :) – noMAD

Cuestiones relacionadas