Chef - Ruby Gems com Receitas
As receitas são os principais blocos de construção do livro de receitas, que é basicamente código Ruby. É possível usar todos os recursos da linguagem Ruby dentro da receita do Chef. Na maioria das vezes, a funcionalidade de compilação de Ruby é suficiente, mas às vezes pode ser necessário usar gemas Ruby adicionais. Por exemplo, se for necessário acessar o banco de dados MySQL da própria receita.
A receita do Chef tem a capacidade de obter as joias Ruby necessárias para usá-las na mesma receita.
Usando iptable Gem na receita dada
Step 1 - Edite a receita padrão do livro de receitas e instale a gema a ser usada dentro da receita.
[email protected]:~/chef-repo $ subl
cookbooks/my_cookbook/recipes/default.rb
chef_gem 'ipaddress'
require 'ipaddress'
ip = IPAddress("192.168.0.1/24")
Chef::Log.info("Netmask of #{ip}: #{ip.netmask}")
Step 2 - Envie o livro de receitas modificado para o servidor Chef.
[email protected]:~/chef-repo $ knife cookbook upload my_cookbook
Uploading my_cookbook [0.1.0]
Step 3 - Executando o cliente Chef para ver a saída.
[email protected] $ sudo chef-client
...TRUNCATED OUTPUT...
[2013-01-18T14:02:02+00:00] INFO: Netmask of 192.168.0.1:
255.255.255.0
...TRUNCATED OUTPUT...
Método de trabalho
As etapas de execução do Chef consistem na fase de compilação, onde ele compila todos os recursos e uma fase de execução na qual Chef executa os provedores de recursos para convergir o nó para o estado desejado. Se alguém precisa de alguma gema Ruby específica dentro do livro de receitas, é necessário instalar a gema durante a fase de complicação.
O recurso chef_gem fará exatamente o mesmo e, no Chef, Omnibus é a única maneira de trabalhar. Sua principal função é colocar as gemas à disposição do próprio Chef.