Ansible: Primeiros Passos

DeltaOps
6 min readJul 11, 2024

--

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

Host: Um servidor gerenciada pelo Ansible.

Group: Vários hosts agrupados juntos que compartilham um atributo comum.

Inventory: Uma coleção de todos os hosts e grupos que o Ansible gerencia. Pode ser um arquivo estático em casos simples ou podemos extrair o inventário de fontes remotas, como provedores de nuvem.

Modules: Unidades de código que o Ansible envia aos nós remotos para execução.

Tasks: Unidades de ação que combinam um módulo e seus argumentos junto com alguns outros parâmetros.

Playbooks: Uma lista ordenada de tarefas junto com seus parâmetros necessários que definem uma receita para configurar um sistema.

Roles: Unidades redistribuíveis de organização que permitem que os usuários compartilhem o código de automação de forma mais fácil.

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.

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.

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: present: Essa 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.

Por enquanto, é isso pessoal. Neste post, mostrei como dar os primeiros passos com o Ansible. Nos próximos conteúdos, abordarei temas mais avançados. Espero que tenham gostado e não esqueçam de nos seguir nas redes sociais. 😊

https://deltaops.com.br/

https://www.linkedin.com/company/deltaopscloud/

Referência:

Escrito por 🖋️ Diogo Lima
Sócio Fundador da Empresa DeltaOps

--

--

DeltaOps

Somos uma consultoria especializada em Cloud, DevOps e SRE. Apaixonados por automação, ajudamos empresas em sua jornada para a nuvem com práticas DevOps.