Olhando para tentar criar alguma resiliência em nossa configuração Ansible, que trata de provisionamento e configuração.
Entendo alguns métodos de teste no lado da configuração, mas estou me perguntando qual a melhor forma de implementar o teste no lado do provisionamento e se existem ferramentas que possam ajudar nesse tipo de implementação.
Atualmente, muitos dos nossos testes são feitos em série durante o manual, o que faz muito sentido para coisas como "o serviço foi disponibilizado; o vip está disponível; a tarefa assíncrona foi concluída", mas o que realmente me preocupa é nossa capacidade de gerenciar desvios de informações. configuração na camada de aplicativo e provisionamento (como configuração da VM). Estou ciente de que o Ansible não é a melhor ferramenta para trabalhar com desvios de configuração, mas estou curioso para ver suas próprias opiniões.
Se você tem algo para automatizar totalmente o processo ainda melhor. (temos alguns scripts feios que relatam folga diariamente).
Nota : No momento, temos algumas condições em que uma reprovisão pode ocorrer (por exemplo, reconstrução a partir do backup, problema crítico nos sistemas), mas geralmente apenas percorre algumas das tarefas de configuração ansíveis e não pensa mais nisso.
fonte
I'm aware Ansible isn't the best tool for working with configuration drift
Por favor explique.Respostas:
Algumas opções por aí ..
Ferramentas de teste: classificadas por estrelas do github
Principais diferenças entre eles:
Por fim, sugiro que passe um dia fazendo experiências com todos eles para ter uma ideia deles antes de decidir por si mesmo.
Teste contínuo / divergência:
Arnês de teste para desenvolvimento:
Divulgação completa: Eu sou o autor de goss
ATUALIZAÇÃO: O InSpec 4.x ou superior usa uma licença comercial / de código aberto mista - consulte os comentários.
fonte
As duas ferramentas que vi para isso são o InSpec e o ServerSpec . Serverspec é uma ferramenta baseada em Ruby que se baseia no RSpec . O InSpec é inspirado no RSpec e ServerSpec.
Eu usei ServerSpec. É legal, mas talvez não seja 100% estável. Eu tive problemas com o teste de versões específicas de software no Ubuntu.
Eu li os documentos do InSpec, mas não me aprofundou muito. Faz essencialmente a mesma coisa que Serverspec.
A julgar pelos commits do Github, parece que o trabalho no ServerSpec diminuiu um pouco, enquanto o InSpec está apenas aumentando.
ATUALIZAÇÃO: O InSpec 4.x ou superior usa uma licença comercial / de código aberto mista - consulte os comentários.
fonte
Ao usar ferramentas de gerenciamento de configuração, como Ansible, a própria ferramenta seria responsável por evitar desvios na configuração. Depois de usar o Ansible para definir uma determinada configuração, a execução repetitiva do Ansible garantirá que sua configuração esteja como você definiu. Isso também exige que seu código Ansible seja escrito de maneira idempotente.
Dado o exposto acima, o provisionamento de teste pode ser alcançado executando os manuais do Ansible em loop de algum servidor. Por exemplo, um trabalho cron, ou Jenkins, pode executar os playbooks a cada 30 minutos e relatar qualquer falha. Não ter falhas significa que sua configuração está sob controle; ter falhas significa que há um problema em obter os servidores no estado desejado .
Em um caso em que você não pode confiar que seu código seja gravado como idempotente e, portanto, não é possível executar o Ansible repetidamente em um loop de um servidor automático, existe uma solução alternativa. Você pode fazer o mesmo que acima (executar Ansible em um loop), mas usar o modo de execução a seco . Cada vez que o Ansible relata que são necessárias alterações, o trabalho Jenkins (ou trabalho cron) pode notificá-lo de que sua configuração provisionada foi alterada e que os servidores não estão no estado desejado .
Para garantir que seu código Ansible esteja realmente fazendo o que você pensa que deveria estar fazendo, as soluções mencionadas por Dave Swersky se aplicam. O InSpec e o Serverspec são ferramentas que verificam de uma maneira diferente que seus playbooks realmente fazem o que você quer dizer. Uma ótima maneira de executar esse tipo de ferramenta em ambientes de teste (mesmo contêineres de encaixe) é usar o kitchen.ci, que lida com toda a cola entre as várias ferramentas de teste de unidade de infra-estrutura e a execução de seus playbooks / módulos / livros de receitas.
O Kitchen.ci foi originalmente usado para testar os livros de receitas do Chef, mas existem plugins para o Ansible e outras ferramentas de CM também.
fonte
O Test Kitchen possui um plug-in de provedor de cozinha para testar o código Ansible. Não é tão profundo quanto a integração do Chef, mas faz o trabalho na maioria dos casos. Há também o projeto Molecule mais recente, que é um sistema de teste Ansible dedicado.
fonte
Você pode rastrear discrepâncias de configuração / infraestrutura / desvio usando o Outthentic . É fácil criar um conjunto de testes para "corrigir" o estado desejado e executá-lo novamente sempre que precisar rastrear alterações indesejadas.
fonte