DevOps na prática: começando a trabalhar com o Chef

Uma dos primeiros pontos quando se pensa nesta ferramenta é como ela funciona e, como toda documentação, nem tudo...

Dextra

View posts by Dextra
Somos especialistas em desenvolvimento de software sob medida para negócios digitais. Pioneiros na adoção de metodologias de gestão ágil, combinamos processos de design, UX, novas tecnologias e visão de negócio, desenvolvendo soluções que criam oportunidades para nossos clientes. A Dextra faz parte da Mutant, empresa B2B líder no mercado brasileiro e especialista em Customer Experience para plataformas digitais.
Data de publicação: 23/10/2013

Uma dos primeiros pontos quando se pensa nesta ferramenta é como ela funciona e, como toda documentação, nem tudo é direcionado para a parte prática.

Então, neste post, vou demonstrar pequenos passos práticos para a criação de receitas para o Chef. O Chef, nada mais é que uma tecnologia inovadora que gerencia configurações de forma consistente. Aplicando de forma automatizada, possibilita uma nova forma de entregar TI para o negócio.

Visando o entendimento da ferramenta, o Chef utiliza receitas, chamadas de cookbooks para a execução dos seus procedimentos. Assim, o mais importante do Chef são, além da instalação do serviço, os cookbooks que conterão todas as instalações e configurações necessárias para aplicar em sua máquina ou servidor.

Para começar, vamos realizar alguns testes com a ferramenta Chef-SOLO, que é independente de um servidor, aplicando as receitas localmente sem que haja uma a necessidade de uma outra máquina (servidor). Acho muito interessante este meio, pois para utilizar o Chef como server/client, é necessário realizar o cadastramento do nó cliente para o servidor. Quando falamos em uma estrutura escalável em nuvem, o procedimento de cadastramento do cliente para o servidor, pode ser algo bem complicado.

Obs.: os testes foram realizados no Ubuntu Server 12.04 LTS

Mas vamos lá, o primeiro passo é instalar o Chef-SOLO:

# curl -L https://www.opscode.com/chef/install.sh | bash

Agora, vamos baixar a estrutura básica do Chef:

# wget http://github.com/opscode/chef-repo/tarball/master
# tar -zxvf master
# mv opscode-chef-repo-f9d4b0c/ /opt/chef-repo
# mkdir /opt/chef-repo/.chef

Verifique no diretório “/opt/chef-repo/” a estrutura criada.

Crie e configure o cookbook path, para isso execute o seguinte procedimento:

# vi /opt/chef-repo/.chef/knife.rb
cookbook_path [ '/opt/chef-repo/cookbooks' ]

Configure o arquivo solo.rb:

# vi /opt/chef-repo/solo.rb
Adicione as linhas abaixo:
file_cache_path "/opt/chef-solo"
cookbook_path "/opt/chef-repo/cookbooks"

Será necessário criar o cookbook. Neste caso criaremos o cookbook chamado “teste” e importaremos este para a estrutura do Chef-SOLO:

# knife cookbook create teste
# mv /var/chef/cookbooks/teste /opt/chef-repo/cookbooks/

Agora, vamos começar a realizar testes com a receita, para isso, vamos editar o arquivo default.rb, que contém os procedimentos da receita, dentro da pasta recipes.

# vi /opt/chef-repo/cookbooks/teste/recipes/default.rb

—-

Realizaremos uma instalação básica do apache2, adicione a seguinte estrutura no arquivo:

package "apache2" do
 action :install
end

Antes de aplicar a receita, é necessário criar o JSON contendo o nome do cookbook a ser executado:

