Chef - Plain Ruby com Chef DSL

No Chef, se for necessário criar receitas simples, pode-se usar os recursos disponíveis no Chef, como templates, remote_file e serviços. No entanto, conforme as receitas se tornam elaboradas, são necessárias técnicas avançadas, como declarações condicionais, para executar partes da receita sob condição. Este é o poder de combinar Ruby simples com Chef Domain Specific Language (DSL).

Como usá-lo?

Inicie o Chef Shell em qualquer nó no modo cliente para poder acessar o 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>

Condições básicas com Chef DSL

Classifique os nós por nome usando Ruby simples.

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

Percorra os nós, imprimindo seu sistema operacional.

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

Instale várias gemas Ruby usando uma matriz, um loop e expansão de string para construir os nomes das gemas.

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

Método de trabalho

As receitas do Chef são arquivos Ruby, que são avaliados no contexto da execução do Chef. Eles podem conter código Ruby simples, como instrução if e loops, bem como elementos DSL do Chef, como recursos.

Dentro da receita, pode-se simplesmente declarar variáveis ​​Ruby e atribuir valores a elas.