Configuramos um servidor que está executando a infraestrutura para uma pequena associação. Até agora, tentamos gerenciar a configuração com o Ansible, mas isso não foi um grande sucesso. Talvez estejamos fazendo errado.
Em princípio, a idéia é que esse servidor seja deixado sozinho a maior parte do tempo, com pessoas adicionando ou alterando coisas uma vez na lua azul. Isso torna crucial que tudo o que está configurado e em execução no servidor seja bem documentado e claro, pois as pessoas que não administram o sistema frequentemente perdem a visão geral (sem falar nos detalhes). Além disso, com o tempo, a composição do grupo de pessoas que administrará este servidor será alterada (à medida que as pessoas saem e ingressam no 'comitê').
Começamos com uma instalação limpa, adicionando funções no ansible sempre que desejamos configurar algo (nginx, phpfpm, postfix, firewall, sftp, munin, ..). Talvez devido à nossa inexperiência, é claro que nunca somos capazes de digitar um conjunto de tarefas ansíveis exatamente da maneira que precisamos, de uma só vez, também porque a configuração é um processo de tentativa e erro. Isso significa que, na prática, normalmente configurávamos primeiro qualquer serviço que desejássemos executar no servidor e depois convertíamos em tarefas ansíveis. Você pode ver para onde isso está indo. As pessoas esquecem de testar a tarefa ou têm medo de fazê-lo, ou pior: esquecemos ou deixamos de acrescentar coisas ao ansible.
Hoje, temos muito pouca confiança de que a configuração ansible realmente reflita o que está configurado no servidor.
Atualmente, vejo três problemas principais:
- É difícil (leia-se: não temos uma boa maneira de) testar tarefas possíveis sem correr o risco de quebrar as coisas.
- Ele adiciona trabalho extra para descobrir primeiro a configuração desejada e depois descobrir como traduzir isso em tarefas possíveis.
- (Idealmente), não o usamos com freqüência suficiente para criar familiaridade e rotina.
Uma consideração importante aqui é que, para o que quer que acabemos fazendo, deve ser fácil para os iniciantes aprender as cordas sem muita prática.
Existe uma alternativa viável que ainda fornece algumas garantias e verificações (comparáveis à mesclagem de arquivos Ansible para alguns master
) que "configuram as coisas e anotam o que você fez" não fornecem?
EDIT: Nós consideramos nos comprometer /etc
com o git. Existe uma maneira razoável de proteger segredos (chaves privadas, etc) dessa maneira, mas ainda assim temos o repositório de configuração disponível fora do servidor?