Automatize Tarefas de Sysadmin com Ansible: 7 Exemplos Práticos

O Ansible, um projeto de código aberto da Red Hat baseado em Python, é uma ferramenta amplamente utilizada para automação de TI e gerenciamento de configuração.

Sua compatibilidade abrange diversas plataformas, funcionando perfeitamente com sistemas operacionais modernos como Linux, Windows e macOS. Ele emprega uma linguagem declarativa, escrita em YAML (YAML Ain’t Markup Language), para definir a configuração do sistema.

Juntamente com outras soluções de gerenciamento de configuração, o Ansible revolucionou a automação de TI e os padrões do setor. Essas ferramentas se tornaram essenciais no conjunto de ferramentas DevOps e são cruciais em qualquer ciclo de vida de processo de TI contemporâneo. Sua aplicação se estende a qualquer infraestrutura moderna, seja ela construída em ambientes locais, híbridos ou em nuvem. Além do DevOps, o Ansible também auxilia na automação de diversas tarefas cotidianas realizadas por administradores de sistemas.

Um dos pontos fortes do Ansible é sua abordagem sem agente, que elimina a necessidade de muita configuração inicial, além do acesso SSH à máquina de destino e uma versão compatível do Python, geralmente já instalada em sistemas operacionais modernos. Além disso, sua leveza o torna adequado para implantação e uso tanto em sistemas legados quanto em ambientes inovadores.

Aplicações do Ansible

Orquestração

O Ansible é uma ferramenta de destaque para orquestrar diversas tarefas de administração e implantação de sistemas. Seus playbooks facilitam a reutilização de fluxos de trabalho de orquestração em vários projetos, enquanto os dados de configuração baseados em YAML permitem armazenar e controlar a versão da sua infraestrutura em repositórios Git ou plataformas de controle de versão similares.

Implantação de aplicativos

Desde aplicativos simples com algumas linhas de código até implantações complexas de várias camadas, o Ansible possibilita a automação do ciclo de vida completo da implantação de aplicativos.

Segurança e conformidade

O Ansible contribui para garantir que seus sistemas estejam protegidos conforme as diretrizes da sua organização e em conformidade com os padrões do setor. Ele pode ser executado em grande escala, analisando e corrigindo vulnerabilidades de segurança, concedendo ao administrador total controle sobre o ambiente.

Vamos agora explorar algumas tarefas comuns de um administrador de sistema que podem ser automatizadas com o Ansible.

Transferência de arquivos entre sistemas

É comum que administradores de sistema necessitem copiar arquivos entre diretórios. Arquivos de configuração, por exemplo, são frequentemente transferidos para servidores remotos, ou arquivos precisam ser movidos entre locais remotos.

O módulo de cópia do Ansible agiliza essas tarefas por meio de playbooks.

É crucial que um administrador de sistemas monitore o status dos servidores gerenciados e execute ações predefinidas de acordo com as políticas organizacionais. Uma dessas ações é verificar o tempo de atividade do servidor. Com o Ansible, é simples obter esses valores e exibí-los. O exemplo abaixo ilustra a cópia da configuração NTP de um servidor local para um remoto usando o módulo de cópia:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Copiar um novo arquivo de configuração NTP e fazer backup do original, caso seja diferente
      copy:
        src: ./ntp.conf
        dest: /etc/ntp.conf
        owner: root
        group: root
        mode: '0644'
        backup: yes
  

Programação de tarefas com cron

A configuração de tarefas agendadas para execução rotineira é uma parte essencial da administração de qualquer servidor. É possível agendar backups automáticos, patches, auditorias, etc., para serem executados automaticamente em horários específicos, otimizando o tempo de uso produtivo.

O cron no Linux é uma ferramenta que permite esse agendamento, e o Ansible auxilia na criação e modificação dessas tarefas. O exemplo abaixo demonstra como definir uma tarefa rsync como root em alguns ou todos os seus servidores usando o Ansible:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Implantar tarefa cron
      cron:
        name: "Definir tarefa rsync"
        user: root
        minute: "5"
        hour: "4"
        job: "rsync -avz /caminho/para/pasta1 /caminho/para/pasta1 2>&1"
  

Gerenciamento de discos e sistemas de arquivos

