Chef - Rubis uni avec DSL Chef

Dans Chef, si l'on a besoin de créer des recettes simples, on peut utiliser les ressources disponibles dans Chef, telles que les modèles, remote_file et les services. Cependant, à mesure que les recettes deviennent élaborées, il faut des techniques avancées, telles que des instructions conditionnelles pour exécuter des parties de la recette sous condition. C'est la puissance de mélanger Ruby brut avec le langage DSL (Chef Domain Specific Language).

Comment l'utiliser?

Démarrez Chef Shell sur l'un des nœuds en mode client pour pouvoir accéder au serveur 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>

Conditions de base avec Chef DSL

Triez les nœuds par nom en utilisant Ruby brut.

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

Parcourez les nœuds en imprimant leur système d'exploitation.

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

Installez plusieurs gemmes Ruby en utilisant un tableau, une boucle et une extension de chaîne pour construire les noms de gemmes.

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

Méthode de travail

Les recettes Chef sont des fichiers Ruby, qui sont évalués dans le contexte de l'exécution de Chef. Ils peuvent contenir du code Ruby brut tel que l'instruction if et des boucles, ainsi que des éléments DSL Chef tels que des ressources.

Dans la recette, on peut simplement déclarer des variables Ruby et lui attribuer des valeurs.