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.