Ansible: Primeiros Passos

Ansible é uma ferramenta de automação de infraestrutura e gerenciamento de configuração de Open Source. Ela permite que os administradores de sistema e desenvolvedores provisionem, configurem e gerenciem servidores, aplicativos e ambientes de maneira rápida e eficiente.

Algumas das principais características do Ansible são:

  1. Simplicidade: O Ansible possui uma sintaxe simples e fácil de entender, baseada em YAML, o que facilita a escrita e leitura de seus playbooks (arquivos de configuração).
  2. Agentless: O Ansible não requer a instalação de agentes nos hosts gerenciados. Ele se conecta remotamente aos hosts via SSH ou WinRM, simplificando a implantação.
  3. Idempotência: As tarefas do Ansible são idempotentes, o que significa que podem ser executadas várias vezes sem causar efeitos colaterais indesejados.

Conceitos básicos do Ansible

ConceitoDefinição
HostServidor gerenciado pelo Ansible
GroupConjunto de hosts com um atributo comum
InventoryArquivo que define hosts e grupos
ModuleUnidade de código executada nos hosts remotos
TaskAção que combina um módulo e seus argumentos
PlaybookLista ordenada de tarefas em YAML
RoleEstrutura reutilizável para organizar código

YAML: Um formato de dados popular e simples que é muito limpo e compreensível por humanos.

Resumi bem o que é o Ansible e alguns conceitos e agora vamos pra prática e ver como a gente pode usar essa ferramenta.

No meu caso estarei usando o Ubuntu 22.04. A instalação do Ansible nessa distribuição é bastante simples. Basta seguir as instruções da documentação oficial do Ansible.

https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html

Instalação

Pré requisitos:

  • Python3
  • pip
  • sshpass

Verifique se o pacote pip está instalado:

python3 -m pip -V

Caso tudo esteja correto, você deverá ver algo semelhante ao seguinte:

$ python3 -m pip -V
pip 21.0.1 from /usr/lib/python3.9/site-packages/pip (python 3.9)

Caso o pacote não esteja instalado, você receberá o seguinte erro:

No module named pip pip python3-pip pip

Para instalar o pacote pip, basta acessar o link abaixo.

https://deltaops.medium.com/introdu%C3%A7%C3%A3o-ao-pip-seu-guia-para-o-gerenciamento-de-pacotes-python-553baa5f0feb

Com os requisitos acima, agora basta instalar o Ansible utilizando o seguinte comando:

pip install ansible

Confirme a instalação:

ansible --version

Tudo pronto. Vamos executar pela primeira vez.

Crie um diretório lab_ansible e entre nele para organizar o seu laboratório.

mkdir lab_ansible && cd lab_ansible

Para este exemplo, crie um container Docker para nossos testes.

Crie o Dockerfile:

#Dockerfile
FROM ubuntu:24.04

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:deltaops' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

EXPOSE 22

CMD ["/usr/sbin/sshd", "-D"]

Crie a imagem com o nome “ubuntu-ssh”:

docker build -t ubuntu-ssh .

Essa imagem contém o SSH, permitindo que o Ansible se conecte e execute nossos playbooks. Para executar, rode o seguinte comando:

docker run --name ssh-server -d ubuntu-ssh

Obtenha o endereço IP do container para adicioná-lo como um host no Ansible.

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ssh-server

Para acessar, utilize o usuário e a senha definidos no Dockerfile.

#user=root
#pass=detaops
ssh root@172.17.0.2

Agora temos um host de exemplo para começar a usar o Ansible.

Agora vamos criar o arquivo de inventário, o arquivo inventory.ini do Ansible, que serve para definir os hosts onde aplicaremos o Ansible pela primeira vez.

#inventory.ini
[docker_host] # Host que vai ser executado o playbook
172.17.0.2

Execute o comando abaixo:

ansible docker_host -m ping -i inventory.ini  -u root --ask-pass

Caso você receba esse erro abaixo:

diogo@diogo-pc:/tmp/post-medium/ansible# ansible docker_host -m ping -i inventory.ini  -u root --ask-pass
SSH password:
172.17.0.2 | FAILED! => {
"msg": "to use the 'ssh' connection type with passwords or pkcs11_provider, you must install the sshpass program"
}

