
É a versão em texto da apresentação 25-04-2018 no Saint-Petersburg Linux User Group . O exemplo de configuração localiza-se em https://github.com/ultral/ansible-role-testing
Suponho que você faça o gerenciamento da configuração, não o bash . Isso significa que você tem que testar de alguma forma. Você já testou papéis ansíveis? Como você faz isso?
Como fazer isso?
No meu caso, temos:
- Muitos papéis diferentes.
- O Hyper-V hospeda como um hypervisor.
- Uma nuvem privada com possibilidade limitada de criar VMs sob demanda.
- Um proxy para acesso à Internet.
- A incapacidade testa funções ansible dentro da janela de encaixe, devido a uma função = configuração da VM inteira.
- Decisão de implementar a política de construção verde para o repositório git com funções ansible.
Vamos comparar as soluções existentes para teste.
Nome | Cozinha de teste | Molécula | Criar novo |
---|
Linguagem | rubi | python | bash / ruby |
Observadores | 132 | 126 | 0 0 |
Estrelas | 1413 | 1154 | 1 |
Forquilhas | 502 | 174 | 2 |
Licença | Apache 2.0 | MIT | Qualquer |
Confirma | 1929 | 1264 | 0 0 |
Lançamentos | 101 | 121 | 0 0 |
Contribuintes | 109 | 82 | 5 |
Decidimos não reinventar a roda e obter a solução pronta para produção. Nossa equipe de infra-estrutura possuía fortes habilidades em rubi e ótima experiência com rubi. Como resultado, escolhemos Test Kitchen & inspec
Kitchen-ci

A idéia principal é criar uma nova VM, aplicar um papel ansível e fazer alguns testes de fumaça.
Política de construção verde

Além disso, implementamos a política de construção verde. Executamos testes para cada confirmação na ramificação principal e, se os testes estiverem corretos, ao aplicar funções ansible.
Virtualização aninhada
Como você se lembra, tínhamos uma nuvem privada com possibilidade limitada de criar VMs sob demanda. Decidimos criar VMs dentro de VMs.

Primeiro, tentamos executar o Virtualbox x32 sem aninhados. Foi uma má ideia por causa do pânico do kernel. Também a grande maioria de nossas VMs em nossa infraestrutura é x86_64, por isso decidimos continuar a pesquisa. Como resultado, decidimos usar a virtualização aninhada. Espero que tenha sido suportado pelos nossos servidores host.
Questões enfrentadas
Eu estava implementando o testkitchen e me deparei com alguns problemas.
Passe configurações de proxy do host para a VM convidada testkitchen
Em alguns fatos de teste, definimos as configurações do cliente proxy na VM criada pelo testkitchen. No entanto, o proxy não foi configurado no host testkitchen e o ansible não pode usar variáveis extras com valores vazios
Solução: crie um modelo erb para configurar o proxy padrão se as variáveis ENV não estiverem definidas
<%= ENV['http_proxy'].to_s.empty? ? 'http://proxy.example.com:3128' : ENV['http_proxy'] %>
Gerenciar configurações de rede via playbook
Algumas funções configuram interfaces de rede. O traje de teste era parecido com:
- Implantar configurações de rede em VMs
- Recarregar rede
- Falhou
Solução: adicione interfaces às VMs
Falha se os casos do processo contiverem "-" no nome
O Virtualbox não pode usar "_" em um nome de vm
Solução: renomeie as malas "vm_" => "vm-"
O teste do Oracle falha sem "." no final do nome da VM
Usamos papel na produção, no entanto, quando decidimos testá-lo, ele falhou. Nós o reproduzimos.
Eu gostaria de mostrar uma pista.
[root@vm-oracle vagrant]# getent ahosts vm-oracle 127.0.0.1 STREAM vm-oracle 127.0.0.1 DGRAM 127.0.0.1 RAW [root@vm-oracle vagrant]# getent ahosts vm-oracle. fe80::a00:27ff:febd:bd6a STREAM vm-oracle fe80::a00:27ff:febd:bd6a DGRAM fe80::a00:27ff:febd:bd6a RAW 10.0.2.15 STREAM 10.0.2.15 DGRAM 10.0.2.15 RAW [root@oracle vagrant]# getent ahosts oracle.example.com. 192.168.128.182 STREAM oracle.example.local 192.168.128.182 DGRAM 192.168.128.182 RAW
Você tem alguma idéia do que está acontecendo?
É um bug complicado:
- ativamos o IPv4 de escuta apenas nas configurações do ouvinte da oracle
- Oracle usado FQDN
- O linux contém o banco de dados especial "myhostname" para resolver o nome do host, é usado após a resolução do / etc / hosts & dns
- VM criada pelo Vagrant e
/etc/hosts
atualizados
Eu gostaria de esclarecer um pouco mais:
O que aconteceu no caso vm-oracle ?
- vagabundo criado vm
- vagrant atualizado
/etc/hosts
( vm-oracle x2) - ouvinte oracle ouviu IPv4
- ouvintes da oracle resolvidos vm-oracle. e obteve IPv6
- FALHOU
O que aconteceu no caso vm-oracle. ?
- vagabundo criado vm
- vagrant atualizado / etc / hosts ( vm-oracle e vm-oracle. )
- ouvinte oracle ouviu IPv4
- ouvintes da oracle resolvidos vm-oracle. e obtém IPv4
- Ok
OOM está chegando
OOM aleatoriamente estava matando VMs. O Testkitchen falhou com erros estranhos.
Solução: aumentar a RAM
Construções lentas
Estava trabalhando devagar
Soluções:
- Packer . Caixa vagabunda pré-construída com tarefas comuns
- Concorrência
Conclusão
Por um lado, a implementação atual funciona, mas por outro lado, existem alguns problemas
- não é fácil de usar.
- nós misturamos ruby e python.
- não há verificação de independência.
- funciona devagar.
- é difícil rastrear logs em um único trabalho.
Como resultado, molécula e janela de encaixe podem ser uma solução bastante interessante.