Após assumir um projeto em uma multinacional alemã, realizei um estudo com o objetivo de comparar as 3 ferramentas. Realizado o estudo, defendi a escolha perante a liderança técnica do mesmo em algumas apresentações, onde gerei alguns vídeos de demonstração.
Meu objetivo aqui, não é afirmar que uma ferramenta é melhor que a outra, e sim demonstrar os diferenciais. Cada projeto é singular e a escolha deve ser feita caso a caso. Eu realmente instalei as ferramentas e realizei testes, chegando às conclusões.
Críticas, dúvidas e sugestões são sempre aceitas, ok?
Pontos analisados
Seguem os pontos analisados durante o estudo:
- Popularidade da ferramenta
- Licença
- Sintaxe mais simples de entender
- Tratamento de exceções
- Possibilidade de visualização do estado das configurações
- Fun factor
Popularidade da ferramenta
Tanto
Puppet, quanto
Chef, são muito populares e suas comunidades são ativas, existem muitos módulos desenvolvidos para as duas ferramentas. Empresas como Facebook e Yahoo, utilizam Chef enquanto McAfee e Nasa, por exemplo, utilizam Puppet. Cisco e EA Sports utilizam
Ansible.
Puppet é uma ferramenta mais sólida e com uma documentação melhor elaborada e mais clara, em relação ao Chef. Ansible é mais recente que as outras, mas não menos eficiente, a grande vantagem em relação às duas é o fato de não necessitar de agente instalado em seus clients.
Utiliza SSH para se conectar aos hosts e isso pode ser uma grande vantagem imaginando um cenário onde não é possível realizar instalações de agentes e em outros, onde o agente consome uma parte considerável de memória e/ou cpu. Até mesmo o esforço para manter agentes atualizados e correção de Bugs serão preocupações descartadas.
A documentação e a quantidade de roles desenvolvidos e disponíveis é algo fantástico, ansible utiliza arquivos YML, seu aprendizado se torna rápido.
Lista completa de quem utiliza as ferramentas:
Licença
Sobre valores das licenças, quando falamos em versões Enterprise, seguem os links:
Todos os meus testes foram realizados com as versões gratuitas.
Sintaxe mais simples de entender
Nesse ponto, Chef perde para as outras ferramentas, uma vez que exige conhecimento da linguagem Ruby, o que pode ser encarado como uma oportunidade de adquirir novos conhecimentos, porém, aumenta o tempo de aprendizado.
Já Ansible e Puppet, são muito simples e não exigem conhecimentos específicos de uma linguagem, que possa gerar demora no aprendizado da mesma.
Tratamento de exceções
O que acontece quando uma instalação falha?
Todas trabalham da mesma forma, notificam erros nos logs e o Sysadmin decide o que deve ser feito após a falha, com notificação via e-mail, execução de algum comando ou script. Nesse ponto, o Ansible é interessante por criar um arquivo de log para retry, para cada tentativa de execução.
Possibilidade de visualização do estado da configurações
A ideia foi analisar a possibilidade de visualização do estado em que se encontram as configurações de cada máquina (o mais bonito possível).
A interface do Chef é muito pobre, possui poucas opções de gerenciamento via GUI, deixa muito a desejar. Puppet e Ansible possuem interfaces melhores, com gráficos bacanas e que permitem realização de um bom relatório gerencial, por exemplo. A interface do Puppet é um pouco mais bonita que a do Ansible. Nesse ponto, o puppet tem uma pequena vantagem.
Todas as interfaces utilizadas nos testes são versões Freeware.
Fun factor
Qual ferramenta é mais divertida de mexer, mais "bem feita"?
Chef é uma ferramenta complexa. A documentação ainda precisa ser ajustada em alguns pontos. Sua configuração é complexa, em determinados momentos se faz necessário alterar mais de 2 arquivos de configuração para obter o resultado esperado.
Não é divertido!
Puppet é uma ferramenta mais sólida (até por ser mais antiga) e de fácil configuração. A ideia é que, mesmo uma pessoa que não seja Sysadmin experiente, consiga utilizá-la de forma tranquila.
É bem divertido!
O fato de obter agente nesse caso, é um diferencial positivo, pois até mesmo o agendamento das tarefas consta em um arquivo de configuração e não necessita de utilização e gerenciamento de cron, como no Ansible e no Chef.
Ansible é muito divertido também, é simples e objetivo perde para o Puppet na questão da interface e pelo fato de não ter um gerenciamento nativo de schedules (somente cron e Ansible Tower).
Conclusão
Para a situação atual, levando em conta a praticidade e interface Web eficaz, o Puppet é a melhor opção, caso não existam restrições ao uso de agentes. Caso exista essa restrição, o Ansible é a melhor opção.
O Chef possui configuração complexa e a documentação necessita de melhorias além de necessitar de conhecimento prévio de Ruby.
Puppet e Ansible são duas ferramentas muito boas. O Puppet tem a vantagem de facilitar a configuração de cron mesmo via terminal, enquanto Ansible facilita somente via Interface, via terminal gera um pouco mais de esforço.
A maior vantagem do Puppet é a interface gráfica (
Foreman), que não é muito melhor, mas a parte gráfica está um passo à frente do Ansible Tower (Versões Freeware).
Puppet foi a ferramenta escolhida para nosso ambiente, por conta da interface gráfica ser melhor e, pelo fato de que uma simples instalação do agent, em máquinas atrás de NAT, funcionar tranquilamente.
Implementei o Puppet e o projeto foi concluído com sucesso.