O Ansible também pode ser usado para gerenciar discos, layouts de partição, sistemas de arquivos e montagens, incluindo o arquivo /etc/fstab em servidores Linux. Vários módulos do Ansible tornam isso possível. Este exemplo demonstra a criação de uma partição em um disco de 100 GB, a formatação com o sistema de arquivos ext4, a criação de um diretório para montagem da partição e, finalmente, a montagem no diretório desejado. Uma entrada no /etc/fstab também é criada para montagem temporária ou permanente, dependendo das opções do módulo.

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Criar uma partição
      parted:
        device: /dev/sdb
        number: 1
        part_end: "100%"
        state: present
    - name: Formatar nova partição
      filesystem:
        fstype: ext4
        dev: /dev/sdb1
    - name: Criar diretório de montagem
      file:
        path: /data
        state: directory
    - name: Montar partição
      mount:
        path: /data
        src: /dev/sdb1
        fstype: ext4
        state: mounted
  

Coleta de logs do servidor

Manter logs em um local acessível é essencial para segurança, auditoria e análise. O Ansible permite coletar logs de vários servidores no seu ambiente corporativo, armazenando-os facilmente no local definido. O playbook abaixo demonstra essa função:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Encontrar logs
      find:
        paths: /var/log/
        patterns: '*.log'
        recurse: yes
      register: _logs
    - name: Coletar logs
      fetch:
        src: "{{ item.path }}"
        dest: /tmp/logs
      with_items: "{{ _logs.files }}"
  

Instalação e remoção de pacotes e softwares

A instalação de pacotes é comum, seja por solicitações de usuários ou como parte da configuração inicial do servidor. A remoção de pacotes também é necessária quando eles se tornam obsoletos ou apresentam falhas. O Ansible facilita a instalação e remoção de pacotes sem a necessidade de acessar manualmente cada servidor. O exemplo a seguir demonstra a instalação e remoção de pacotes em servidores Linux baseados em Ubuntu e RHEL/CentOS.

---
- hosts: ubuntu
  gather_facts: no
  tasks:
    - name: Instalar utilitário lsof
      apt:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Remover utilitário ARP Scan
      apt:
        pkg: arp-scan
        state: absent
      sudo: yes
      
---
- hosts: centos
  gather_facts: no
  tasks:
    - name: Instalar utilitário lsof
      yum:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Remover utilitário ARP Scan
      yum:
        pkg: arp-scan
        state: absent
      sudo: yes
  

Gerenciamento de usuários

Usuários e grupos são a base para gerenciamento de acesso e permissões em sistemas Unix/Linux. Em grandes organizações, o gerenciamento de usuários e grupos pode ser um grande desafio.
Com o Ansible, o administrador de sistemas possui uma ferramenta poderosa para criar, modificar e excluir usuários e grupos, aproveitando todas as possibilidades do sistema operacional.

O exemplo abaixo ilustra a criação e exclusão de usuários e grupos utilizando o Ansible. Após a execução deste playbook, os servidores de destino terão os grupos A e B criados com determinados GIDs. O usuário1 será removido, caso exista. Um novo usuário sem shell será criado como user2 com determinado UID, grupos atribuídos e senha bloqueada.

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - group:
        gid: 12310
        name: groupA
        state: present
    - group:
        gid: 12311
        name: groupB
        state: present
    - user:
        name: user1
        state: absent
    - user:
        name: user2
        uid: 12427
        shell: /bin/false
        password_lock: yes
        groups: groupA, groupB
  

Gerenciamento de serviços

Serviços são processos daemon que são executados em segundo plano e oferecem serviços como a conectividade SSH (sshd). Com o Ansible, é possível gerenciar serviços do sistema e do usuário, como iniciá-los, interrompê-los e reiniciá-los. O playbook abaixo exemplifica essa funcionalidade:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Reiniciar daemon ssh
      service:
        name: ssh
        state: restarted
    - name: Interromper daemon sssd
      service:
        name: sssd
        state: stopped
    - name: Iniciar daemon httpd
      service:
        name: httpd
        state: started
  

No exemplo acima, o serviço SSH será reiniciado, enquanto o serviço SSSD é interrompido. O daemon httpd é iniciado no final. Como o Ansible é idempotente, qualquer serviço já iniciado ou parado não será alterado, enquanto a reinicialização sempre modifica o estado do serviço. É importante verificar o nome do serviço, pois diferentes distribuições Linux podem usar nomes diferentes para o mesmo serviço, como ssh e sshd.

Considerações Finais 👨‍💻

O Ansible simplifica a vida de um administrador de sistemas, automatizando tarefas repetitivas e demoradas, reduzindo erros e esforços humanos. Ele também permite armazenar dados de configuração em um repositório de código central, como o Git, facilitando a colaboração e revisão das atividades.

Para obter mais informações sobre o Ansible e seu extenso conjunto de módulos, consulte a sua documentação.