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.