# vi /opt/chef-repo/teste.json
Adicione a seguinte linha:
{ "run_list": [ "recipe[teste]" ]

Agora, execute a receita:

# chef-solo -c /opt/chef-repo/solo.rb -j /opt/chef-repo/teste.json
Starting Chef Client, version 11.6.2
Compiling Cookbooks...
Converging 1 resources
Recipe: teste::default
 * package[apache2] action install
   - install version 2.2.14-5ubuntu8.12 of package apache2
Chef Client finished, 1 resources updated

Você pode executar novamente e constatar que ele não tenta realizar a instalação novamente.

Agora, vamos adicionar algumas funcionalidades em nossa receita.

Digamos que temos um arquivo de configuração específico em nosso servidor HTTP e precisamos deixá-lo na receita. Vamos chamar esse arquivo de config e armazená-lo dentro da receita na pasta “files”. OBS.: digamos que no arquivo config contém a configuração do proxy apache.

Arquivo armazenado em: /opt/chef-repo/cookbooks/teste/files/default/config

Agora, vamos adicionar este item na receita:

# vi /opt/chef-repo/cookbooks/teste/recipes/default.rb
cookbook_file "/etc/apache2/conf.d/proxy.conf" do
 source "config"
 mode 0755
 owner "root"
 group "root"
end

OBS.: no item “source” olhe que referenciamos o arquivo de “config” criado anteriormente e armazenado na pasta “files”

Execute a receita e verifique se o arquivo “/etc/apache2/conf.d/proxy.conf” foi criado com sucesso.

Se você executar novamente, o Chef não alterará o arquivo de destino, a não ser que você o atualize. Isso é sensacional, pois imagine gerenciando um cluster, onde você simplesmente atualiza o arquivo de origem e todos os nós aplicam este mesmo arquivo.

Agora, vamos alterar a receita e colocar notificações chamando o restart de serviço Apache2, edite o default.rb adicionando as seguintes linhas:

service "apache2" do
action :nothing
end

Execute a receita.

Veja que todas as vezes que rodar a receita o item será lido mas nada acontecerá, isso devido a diretiva “action” esta como “nothing”.

Agora, vamos notificar o serviço do apache para reiniciar todas as vezes que o arquivo proxy.conf ser alterado, para isso, altere o item “cookbook_file” configurado anteriormente para o seguinte modelo:

cookbook_file "/etc/apache2/conf.d/proxy.conf" do
 source "config"
 mode 0755
 owner "root"
 group "root"
 notifies :restart, "service[apache2]", :immediately
end

Modifique o arquivo config inserido na pasta files e execute a receita. Veja a saída:

# chef-solo -c /opt/chef-repo/solo.rb -j /opt/chef-repo/teste.json
Starting Chef Client, version 11.6.2
Compiling Cookbooks...
Converging 3 resources
Recipe: teste::default
 * package[apache2] action install (up to date)
 * cookbook_file[/etc/apache2/conf.d/proxy.conf] action create
   - update content in file /etc/apache2/conf.d/proxy.conf from 174696 to 22a2d9
       --- /etc/apache2/conf.d/proxy.conf 2013-10-17 15:43:52.000000000 +0000
       +++ /tmp/.proxy.conf20131017-1096-glm39c 2013-10-17 15:44:01.000000000 +0000
       @@ -1,2 +1,2 @@
       -TESTE
       +#TESTE
        #TESTE
 * service[apache2] action restart
   - restart service service[apache2]
 * service[apache2] action nothing (skipped due to action :nothing)
Chef Client finished, 2 resources updated

OBS.: se a configuração do arquivo config ser falho para o apache2, ocorrerá falha no restart. Isso é padrão, pois mesmo se não fosse com o Chef, o apache daria erro para reiniciar.

Segue a configuração final da nossa receita de teste:

package "apache2" do
 action :install
end
cookbook_file "/etc/apache2/conf.d/proxy.conf" do
 source "config"
 mode 0755
 owner "root"
 group "root"
 notifies :restart, "service[apache2]", :immediately
end
service "apache2" do
 action :nothing
end

Este artigo é apenas para começar, não fizemos muitas coisas, porém, para gerir alguns serviços tipo SQUID, APACHE, FIREWALL, etc, poderíamos utilizar esta estrutura.


Dextra

View posts by Dextra
Somos especialistas em desenvolvimento de software sob medida para negócios digitais. Pioneiros na adoção de metodologias de gestão ágil, combinamos processos de design, UX, novas tecnologias e visão de negócio, desenvolvendo soluções que criam oportunidades para nossos clientes. A Dextra faz parte da Mutant, empresa B2B líder no mercado brasileiro e especialista em Customer Experience para plataformas digitais.

Comentários

  1. Ulisses Santos5 de novembro de 2015

    Obrigado pelo artigo .
    Amigo esta faltando o } no final do código.
    # vi /opt/chef-repo/teste.json
    Adicione a seguinte linha:
    { “run_list”: [ “recipe[teste]” ] }
    .

    Responder

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

7 + 15 =

Posts relacionados

  1. Sobre a Dextra

    Somos especialistas em desenvolvimento de software sob medida para negócios digitais. Pioneiros na adoção de metodologias de gestão ágil, combinamos processos de design, UX, novas tecnologias e visão de negócio, desenvolvendo soluções que criam oportunidades para nossos clientes.

  2. Categorias

Scroll to top