Chef - Ruby simple con Chef DSL

En Chef, si uno necesita crear recetas simples, puede usar los recursos disponibles en Chef, como plantillas, archivo_remoto y servicios. Sin embargo, a medida que las recetas se vuelven elaboradas, se necesitan técnicas avanzadas, como declaraciones condicionales, para ejecutar partes de la receta en condiciones. Este es el poder de mezclar Ruby simple con Chef Domain Specific Language (DSL).

¿Cómo usarlo?

Inicie Chef Shell en cualquiera de los nodos en el modo cliente para poder acceder al servidor Chef.

[email protected]:~$ sudo chef-shell --client 
loading configuration: /etc/chef/client.rb 
Session type: client 
...TRUNCATED OUTPUT... 
run `help' for help, `exit' or ^D to quit. 
Ohai2u [email protected]! 
Chef>

Condiciones básicas con Chef DSL

Ordene los nodos por nombre usando Ruby simple.

chef > nodes.sort! {|a,b| a.name <=> b.name } 
=> [node[alice],node[server]]

Recorra los nodos, imprimiendo su sistema operativo.

chef > nodes.each do |n| 
   chef > puts n['os'] 
   chef ?> 
end  
linux 
windows 
=> [node[server], node[alice]]

Instale múltiples gemas Ruby usando una matriz, un bucle y una expansión de cadena para construir los nombres de las gemas.

chef > %w{ec2 essentials}.each do |gem| 
   chef > gem_package "knife-#{gem}" 
   chef ?> end   => ["ec2", "essentials"]

Método de trabajo

Las recetas de Chef son archivos Ruby, que se evalúan en el contexto de la ejecución de Chef. Pueden contener código Ruby simple, como una declaración if y bucles, así como elementos Chef DSL, como recursos.

Dentro de la receta, uno puede simplemente declarar variables Ruby y asignarle valores.