Tutorial

Como instalar e configurar o Ansible no Ubuntu 20.04

UbuntuConfiguration ManagementAnsibleUbuntu 20.04

Introdução

Os sistemas de gerenciamento de configuração são projetados para otimizar o processo de controle de grandes números de servidores, para administradores e equipes de operações. Isso permite que você controle sistemas diferentes de forma automática a partir de um local central.

Embora existam muitas ferramentas de gerenciamento de configuração populares disponíveis para sistemas Linux, como o Chef e o Puppet, essas são muitas vezes mais complexas do que aquilo que as pessoas desejam ou necessitam. O Ansible é uma ótima alternativa a essas ferramentas, pois ele oferece uma arquitetura que não requer a instalação de software especial nos nós, usando o SSH para executar as tarefas de automação e os arquivos YAML para definir detalhes de provisionamento.

Neste guia, discutiremos como instalar o Ansible em um servidor Ubuntu 20.04 e abordaremos algumas noções básicas de como usar este software. Para uma visão geral de alto nível do Ansible como ferramenta de gerenciamento de configuração, consulte An Introduction to Configuration Management with Ansible.

Pré-requisitos

Para seguir este tutorial, você vai precisar do seguinte:

  • Um nó de controle do Ansible: um nó de controle do Ansible é a máquina que usaremos para nos conectar e controlar os hosts do Ansible através do SSH. Seu nó de controle do Ansible pode estar tanto na sua máquina local como em um servidor dedicado que esteja executando o Ansible, embora este guia suponha que seu nó de controle seja um sistema Ubuntu 20.04. Certifique-se de que o nó de controle tenha:

    • Um usuário non root com privilégios sudo. Para configurar isto, siga os Passos 2 e 3 do nosso guia Initial Server Setup Guide for Ubuntu 20.04. No entanto, note que se estiver usando um servidor remoto como seu nó de controle do Ansible, você deve seguir cada passo deste guia. Fazer isso irá configurar um firewall no servidor com ufw e habilitará o acesso externo ao seu perfil de usuário non root, e ambos irão ajudar a manter o servidor remoto seguro.
    • Um par de chaves SSH associado a este usuário. Para configurar isto, siga o Passo 1 do nosso guia How to Set Up SSH Keys on Ubuntu 20.04.
  • Um ou mais hosts do Ansible: um host do Ansible é qualquer máquina que seu nó de controle do Ansible esteja configurado para automatizar. Este guia supõe que seus hosts do Ansible sejam servidores remotos Ubuntu 20.04. Certifique-se de que cada host do Ansible tenha:

    • A chave pública SSH do nó de controle do Ansible adicionada aos authorized_keys de um usuário do sistema. Este usuário pode ser tanto o root como um usuário regular com privilégios sudo. Para configurar isto, siga o Passo 2 do tutorial How to Set Up SSH Keys on Ubuntu 20.04.

Passo 1 — Como instalar o Ansible

Para começar a usar o Ansible como um meio de gerenciar a infraestrutura do seu servidor, será necessário instalar o software Ansible na máquina que servirá como o nó de controle do Ansible. Vamos usar os repositórios padrão do Ubuntu para isso.

Primeiro, atualize o índice de pacotes do seu sistema com:

  • sudo apt update

Após atualizar, instale o software do Ansible com:

  • sudo apt install ansible

Pressione Y quando solicitado a confirmar a instalação.

Seu nó de controle do Ansible agora possui o software necessário para gerenciar hosts. Em seguida, vamos ver como configurar um arquivo de inventário, para que o Ansible possa se comunicar com seus nós gerenciados.

Passo 2 — Configurando o arquivo de inventário

O arquivo de inventário contém informações sobre os hosts que você irá gerenciar com o Ansible. Você pode incluir qualquer lugar, de um a centenas de servidores no seu arquivo de inventário. Além disso, hosts podem ser organizados em grupos e subgrupos. O arquivo de inventário também é usado muitas vezes para definir variáveis que serão válidas apenas para hosts ou grupos específicos, de forma a serem utilizadas dentro de playbooks e templates. Algumas variáveis também podem afetar a maneira como um playbook é executado, como a variável ansible_python_interpreter que veremos a seguir.

Para editar o conteúdo do seu inventário padrão do Ansible, abra o arquivo /etc/ansible/hosts usando seu editor de texto preferido em seu nó de controle do Ansible.

  • sudo nano /etc/ansible/hosts

Nota: embora o Ansible normalmente crie um arquivo de inventário padrão em etc/ansible/hosts, fique à vontade para criar arquivos de inventário em qualquer local que melhor se adequar às suas necessidades. Neste caso, você precisará fornecer o caminho para seu arquivo de inventário personalizado com o parâmetro -i ao executar comandos do Ansible e playbooks. Usar arquivos de inventário por projeto é uma boa prática para minimizar o risco de executar um playbook no grupo errado de servidores.

O arquivo de inventário padrão fornecido pela instalação do Ansible contém alguns exemplos que você pode usar como referências para configurar o seu inventário. O exemplo a seguir define um grupo chamado [servers] que contém três servidores diferentes, cada um identificado por um pseudônimo personalizado: server1, server2 e server3. Certifique-se de substituir os IP destacados pelos endereços IP dos hosts do Ansible.

