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.