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

Sumário

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.

[windows]
192.168.100.1
192.168.100.5

[ubuntu]
192.168.14.131

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:

[windows]
LAB-DC1 ansible_host=192.168.100.1  
LAB-SRV-1 ansible_host=192.168.100.5

[ubuntu]
LAB-NGINX ansible_host=192.168.14.131

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:

[windows:var]
[email protected]
ansible_password=secret_password
ansible_port=5985
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore
ansible_winrm_transport=credssp

[linux:var]
ansible_connection=ssh
ansible_ssh_user=ansible
ansible_ssh_pass=secret_password
ansible_python_interpreter='/usr/bin/env python3'
ansible_become_method=sudo

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:

ansible_user: [email protected]
ansible_password: secret_password
ansible_port: 5985
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
ansible_winrm_transport: credssp

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:

---
 - name: SNMP conf for Windows
   hosts: windows # host group to run the module on
   tasks:
   -  name: Install Service
      ansible.windows.win_feature:
        name: SNMP-Service
        include_management_tools: yes
        state: present
   -  name: Replace SNMP
      community.windows.win_snmp:
        community_strings:
        - RDRIT
        permitted_managers:
        - 192.168.100.100
        action: set

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 :

---
  - name: Windows Update
    hosts: windows
    tasks:
      - name: Install all update
        ansible.windows.win_updates:
          category_names:
            - SecurityUpdates
            - CriticalUpdates
            - Update Rollups
            - Updates
            - Application
            - Definition Updates
          log_path: C:\ansible_wu.txt

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:

---
- name: Update ubuntu
  hosts: ubuntu
  become: yes
  become_method: sudo
  tasks:
    - name: Update repo and cache
      apt: update_cache=yes force_apt_get=yes cache_valid_time=3600

    - name: Upgrade package
      apt:
        upgrade: yes

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:

Romain Drouche

Romain Drouche

Architecte Système | MCSE: Core Infrastructure

Expert en infrastructures IT avec plus de 15 ans d'expérience sur le terrain. Actuellement Chef de projet Systèmes et Réseaux et Référent SSI (Sécurité des Systèmes d'Information), je mets mon expertise au service de la fiabilité et de la sécurité des environnements technologiques.

GHin▶