/etc/ansible/hosts
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

[all:vars]
ansible_python_interpreter=/usr/bin/python3

O subgrupo all:vars define o parâmetro de host ansible_python_interpreter que será válido para todos os hosts incluídos neste inventário. Este parâmetro garante que o servidor remoto utilize o executável do Python 3 /usr/bin/python3 ao invés do /usr/bin/python (Python 2.7), que não está presente em versões recentes do Ubuntu.

Quando você terminar, salve e feche o arquivo pressionando CTRL+X, depois Y e ENTER para confirmar suas alterações.

Sempre que quiser verificar seu inventário, você pode executar:

  • ansible-inventory --list -y

Você verá um resultado similar a este, mas contendo sua própria infraestrutura de servidor como definida no seu arquivo de inventário:

Output
all: children: servers: hosts: server1: ansible_host: 203.0.113.111 ansible_python_interpreter: /usr/bin/python3 server2: ansible_host: 203.0.113.112 ansible_python_interpreter: /usr/bin/python3 server3: ansible_host: 203.0.113.113 ansible_python_interpreter: /usr/bin/python3 ungrouped: {}

Agora que configurou seu arquivo de inventário, você tem tudo o que precisa testar a conexão com seus hosts do Ansible.

Passo 3 — Testando a conexão

Após configurar o arquivo de inventário para incluir seus servidores, é hora de verificar se o Ansible é capaz de se conectar a esses servidores e executar comandos através do SSH.

Para este guia, usaremos a conta root do Ubuntu, pois ela é geralmente a única conta disponível por padrão em servidores recém-criados. Se seus hosts do Ansible já tiverem um usuário regular sudo criado, incentivamos o uso dessa conta como alternativa.

Você pode usar o argumento -u para especificar o usuário remoto do sistema. Caso não seja fornecido, o Ansible tentará se conectar como seu usuário do sistema atual no nó de controle.

A partir da sua máquina local ou nó de controle do Ansible, execute:

  • ansible all -m ping -u root

Este comando usará o módulo ping interno do Ansible para executar um teste de conexão em todos os nós do seu inventário padrão, conectando como root. O módulo ping irá testar:

  • se os hosts estão acessíveis;
  • se você tem credenciais SSH válidas;
  • se os hosts conseguem executar módulos do Ansible usando Python.

Você deve obter um resultado similar a este:

Output
server1 | SUCCESS => { "changed": false, "ping": "pong" } server2 | SUCCESS => { "changed": false, "ping": "pong" } server3 | SUCCESS => { "changed": false, "ping": "pong" }

Se essa é a primeira vez que está se conectando a esses servidores através do SSH, será solicitado que você confirme a autenticidade dos hosts aos quais está se conectando pelo Ansible. Quando solicitado, digite yes e, em seguida, aperte ENTER para confirmar.

Assim que receber uma resposta "pong" de um host, isso significa que você está pronto para executar comandos do Ansible e playbooks naquele servidor.

Nota: Se for incapaz de obter uma resposta bem sucedida dos seus servidores, confira nosso Guia de dicas do Ansible para maiores informações sobre como executar comandos do Ansible com opções de conexão diferentes.

Passo 4 — Executando comandos ad hoc (opcional)

Após confirmar que seu nó de controle do Ansible consegue se comunicar com seus hosts, você pode começar a executar comandos ad hoc e playbooks nos seus servidores.

Qualquer comando que você normalmente executaria em um servidor remoto através do SSH pode ser executado com o Ansible nos servidores especificados no seu arquivo de inventário. Como exemplo, você pode verificar o uso de disco em todos os servidores com:

  • ansible all -a "df -h" -u root
Output
server1 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 798M 624K 798M 1% /run /dev/vda1 155G 2.3G 153G 2% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 798M 0 798M 0% /run/user/0 server2 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 395M 608K 394M 1% /run /dev/vda1 78G 2.2G 76G 3% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 395M 0 395M 0% /run/user/0 ...

O comando destacado df -h pode ser substituído por qualquer comando que você queira.

Também é possível executar módulos do Ansible através de comandos ad hoc, de forma similar ao que fizemos antes com o módulo ping para testar a conexão. Por exemplo, é assim que podemos usar o módulo apt para instalar a versão mais recente do vim em todos os servidores no seu inventário:

  • ansible all -m apt -a "name=vim state=latest" -u root

Também é possível direcionar a hosts específicos, além de grupos e subgrupos, ao executar comandos do Ansible. Por exemplo, é assim que poderia ser verificado o uptime de cada host no grupo servers:

  • ansible servers -a "uptime" -u root

Podemos especificar vários hosts separando-os com dois-pontos:

  • ansible server1:server2 -m ping -u root

Para maiores informações sobre como usar o Ansible, incluindo como executar playbooks para automatizar a configuração do servidor, veja nosso Guia de referência do Ansible.

Conclusão

Neste guia, você instalou o Ansible e configurou um arquivo de inventário para executar comandos ad hoc de um nó de controle do Ansible.

Assim que garantir que você consegue conectar-se e controlar sua infraestrutura a partir de uma máquina de controle central do Ansible, você pode executar qualquer comando ou playbook que queira nesses hosts.

Para maiores informações sobre como usar o Ansible, confira nosso Guia de dicas do Ansible.

Creative Commons License