Começando com o Ansible

Primeiro, direto do site do Ansible:

Ansible is a universal language, unraveling the mystery of how work gets done. Turn tough tasks into repeatable playbooks. Roll out enterprise-wide protocols with the push of a button. Give your team the tools to automate, solve, and share.

Ansible não foi a minha primeira ferramenta do mundo DevOps mas foi a que mais me agradou quando estamos falando de provisionamento de servidores. Minha primeira experiência no assunto foi com o Puppet que achava muito confuso com seus módulos e organização da execução.

Não espere também que eu falei aqui da experiência do uso de Ansible em grandes organizações, meu uso foi apenas pessoal e em pequenas startups.

Instalando

Esse passo é bem simples para quem programa em Python e já sabe como usar o pip. O ansible é distribuído através dele ou também pelos gerenciadores de pacotes da sua distribuição, mais detalhes aqui.

Testando a instalação

Verificando a versão instalada:

$ ansible --version
ansible 2.7.4
  config file = None
  configured module search path = ['/home/jvrmaia/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/jvrmaia/.pyenv/versions/3.6.6/lib/python3.6/site-packages/ansible
  executable location = /home/jvrmaia/.pyenv/versions/3.6.6/bin/ansible
  python version = 3.6.6 (default, Sep  3 2018, 14:36:04) [GCC 7.3.0]

Descobrindo as configurações de sua máquina:

ansible localhost -m setup

O retorno deve ser um JSON grande com várias informações a respeito da sua máquina.

Configurações de projeto

O ansible permite criar configurações para projetos para facilitar sua vida na linha de comando e outras coisas mais, por exemplo, é possível criar um alias de nomes de serviços no arquivo /etc/ansible/hosts mas esse arquivo precisa de ser superusuário e ficaria global na máquina, isso seria muito ruim para manutenção e diversos projetos na mesma máquina.

Para evitar isso é possível trocar o local desse arquivo e configurar ele no ansible.cfg. Basta criar o arquivo ansible.cfg com o seguinte conteúdo:

[defaults]
hostfile=hosts

Assim o ansible vai procurar no diretório corrente o arquivo hosts. Exemplo de arquivo hosts:

[google]
google.com

Com isso podemos testar se funciona:

$ ansible -m ping google
google.com | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: connect to host google.com port 22: Network is unreachable\r\n",
    "unreachable": true
}

Podemos ver que ele reconheceu nossa configuração mas não teve sucesso no acesso ao Google. Reparece que no ping ele faz um teste na porta 22 de acesso SSH. Isso acontece pois é assim que o ansible vai funcionar, quando executar ele para configurar os seus servidores o que ele faz por baixo dos panos é acessar via SSH e executar as tarefas uma a uma e se falhar em alguma aborta.

Dica

Adicione a seguinte configuração para otimizar as questões de rede nos seus acessos:

[ssh_connection]
ssh_args = -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o IdentitiesOnly=yes -o ControlMaster=auto -o ControlPersist=60s

Se quiser conferir mais sobre entre no meu github e veja algumas coisas que fiz por lá. Por hoje ficamos por aqui, até!

Author image
Vitória - ES, Brasil Website
Formado em Engenharia de Computação na UFES e trabalhando com desenvolvimento de software para o mercado desde 2012. Hoje estou focado na área de ciência de dados e negócios.