Itamae é um projeto open-source baseado no Chef, disponibilizado no Github: https://github.com/itamae-kitchen/itamae e que funciona para gestão e configuração de ambientes (configuration management tool). É muito parecido com o Ansible, o Chef e o Puppet.

Eu fui apresentado a ele há mais ou menos um ano e com o tempo pude perceber que é uma ferramenta poderosa se combinada à sua criatividade. Naquela época não tive muito interesse em usar, mas atualmente surgiu uma motivação (ou seja, resolver um pepino, digo, uma demanda). Eu precisava recriar um ambiente de forma automatizada, com consistência e de execução simples. Como estava buscando alternativas, o Itamae resurgiu em minha mente (como uma fênix?) e em poucos passos consegui evoluir.

Com ele podemos garantir que arquivos, aplicações e outras coisas que queremos no nosso servidor rodem sempre combinados. Ou seja, mantemos sempre rodando “aquela” aplicação com “aquele” arquivo de configuração.

Nesse post a ideia é apresentar o Itamae, dando uma visão geral do seu funcionamento. Vamos lá:

Primeiramente, tenha o Ruby instalado e execute o comando abaixo:

Após instalar, chegou a hora de criar a receita. Com ela vamos definir como será a configuração de nosso servidor.

Na documentação do Itamae no Github podemos ver as estruturas das funções que o Itamae implementa.

Costumo sempre iniciar pelos pacotes que precisam ser mantidos no servidor, ou seja, pelas dependências necessárias ao projeto, como usuários, pacotes e serviços. No exemplo abaixo estou especificando algumas variáveis que serão utilizadas na receita. Também criaremos um usuário e seu respectivo grupo.

Outro bloco de comando bastante útil é o execute … do … end . Com ele, podemos executar comandos shell caso necessário. No exemplo abaixo utilizo para adicionar o repositório oficial do docker no servidor.

Uma grande sacada do Itamae é possuir em alguns de seus blocos os campos not_if e only_if. No exemplo acima ele não irá executar o bloco caso o comando no campo not_if retornar sucesso. E o campo only_if vai garantir que ele execute somente na versão do Ubuntu 16.04.

Os blocos a seguir instalam o Docker e mantêm o serviço ativo e em execução.

Para arquivos, o Itamae possui dois blocos nos quais podemos trabalhar, o remote_file e o file. A diferença entre eles é que o remote_file espera um arquivo fonte que está no mesmo diretório que nosso arquivo de receita. E o file é criado/atualizado com base no campo content.

O bloco de diretório vai garantir que o diretório /cs-temp será criado com a permissão 755. No bloco de arquivo remoto (no qual o o arquivo update_sdk.sh será entregue no path /cs-temp/update_sdk.sh) note que o source é outro path que está na minha máquina local.

Ufa, muita coisa? Calma, está quase terminando. Resumindo o que entregamos até o momento:

✅ Dependências
✅ Serviços
✅ Diretórios
✅ Arquivos
❌ Aplicação

Falta colocar para rodar nossa aplicação, que será um container básico do Jenkins. Neste caso volto a utilizar o bloco execute.

Agora vamos executar nossa receita no servidor, ele pode ser remoto ou local. Basta o comando abaixo:

Ou localmente:

Caso queira mais informações basta utilizar o parâmetro –log-level=DEBUG e o Itamae vai mostrar todos o passos que ele executa.

Após a execução é possível acessar e conferir nossa aplicação:

Aplicação com sucesso.

Concluindo: o Itamae é uma ferramenta poderosa e cumpre sua missão com eficácia na automação de ambientes. Existem muitas funções que você pode utilizar para extrair o máximo da ferramenta. Espero que o Itamae venha também fazer parte do seu leque ou da sua caixa de ferramentas.

Antes de terminar, queria agradecer o nosso time de DevOps que me motivou a escrever este post (um abraço especial para os companhaneiros Bruno Novo e Paulo Ledo ?), e também quero deixar um abraço ao antigo colega de trabalho Fábio Ornellas, que me apresentou o Itamae.

E se você tiver opiniões e sugestões de melhorias, fique à vontade nos campos abaixo. Esse é meu primeiro post! ?

Obs: Tirando a execução do container, os blocos de comando do Itamae são somente para ilustrar seu funcionamento.

Quer trabalhar com DevOps em um time ágil de verdade? Clique aqui.

Sobre o Autor

DevOps na Concrete, Elias Costa é analista de sistemas e atualmente cursa Segurança da Informação. Gosta de estudar de tudo um pouco sobre tecnologia e de fuçar em qualquer coisa. Está tentando aprender mais sobre Segurança. Nas horas vagas, gosta de ficar tranquilo em casa dando atenção à esposa, vendo seriados e jogando um XBox de vez em quando.

cases

rio de
janeiro

Rua São José, 90
Sala 2121 - Centro
(21) 2240-2030
CEP: 20010-020

são
paulo

Av. Nações Unidas
nº 11.541 - 3º andar
(11) 4119-0449
CEP: 04578-000

belo
horizonte

Av. Getúlio Vargas, 671
Sala 800 - 8º andar
(31) 3360-8900
CEP: 30112-021