Ansible é um software de código aberto para gerenciamento de configuração multiplataforma (Linux, Windows, equipamentos de rede, etc.).
Em outras palavras, o Ansible permitirá gerenciar, implantar ou até mesmo executar ações em um grupo de computadores em uma “única linha de comando”.
As ações/configuração são escritas em um arquivo no formato YAML, também chamado de playbook.
Através deste tutorial explicarei como instalar o Ansible, depois veremos como criar nosso inventário (computadores) e finalizaremos com a criação de diferentes playbooks.
Ao final deste tutorial, espero ter convencido você a usar o Ansible e você será capaz de criar seus próprios playbooks.
Pré-requisitos
Para este tutorial, você precisará de uma máquina Linux para instalar o Ansible, uma máquina Windows e Linux.
Para poder conectar-se ao computador Windows, é necessário configurar o WinRM.
Desde o Windows 2012, o WinRM normalmente está habilitado, a única coisa a fazer é habilitar a autenticação CredSSP para servidores membros do domínio usando o comando abaixo:
Enable-WSManCredSSP -Role Server
Para computadores que não são membros de um domínio do Active Directory, você deve usar a autenticação Básica
winrm set winrm/config/client/auth '@{Basic="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'
Para estar o mais próximo possível do uso comercial, neste tutorial usei dois servidores Windows que são membros de um domínio do Active Directory.
Além disso, convido você a ler esta documentação : Windows Remote Management — Ansible Documentation
Instalando Ansible no Ubuntu
Existem várias maneiras de instalar o Ansible no Linux. Com o Ubuntu, o Ansible está disponível através do gerenciador de pacotes, facilitando a instalação.
No terminal, digite o seguinte comando para instalar o Ansible:
sudo apt install ansible
Confirme a instalação do pacote
Depois de instalado, digite o comando abaixo para verificar se o Ansible está instalado:
ansible --version
Instalando componentes adicionais para gerenciar servidores Windows
Para gerenciar servidores Windows que são membros de um domínio do Active Directory, é necessário instalar componentes adicionais para que você possa conectar-se aos servidores usando credssp.
Como o Ansible usa Python, instalaremos o pip e, em seguida, instalaremos os suplementos python.
sudo apt install python3-pip
Passaremos agora para a instalação do pywinrm[credssp], que nos permitirá conectar aos nossos servidores Windows.
Instale o pywinrm[credssp]:
sudo pip install "pywinrm[credssp]"
SE você também tiver o erro ERRO: pyopenssl 20.0.1 possui criptografia de requisito>=3.2, mas você terá criptografia 2.8 que é incompatível, veja como instalar a versão correta da criptografia.
Digite o comando abaixo para atualizar a criptografia:
sudo pip install -U cryptography
Instalando SSHPASS
Instalando SSHPASS
sudo apt install sshpass
Depois de instalado, abra o arquivo /etc/ansible/ansible.cfg.
sudo nano /etc/ansible/ansible.cfg
Na seção [padrões], adicione:
host_key_checking = False
O Ansible está instalado, passaremos agora para a parte do inventário.
Inventário de servidores para Ansible
Inventário em Ansible é algo bastante complexo, neste tutorial vou explicar como começar a fazer inventário em Ansible, mas convido você a ler a documentação oficial para saber mais: How to build your inventory — Ansible Documentation
Por padrão, o inventário no Ansible é feito no arquivo /etc/ansible/hosts que é um arquivo no formato ini e que contém diferentes grupos nos quais declaramos os servidores alvo.
Por padrão, esta é a aparência do arquivo:
Vou te mostrar diversas soluções para gerenciar seu estoque em Ansible.
Outras soluções são possíveis, estão explicadas na documentação.
Declarar computadores em Ansible
Começaremos com o método mais simples, que é adicionar um grupo e os endereços IP dos servidores nele contidos.
Aqui está o bloco que adicionaremos ao arquivo ansible hosts.
Abra o arquivo com nano:
sudo nano /etc/ansible/hosts
Adicione o bloco de texto ao arquivo:
Salve o arquivo.
Adicionamos 2 computadores Windows e um computador do grupo Ubuntu ao inventário.
Para exibir o inventário use o seguinte comando:
ansible-inventory --list
Como você pode ver, encontramos os computadores que declaramos no arquivo hosts.
Esta solução não é super “fácil de usar”, quando você tem um ou dois servidores colocar os endereços IP está tudo bem, mas quando você tem várias dezenas ou centenas de servidores, não é ótimo.
Agora vamos melhorar isso adicionando um alias para ter o nome do computador no inventário.
A declaração é feita desta forma:
alias ansible_host=0.0.0.0
O que nos dá para o nosso exemplo:
Fica mais legível assim, não é?
Edite o arquivo /etc/ansible/hosts novamente para modificar o inventário:
SE listarmos o inventário novamente usando o comando ansible-inventory –list, chegaremos a um resultado mais fácil de usar.
É melhor assim, não é?
Declaramos nosso inventário, mas ainda precisamos configurar diversas informações como o par nome de usuário/senha e como se conectar aos computadores.
Configurar variáveis de inventário
Por padrão, o Ansible tenta se conectar a computadores usando o protocolo SSH, o que é bom para o servidor Ubuntu, mas para o nosso grupo Windows, o Ansible precisa ser instruído a usar o WinRM.
O gerenciamento de variáveis pode ser feito de diversas maneiras:
- No arquivo hosts
- Em arquivo dedicado ao grupo
Vou mostrar a vocês dois.
Pessoalmente, prefiro a segunda solução, porque o arquivo hosts rapidamente se torna ilegível.
Configurando variáveis no arquivo hosts
A primeira solução para configurar as variáveis é diretamente no arquivo hosts adicionando as variáveis no formato INI.
O bloco variável é definido assim: [group:vars].
Se continuarmos com o exemplo inicial que nos dá para o grupo windows e ubuntu:
Como você pode ver, no grupo de variáveis indicamos diversas informações para conexão aos servidores.
Quanto mais grupos você tiver em seu inventário, mais complicado será o acompanhamento do arquivo hosts.
Configuração de variáveis em arquivo dedicado ao grupo
O segundo método que mostrarei neste tutorial permitirá armazenar as variáveis em um arquivo separado para cada grupo.
Este arquivo deve ser colocado na pasta /etc/ansible/group_vars/ e deve ser nomeado com o nome do grupo (winodws.yml / ubuntu.yml).
Aqui o formato não é INI, mas YAML.
Se a pasta não existir, crie-a:
sudo mkdir /etc/ansible/group_vars
Em seguida, crie o arquivo com o nome do grupo:
sudo touch /etc/ansible/group_vars/windows.yml
Edite o arquivo:
sudo nano/etc/ansible/group_vars/windows.yml
Aqui está o conteúdo do arquivo windows.yml:
Para o arquivo ubuntu.yml, deixarei você fazer isso sozinho.
Para facilitar a edição, aconselho usar vscode ou notepad++ que suporta o formato YML.
Você encontrará a solução aqui: Ansible : inventory vars #3 ($158) · Extraits de code · Extraits de code · GitLab (rdr-it.com)
Configurar variáveis na declaração do host
Para completar esta parte da variável, é possível indicá-las diretamente na declaração do host.
No segundo exemplo que dei com o alias e depois o IP, isso é indicado pelo parâmetro ansible_host. Todas as variáveis que foram declaradas no grupo podem ser colocadas na linha host, o que é prático para gerenciar um caso particular.
LAB-APACHE2 ansible_host=192.168.14.79 ansible_connect=ssh ansible_ssh_user=ansible ansible_ssh_pass=$€cr€Tp@$s0rD ansible_python_interpreter='/usr/bin/env python3' ansible_become_method=sudo
Separe o inventário em vários arquivos
É possível ter vários inventários no Ansible.
Para fazer isso, você deve criar uma pasta de inventários na pasta /etc/ansible/ e, em seguida, nesta pasta criar um arquivo hosts.
Para cada chamada de comando ansible ou ansible-playbook, você precisará usar o parâmetro -i para especificar o inventário.
Mais informações aqui : Sample Ansible setup — Ansible Documentation
Agora você já sabe como criar seu inventário para Ansible, agora passaremos aos testes e verificaremos se tudo funciona.
Teste a conexão entre computadores Ansible e de inventário
Antes de executar as ações de configuração usando o playbook, testaremos a configuração correta do Ansible e nossa configuração usando um “ping”.
Para testar máquinas Windows, use o seguinte comando:
ansible group -m win_ping
O que dá para o nosso grupo de janelas:
ansible windows -m win_ping
Se tudo estiver instalado e configurado corretamente, a resposta do ping será pong.
Para linux ou outra conexão ssh, usaremos ping:
ansible group -m ping
O que dá para o grupo Ubuntu:
ansible ubuntu -m ping
Tal como acontece com os computadores Windows, se tudo estiver bem, a resposta ao ping é pong.
Você fez sua primeira interação entre o Ansible e seus servidores. Passaremos agora para o manual.
Playbooks ou livros de receitas
Finalmente poderemos começar a trabalhar e agora você verá todo o poder do Ansible.
Antes de começar, vou explicar “rapidamente” o que é um playbook.
Um playbook é uma lista de ações que realizaremos nos computadores, é um arquivo em formato YAML onde descreveremos o que queremos.
Você verá com os exemplos, ficará mais fácil de entender 😉
Antes de lançarmos um playbook, também vamos usar o Ansible Galaxy, que é um site que oferece módulos que fornecerão funcionalidades adicionais ao Ansible e vamos precisar deles nos playbooks que irei apresentar a vocês.
Playbooks Windows
Antes de começarmos a criar nosso primeiro manual, que nos permitirá instalar a funcionalidade SNMP e configurar o serviço, precisaremos instalar módulos adicionais.
Para começar, instalaremos duas coleções:
Digite os comandos abaixo:
ansible-galaxy collection install ansible.windows
ansible-galaxy collection install community.windows
Passaremos agora para a criação e uso de nosso primeiro manual.
Instale e configure a funcionalidade SNMP no Windows com Ansible
Para nosso primeiro exemplo, iremos instalar a funcionalidade SNMP e configurá-la criando uma comunidade e também indicando o endereço IP do servidor de monitoramento que estará autorizado a consultar o serviço SNMP.
Começaremos criando o arquivo que conterá nosso playbook, não é obrigatório criar o arquivo na pasta /etc/ansible/.
Vou criá-lo na pasta pessoal do meu usuário.
touch pb-windows-snmp.yml
Edite o arquivo:
nano pb-windows-snmp.yml
Copie o conteúdo abaixo no manual:
Não vou entrar em detalhes sobre o manual, pois a sintaxe YAML é bastante simples de entender.
O que você deve lembrar:
a linha abaixo indica a qual grupo o manual se aplica:
hosts: windows # host group to run the module on
Depois você tem a seção de tarefas e abaixo podemos ver as diferentes ações que serão realizadas:
- Instalando o recurso SNMP-Service
- Configuração do serviço SNMP indicando a comunidade e o endereço IP autorizado.
Vamos agora lançar o manual:
ansible-playbook pb-windows-snmp.yml -v
Aqui está o vídeo da execução:
Vamos agora verificar em um servidor, na lista de serviços encontramos o serviço SNMP. :
E podemos ver nas propriedades que a configuração foi aplicada:
Em menos de 50 segundos, consegui instalar e configurar a função SNMP em 2 servidores.
SE você reproduzir o playbook, ele verificará se o serviço está instalado e se a configuração SNMP está correta, isso garante que você sempre tenha a configuração correta também.
Instale atualizações do Windows com um playbook Ansible
O segundo manual que ofereço para Windows neste tutorial é realizar atualizações do Windows.
Acho-o particularmente interessante para servidores, porque permite controlar a execução do Windows Update.
Aqui está o playbook :
Execute o playbook para atualizar os servidores.
O modo detalhado fornece feedback sobre as atualizações instaladas.
Playbook Linux – Ubuntu
O funcionamento para Linux é idêntico, assim como para Windows, aqui está um manual que permitirá atualizar os servidores:
Execute o manual:
ansible-playbook playbook-ubuntu-update.yml -v
Para poder executar comandos apt, é necessário configurar a conta do usuário para usar o sudo sem exigir senha.
Agora você sabe como criar e executar um playbook.
Conclusão
Este tutorial termina aqui e espero que tenha ajudado você a entender o Ansible, que permitirá otimizar o gerenciamento e a configuração de seus servidores.
Juntamente com Jenkins ou Rundeck para a execução dos playbooks, você terá feedback do console para registrar e poderá acompanhar a aplicação dos playbooks.
Muitos módulos adicionais estão disponíveis no Ansible Galaxy para permitir que você gerencie todos os seus servidores e equipamentos (switch, roteador, firewall, etc.).
Chegarão outros tutoriais sobre Ansible e em particular a instalação e configuração com interface gráfica (Ansible AWX / Ansible Semaphore).
Também disponibilizarei diferentes playbooks no meu git: