A infraestrutura como código nos diz para usar ferramentas que automatizam suas construções. Ótimo. Ferramentas como ansible , chef , fantoche , pilha de sal e outras nos levam a escrever como é a infraestrutura, enquanto resolve as diferenças.
No Salt Stack, esses bits são chamados estados . Se o estado não corresponder à realidade, a ferramenta resolverá isso para nós. Em outras palavras - estamos escrevendo um teste para nossa infraestrutura e, se o teste falhar, a ferramenta irá corrigi-lo por conta própria. Pelo menos essa é a ideia.
O XP nos ensina a usar TDD e a questão é se é aplicável à infraestrutura? As ferramentas sugerem que é.
Eu posso imaginar alguns tipos de testes que podem ser muito úteis.
Escrevemos testes de fumaça fornecidos com o serviço implantado para garantir que o serviço implantado de ponta a ponta funcione e seja executado conforme o esperado. Seria uma chamada à API ou / e verificação systemctl para garantir que o que acabamos de implantar funciona. Muitas dessas funcionalidades podem ser abordadas nos mesmos estados, pois ferramentas como ansible têm estados para garantir que um serviço esteja sendo executado.
Existe o projeto Molecule que permite executar funções individuais (como a ansible chama seus estados) no docker ou em outro mecanismo de virtualização temporário. Isso força a dissociação de funções e permite executá-las isoladamente do manual enquanto trabalha nelas. Os testes permitem principalmente zombar das variáveis com as quais a função deve trabalhar. Outros exemplos parecem uma duplicação do mecanismo ansible (afirme que um arquivo pertence a um usuário ...).
ThoughtWorks radar tecnologia agora elogia ferramentas como Inspec , serverspec ou Goss para validar se o servidor atende a especificação. Mas estamos escrevendo uma especificação, não estamos?
Portanto, existe um ponto em mais infraestrutura de teste se estivermos descrevendo infraestrutura em estados / funções? Eu poderia suspeitar que isso se torna mais necessário em organizações maiores, onde uma equipe fornece as especificações e outras a seguir, ou se houver um grande conjunto de funções, talvez você queira executar um subconjunto dessas e obter um benefício rápido com os testes? Estou lutando para ver por que você escreveria um teste se pudesse ter um papel / estado para a mesma pergunta em mente.
goss
. Por exemplo, por exemplo, o RPM é instalado (ansible) e testado se o arquivo padrão esperado for colocado no lugar ou se o serviço estiver sendo executado e escutando uma porta específica. Não quero corrigir esse problema automaticamente, mas ser notificado e interromper o progresso. Claro Ansible pode testar o sistema para você também, você só precisa ser explícito sobre isso, mas no nosso caso, utilizamosgoss
para testar o comportamento de serviço dentro de um recipiente