Ansible: instalação, configuração e uso com Windows e Linux

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
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.

ansible-inventory

É 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.io)

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:




Deixe um comentário