Explorando Módulos do Ansible
Neste artigo, vamos explorar os Módulos do Ansible: sua caixa de ferramentas para configuração e gerenciamento sem problemas. Desde a instalação de pacotes até a manipulação de arquivos, administração de usuários e controle de serviços, os módulos do Ansible desempenham um papel fundamental na automação do Ansible, atuando como scripts independentes projetados para realizar tarefas específicas em nós gerenciados.
A Importância dos Módulos do Ansible
O propósito de criar módulos do Ansible é abstrair a complexidade, oferecendo aos usuários finais uma maneira simplificada de executar tarefas de automação sem se preocupar com detalhes técnicos. Ao aproveitar os módulos, os usuários do Ansible podem realizar tarefas de maneira eficiente, deixando de lado a carga cognitiva associada a operações mais complexas.
Características-Chave dos Módulos do Ansible
Execução de Tarefas
Os módulos são os blocos de construção para executar tarefas nos playbooks do Ansible. Eles fornecem a implementação real das tarefas especificadas no playbook.
Abstração da Complexidade
Os módulos abstraem a complexidade das operações subjacentes, permitindo que os usuários se concentrem no resultado desejado, em vez de nos detalhes intrincados.
Diversidade de Funções
Os módulos do Ansible abrangem uma ampla variedade de funções, desde tarefas básicas, como manipulação de arquivos e instalação de pacotes, até operações complexas envolvendo recursos na nuvem, bancos de dados e muito mais.
Padronização
Os módulos do Ansible seguem uma estrutura e interface padronizadas, facilitando a consistência e previsibilidade entre diferentes módulos. Essa uniformidade simplifica a curva de aprendizado para os usuários.
Idempotência
Os módulos são projetados para serem idempotentes, o que significa que aplicar o mesmo módulo várias vezes tem o mesmo resultado que aplicá-lo uma vez. Isso garante previsibilidade e confiabilidade na execução dos playbooks.
Manipulação de Entrada Dinâmica
Os módulos aceitam parâmetros de entrada dinâmica, permitindo que os usuários personalizem o comportamento das tarefas com base em requisitos específicos. Essa flexibilidade melhora a adaptabilidade do Ansible a diferentes casos de uso.
Módulos da Comunidade e Personalizados
O Ansible possui uma vasta coleção de módulos contribuídos pela comunidade, abrangendo uma ampla variedade de tecnologias e serviços. Os usuários também podem criar módulos personalizados para estender a funcionalidade do Ansible para tarefas especializadas.
Execução Remota
Os módulos são executados em hosts remotos, permitindo que o Ansible gerencie e configure sistemas sem a necessidade de agentes nos nós gerenciados.
Manipulação de Saída
Os módulos fornecem saída estruturada, facilitando que tarefas ou scripts subsequentes analisem e interpretem os resultados. Essa saída estruturada geralmente está no formato JSON.
Natureza Declarativa
Os playbooks do Ansible, que utilizam módulos, seguem uma sintaxe declarativa, especificando o estado desejado do sistema, em vez de prescrever as etapas para alcançar esse estado. Isso contribui para a simplicidade e legibilidade da automação do Ansible.
Exemplo de Tarefa do Ansible
Aqui está um exemplo de uma tarefa do Ansible usando o módulo yum para instalar uma versão específica do Apache HTTP Server (pacote httpd) em uma máquina CentOS:
---
- name: Instalar o Apache HTTP Server com uma Versão Específica no CentOS
hosts: all
become: yes # Isso permite que a tarefa seja executada com privilégios elevados (sudo)
tasks:
- name: Instalar o Apache HTTP Server
yum:
name: httpd # Nome do pacote para o Apache HTTP Server
state: present # Garantir que o pacote esteja instalado
- name: Garantir que uma Versão Específica do Apache está Instalada
yum:
name: httpd-2.4.6-90.el7.centos # Especifique a versão desejada
state: present
A primeira tarefa instala o Apache HTTP Server (pacote httpd) usando o módulo yum. O estado: present garante que o pacote esteja instalado.
A segunda tarefa utiliza novamente o módulo yum para garantir que uma versão específica do Apache esteja instalada. Neste exemplo, está instalando a versão 2.4.6-90.el7.centos do pacote httpd.
Módulos do Ansible Mais Úteis e Comuns no CentOS
Aqui estão alguns dos módulos mais úteis e comuns do Ansible no CentOS:
yum:
Descrição: O módulo yum permite realizar tarefas como instalação, atualização ou remoção de pacotes.
Casos de Uso: Instalação, atualização ou remoção de pacotes.
Aqui está um exemplo básico de uso do módulo yum para instalar um pacote:
---
- name: Instalar o Apache HTTP Server
hosts: all
become: yes # Isso permite que a tarefa seja executada com privilégios elevados (sudo)
tasks:
- name: Instalar o Apache HTTP Server
yum:
name: httpd
state: present # Garantir que o pacote esteja instalado
service:
Descrição: O módulo service no Ansible é usado para gerenciar serviços em hosts remotos. Ele permite iniciar, parar, reiniciar, habilitar ou desabilitar serviços.
Casos de Uso: Iniciar, parar ou reiniciar serviços.
Aqui está um exemplo básico de uso do módulo service para garantir que o Apache HTTP Server esteja em execução:
---
- name: Gerenciar o Serviço Apache
hosts: all
become: yes # Isso permite que a tarefa seja executada com privilégios elevados (sudo)
tasks:
- name: Garantir que o serviço Apache esteja em execução
service:
name: httpd
state: started
enabled: yes
file:
Descrição: O módulo file no Ansible é usado para gerenciar arquivos e diretórios em hosts remotos. Ele permite criar, excluir, modificar ou definir permissões para arquivos e diretórios.
Casos de Uso: Criar, excluir ou modificar arquivos e diretórios.
Aqui está uma visão geral do módulo file:
---
- name: Gerenciar Arquivos e Diretórios
hosts: all
become: yes # Isso permite que a tarefa seja executada com privilégios elevados (sudo)
tasks:
- name: Criar um diretório
file:
path: /caminho/para/diretorio
state: directory
- name: Criar um arquivo com conteúdo
file:
path: /caminho/para/diretorio/meuarquivo.txt
state: touch
content: "Olá, Ansible!"
template:
Descrição: O módulo template no Ansible é usado para gerar dinamicamente arquivos em hosts remotos usando a formatação Jinja2. Ele permite criar arquivos de configuração com conteúdo dinâmico.
Casos de Uso: Criar arquivos de configuração com conteúdo dinâmico.
Aqui está um exemplo básico de uso do módulo template para gerar um arquivo de configuração:
---
- name: Gerenciar Arquivo de Configuração com Modelo
hosts: all
become: yes # Isso permite que a tarefa seja executada com privilégios elevados (sudo)
tasks:
- name: Criar um arquivo de configuração a partir de um modelo
template:
src: /caminho/para/modelo.conf.j2
dest: /etc/minhaplicacao/minhaplicacao.conf
Formatação Jinja2:
Dentro do arquivo de modelo Jinja2 (por exemplo, modelo.conf.j2), você pode usar a sintaxe Jinja2 para incluir variáveis, condicionais e loops. Aqui está um exemplo simples:
# modelo.conf.j2
# Arquivo de configuração para MinhaAplicacao
url_banco_de_dados = {{ url_banco_de_dados }}
modo_debug = {{ modo_debug | default(false) }}
user:
Descrição: O módulo user no Ansible é usado para gerenciar contas de usuário em hosts remotos. Ele permite criar, modificar ou remover contas de usuário e atributos associados.
Casos de Uso: Criar, modificar ou remover contas de usuário.
Aqui está um exemplo básico de uso do módulo user para criar um novo usuário:
---
- name: Gerenciar Conta de Usuário
hosts: all
become: yes # Isso permite que a tarefa seja executada com privilégios elevados (sudo)
tasks:
- name: Criar um novo usuário
user:
name: joao_silva
password: "$6$salt_aleatorio$senha_hashed"
groups: usuarios
copy:
Descrição: O módulo copy no Ansible é usado para copiar arquivos da máquina local para hosts remotos. Ele permite transferir arquivos e definir propriedades como propriedade e permissões.
Casos de Uso: Transferir arquivos de configuração ou scripts para sistemas de destino.
Aqui está um exemplo básico de uso do módulo copy para transferir um arquivo para hosts remotos:
---
- name: Copiar Arquivos para Hosts Remotos
hosts: all
become: yes # Isso permite que a tarefa seja executada com privilégios elevados (sudo)
tasks:
- name: Copiar um arquivo
copy:
src: /caminho/para/arquivo/local.txt
dest: /caminho/no/servidor/remoto/arquivo.txt
command:
Descrição: O módulo command no Ansible é usado para executar comandos em hosts remotos. Ele executa o comando no shell padrão (/bin/sh) no host remoto, permitindo realizar várias tarefas.
Casos de Uso: Executar operações básicas na linha de comando.
Aqui está um exemplo básico de uso do módulo command para executar um comando simples em hosts remotos:
---
- name: Executar Comando em Hosts Remotos
hosts: all
become: yes # Isso permite que a tarefa seja executada com privilégios elevados (sudo)
tasks:
- name: Executar um comando
command: ls /caminho/para/diretorio
shell:
Descrição: O módulo shell no Ansible é usado para executar comandos em um shell em hosts remotos. Ele permite executar sequências de comandos ou scripts mais complexos em comparação com o módulo command.
Casos de Uso: Executar sequências de comandos ou scripts complexos.
Aqui está um exemplo básico de uso do módulo shell para executar um comando em um shell em hosts remotos:
---
- name: Executar Comando Shell em Hosts Remotos
hosts: all
become: yes # Isso permite que a tarefa seja executada com privilégios elevados (sudo)
tasks:
- name: Executar um comando no shell
shell: ls /caminho/para/diretorio
cron:
Descrição: O módulo cron permite criar, modificar ou remover tarefas cron.
Casos de Uso: Agendamento de tarefas periódicas.
Aqui está um exemplo básico de uso do módulo cron para criar uma tarefa cron:
---
- name: Gerenciar Tarefas Cron
hosts: all
become: yes # Isso permite que a tarefa seja executada com privilégios elevados (sudo)
tasks:
- name: Criar uma tarefa cron
cron:
name: "Minha Tarefa Diária"
minute: "0"
hour: "2"
job: "/caminho/para/script.sh"
lineinfile:
Descrição: O módulo lineinfile no Ansible é usado para garantir que uma linha específica esteja presente ou ausente em um arquivo. É comumente usado para gerenciar arquivos de configuração, adicionando, modificando ou removendo linhas específicas.
Casos de Uso: Modificação de arquivos de configuração, adicionando, modificando ou removendo linhas específicas.
Aqui está um exemplo básico de uso do módulo lineinfile para adicionar uma linha a um arquivo de configuração:
---
- name: Gerenciar Arquivo de Configuração
hosts: all
become: yes # Isso permite que a tarefa seja executada com privilégios elevados (sudo)
tasks:
- name: Adicionar uma linha a um arquivo
lineinfile:
path: /caminho/para/arquivo_de_configuracao
line: 'nova_linha_a_ser_adicionada'
git:
Descrição: O módulo git no Ansible é usado para gerenciar repositórios Git em hosts remotos. Ele permite clonar repositórios, atualizá-los e realizar várias tarefas relacionadas ao Git.
Casos de Uso: Gerenciar repositórios Git, como clonar, adicionar, atualizar e executar tarefas relacionadas ao Git.
Aqui está um exemplo básico de uso do módulo git para clonar um repositório Git:
---
- name: Gerenciar Repositório Git
hosts: all
become: yes # Isso permite que a tarefa seja executada com privilégios elevados (sudo)
tasks:
- name: Clonar um repositório Git
git:
repo: https://github.com/exemplo/repo.git
dest: /caminho/para/clonagem/local
Exemplo de Tarefas do Ansible
Aqui está um exemplo que abrange tarefas como instalação de pacotes, gerenciamento de arquivos, administração de usuários e gerenciamento de serviços:
---
- name: Configuração do Sistema
hosts: all
become: yes # Isso permite que as tarefas sejam executadas com privilégios elevados (sudo)
tasks:
- name: Atualizar pacotes do sistema
yum:
name: '*'
state: latest
when: ansible_os_family == 'RedHat'
- name: Garantir que o serviço NTP esteja instalado e em execução
service:
name: ntpd
state: started
enabled: yes
- name: Criar um usuário de sistema
user:
name: sysadmin
group: wheel
password: "$6$salt_aleatorio$senha_hashed"
shell: /bin/bash
- name: Garantir a chave SSH para o usuário sysadmin
authorized_key:
user: sysadmin
key: "{{ lookup('file', '/caminho/para/chave_publica.local.pub') }}"
state: present
- name: Configurar o firewall para permitir SSH
firewalld:
service: ssh
permanent: yes
state: enabled
notify: Recarregar Firewalld
handlers:
- name: Recarregar Firewalld
command: firewall-cmd --reload
Explicação:
- Atualizar pacotes do sistema: O módulo yum garante que todos os pacotes do sistema no CentOS sejam atualizados para a versão mais recente.
- Garantir que o serviço NTP esteja instalado e em execução: O módulo service garante que o serviço NTP (Network Time Protocol) esteja instalado, em execução e configurado para iniciar durante a inicialização.
- Criar um usuário de sistema: O módulo user cria um usuário chamado ‘sysadmin’ pertencente ao grupo ‘wheel’, com uma senha e shell especificados.
- Garantir a chave SSH para o usuário sysadmin: O módulo authorized_key adiciona uma chave pública SSH ao arquivo authorized_keys para o usuário ‘sysadmin’, permitindo acesso seguro.
- Configurar o firewall para permitir SSH: O módulo firewalld garante que o firewall permita conexões SSH de entrada. O manipulador aciona uma recarga do firewall para aplicar as alterações.
Em resumo, os módulos do Ansible são a espinha dorsal da automação, oferecendo ferramentas poderosas para gerenciar diversas tarefas. Os módulos destacados aqui fornecem uma base sólida, e à medida que suas necessidades evoluem, explorar módulos adicionais usando o comando ‘ansible-doc ‘ abre as portas para possibilidades infinitas. A arquitetura modular do Ansible permite personalizar e otimizar fluxos de trabalho de automação, tornando-o uma ferramenta versátil e indispensável para orquestração e gerenciamento de configuração de TI.
Espero que este artigo tenha fornecido informações valiosas sobre os aspectos práticos e benéficos dos Módulos do Ansible.
Sou um profissional na área de Tecnologia da informação, especializado em monitoramento de ambientes, Sysadmin e na cultura DevOps. Possuo certificações de Segurança, AWS e Zabbix.