Isso acontece porque estamos usando usuário e senha. Por isso, precisamos instalar o ssh-pass com o comando abaixo.

sudo apt -y install sshpass

Após a instalação, execute o comando novamente:

ansible docker_host -m ping -i inventory.ini  -u root --ask-pass

Acima, você pode ver que tudo funcionou corretamente. Que ótimo resultado!”

Portanto, esse comando irá executar o módulo “ping” do Ansible nos hosts definidos no arquivo inventory.ini, usando o usuário “root” e solicitando a senha para autenticação. Isso serve para verificar se a conexão com os hosts alvo está funcionando corretamente antes de prosseguir com outras tarefas do Ansible.

Agora vamos criar o meu primeiro playbook. Criaremos o arquivo ansible.yaml e utilizaremos ele para fazer a instalação do Nginx.

# ansible.yaml
- name: Primeiro Playbook
hosts: docker_host
tasks:
- name: Instalando nginx
apt:
name: nginx
state: present
  1. - name: Primeiro Playbook: Essa linha define o nome do playbook como “Primeiro Playbook”. Isso ajuda a identificar e organizar seus playbooks.
  2. hosts: docker_host: Essa linha especifica o grupo de hosts (ou hosts individuais) nos quais o playbook será executado. Nesse caso, o playbook será executado nos hosts pertencentes ao grupo chamado “docker_host”.
  3. tasks:: Essa linha marca o início da seção de tarefas do playbook. Todas as ações que o playbook realizará estarão listadas abaixo desta linha.
  4. - name: Instalando nginx: Essa linha define o nome da tarefa, que é “Instalando nginx”. Isso ajuda a identificar e organizar as diferentes tarefas dentro do playbook.
  5. apt:: Essa linha especifica o módulo a ser usado para executar a tarefa. Neste caso, o módulo “apt” é usado para gerenciar pacotes do sistema operacional baseado em Debian, como o Ubuntu.
  6. name: nginx: Essa linha define o nome do pacote a ser instalado, que é o “nginx”.
  7. state: presentEssa linha especifica o estado desejado do pacote. “present” significa que o pacote será instalado se ainda não estiver instalado.

Então, esse playbook irá instalar o pacote ‘nginx’ em todos os hosts pertencentes ao grupo ‘docker_host’. Ele é útil para configurar e implantar o servidor web Nginx de maneira automatizada em um ambiente.

Agora vamos executá-lo.

ansible-playbook -i inventory.ini ansible.yaml  -u root --ask-pass

Apesar de ter feito a instalação, ao testar o serviço, você descobrirá que ele está inativo. Faça o teste para verificar o status do serviço.

root@diogo-pc:/tmp/post-medium/ansible# curl 172.17.0.2
curl: (7) Failed to connect to 172.17.0.2 port 80 after 0 ms: Conexão recusada
root@diogo-pc:/tmp/post-medium/ansible#

Mas com o Ansible, podemos resolver isso usando o módulo ‘service’. Vamos adicionar mais instruções ao nosso playbook ansible.yaml para tratar isso.

#ansible.yaml
- name: Primeiro Playbook
hosts: docker_host
tasks:
- name: Instalando nginx
apt:
name: nginx
state: present
- name: Start service ngnix, if not started
service:
name: nginx
state: started

Por fim, verifique o resultado acessando o servidor Nginx via curl ou digitando o endereço IP no navegador.

Conclusão

Neste post, você deu os primeiros passos com Ansible:

  • ✅ Instalou o Ansible no Ubuntu 22.04
  • ✅ Aprendeu os conceitos básicos (hosts, inventory, modules, playbooks)
  • ✅ Criou um container Docker para servir de host de testes
  • ✅ Configurou o arquivo inventory.ini
  • ✅ Executou seu primeiro comando (ansible docker_host -m ping)
  • ✅ Criou e executou seu primeiro playbook para instalar e iniciar o Nginx

🚀 Próximos passos

Agora que você já sabe o básico, continue evoluindo:

Tem alguma dúvida ou encontrou algum problema durante o tutorial? Deixe nos comentários abaixo – estou aqui para ajudar!

📢 Siga a DeltaOps nas redes sociais para mais conteúdos sobre Ansible, DevOps e automação: