O Ansible é uma ferramenta usada para automação de infraestrutura, ele mantido pela Red Hat, sua maior vantagem é ser “Agentless” (sem a necessidade de instalar software cliente nos servidores gerenciados), ele utiliza o protocolo SSH para comunicação (também existem outros protocolos para conexão), ele é simples e declarativo.
Instalando e executando o primeiro comando#
O Ansible é escrito em Python e a instalação mais comum é via pip
ou gerenciadores de pacote do sistema (apt
no Debian/Ubuntu, yum
/dnf
no Red Hat/CentOS). para instala-lo via pip:
pip install ansible
Agora com o Ansible instalado, podemos testar a conectividade com os agents, basta executar o comando abaixo passando o ip e o usuário do agent.
ansible all -i "<ip_agent>," -u <user> -m ping
Criando o arquivo de inventário#
O inventário é o arquivo onde o Ansible define quais máquinas ele vai gerenciar, por padrão, ele fica em /etc/ansible/hosts
, mas podemos cria-lo em qualquer lugar do projeto. Também pode definir variáveis por host ou por grupo dentro do mesmo arquivo. Essas variáveis são acessíveis nos playbooks ou nos comandos.
Por exemplo, vamos criar um arquivo chamado hosts.ini
:
# Variáveis por host
[web]
192.168.1.10 ansible_user=ubuntu ansible_port=22
192.168.1.11 ansible_user=ec2-user ansible_private_key_file=~/.ssh/aws.pem
# Variáveis por grupo
[db]
192.168.1.20
[db:vars]
ansible_user=postgres
ansible_port=2222
Depois de criar o arquivo, basta rodar o comando:
ansible all -i hosts.ini -m ping
Criando um playbook#
Um playbook é um arquivo YAML onde podemos descrever o que o Ansible deve fazer em cada host ou grupo de hosts. Vamos criar um arquivo chamado setup.yml
com o conteúdo abaixo:
---
- name: Configurar servidores web
hosts: web
become: yes
tasks:
- name: Atualizar pacotes
ansible.builtin.apt:
update_cache: yes
upgrade: dist
- name: Instalar Nginx
ansible.builtin.apt:
name: nginx
state: present
Para rodar o playbook, use:
ansible-playbook -i inventory.ini setup.yml
Usando o Ansible no meu Homelab#
Uso o Ansible para automatizar parte do meu Homelab, coisas como instalar o docker e liberar sua API, também para fazer o deploy do traefik. Ainda estou criando mais playbooks para automatizar ainda mais as coisas dentro do meu Homelab. Caso queria conferir, O projeto está disponível no meu Github: