Chef - Plain Ruby con Chef DSL

In Chef, se è necessario creare ricette semplici, è possibile utilizzare le risorse disponibili in Chef, come modelli, file_remoto e servizi. Tuttavia, man mano che le ricette diventano elaborate, sono necessarie tecniche avanzate, come le istruzioni condizionali per eseguire parti della ricetta a condizione. Questo è il potere di miscelare il semplice Ruby con il linguaggio DSL (Chef Domain Specific Language).

Come usarlo?

Avvia Chef Shell su uno qualsiasi dei nodi in modalità client per poter accedere al server 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>

Condizioni di base con Chef DSL

Ordina i nodi per nome usando il semplice Ruby.

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

Esegui il ciclo attraverso i nodi, stampando il loro sistema operativo.

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

Installa più gemme Ruby usando un array, un loop e l'espansione di stringhe per costruire i nomi delle gemme.

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

Metodo di lavoro

Le ricette di Chef sono file Ruby, che vengono valutati nel contesto di Chef run. Possono contenere codice Ruby semplice come istruzione if e loop, nonché elementi DSL di Chef come le risorse.

All'interno della ricetta, si può semplicemente dichiarare le variabili Ruby e assegnarle dei valori.