De certa forma, todos que trabalham com TI tendem a criar rotinas que acelerem a entrega de suas tarefas. Não importa se você é um sysadmin, desenvolvedor, DBA, trabalha com segurança ou é integrante do time de governança: automatizar tarefas repetitivas sempre permeou como uma prioridade para tornar menos cansativo o seu dia a dia. Se aprofunde agora na Automação com Ansible:
Com a evolução dos data centers e o surgimento de novas arquiteturas como a cloud e microsserviços, a quantidade de dispositivos e sistemas cresceu em número e velocidade nunca vistos antes. Coexistir com essa complexidade sem o auxílio de uma ferramenta que automatize parte desse processo, ou por completo, pode tornar inviável tarefas simples como garantir o ajuste síncrono dos relógios de um conjunto de servidores.
Para auxiliar as equipes de TI com essas tarefas em larga escala, surgiram ferramentas que entregam automação na gerência e configuração de servidores. Alguns exemplos dessas ferramentas são o Puppet, Chef e cfengine. Também surgiram ferramentas complementares com tarefas específicas, como o Capistrano e Fabric, que fazem o deploy de servidores automatizados. Essas ferramentas têm em comum a necessidade de utilizar um agente instalado nos servidores para realizar a configuração. Outro ponto importante que deve ser observado é a linguagem utilizada para escrever os scripts de automação com essas ferramentas. Enquanto algumas soluções utilizam a linguagem de programação Ruby outras desenvolvem uma codificação proprietária.
No início de 2012, o projeto opensource Ansible foi disponibilizado para a comunidade. A ideia inicial do projeto era se adaptar às necessidades modernas de gerenciamento de sistemas e aplicações, suprindo algumas lacunas não preenchidas por outras soluções de mercado.
O Ansible é uma ferramenta de linha de comando escrita em Python. Entretanto, os scripts de automação utilizados, denominados playbooks, são escritos em uma linguagem declarativa YAML. Além disso, o Ansible ganhou adesão por agregar funções de outras soluções em uma única ferramenta.
Em resumo, a Automação com Ansible pode ser descrita como:
- Limpo: usa uma sintaxe simples (YAML) e é fácil para qualquer pessoa (desenvolvedores, administradores de sistemas, gerentes) entender.
- Rápido: para aprender, configurar – especialmente considerando que você não precisa instalar agentes ou daemons extras em todos os seus servidores.
- Completo: o Ansible desempenha três papéis em uma solução única: gerência de configuração, deploy de servidores/aplicativos e execução de tarefas ad-hoc.
- Eficiente: dispensa software extra em seus servidores significando mais recursos para os aplicativos.
- Seguro: por padrão o Ansible usa SSH e não requer portas abertas extras ou daemons potencialmente vulneráveis em seus servidores.
Outros elementos permitem uma automação mais ampla com o Ansible. Os scripts escritos em YAML podem conter handlers, roles, variáveis de ambiente, condicionais, prompts e até mesmo requerer a intervenção de um supervisor de time para prosseguir sua execução. Nesse artigo vou limitar os exemplos de uso do Ansible para um cenário mais simples.
Automação com Ansible na prática
Depois de uma breve introdução, hora de entender como funciona a automação do Ansible com alguns exemplos práticos.
O Ansible depende do Python para ser instalado. Se você já possui o python e o pacote pip instalados em seu sistema, basta executar o comando:
Se preferir, pode realizar a instalação utilizando os repositórios dos sistemas operacionais.
Linux (Debian/Ubuntu)
Linux (RHEL/CentOS)
Agora que o Ansible foi instalado no sistema, vamos começar criando um arquivo de inventário. Na arquitetura Ansible, o inventário é um arquivo de texto que armazena as informações dos hosts e/ou dispositivos que serão gerenciados.
Esses hosts também podem ser organizados em grupos dentro do arquivo de inventário. À medida que o número de dispositivos aumenta, é possível utilizar expressões para representar esses ranges. Observe no arquivo de inventário a seguir, a entrada que representa os switches do grupo network: as instruções serão encaminhadas para todos os switches compreendidos entre o switch01 e switch50.
O mesmo arquivo de inventário pode ser escrito utilizando a formatação YAML.
Playbooks
Depois que definimos um inventário, precisamos criar o arquivo com as instruções de automação. Esse arquivo é escrito no padrão YAML e recebe o nome de playbook.
O playbook a seguir é um exemplo de instalação do software Apache em um sistema Linux RHEL. Observe que, por utilizar o padrão YAML em sua estrutura, não é necessário ter conhecimentos de codificação para escrevê-lo. Um ponto importante para a adoção da ferramenta já que torna a curva de aprendizado muito mais ágil.
No exemplo, a primeira instrução faz a instalação do pacote httpd em sua última versão, o playbook também substitui o arquivo index.html padrão por um arquivo customizado. Essa substituição é realizada pelo módulo de cópia do Ansible: src / dest. Por fim, o playbook garante que o serviço httpd esteja em execução.
O primeiro bloco do playbook contém algumas informações globais como a entrada “hosts: web” indicando que o playbook executará as instruções, descritas na seção “tasks”, apenas nos servidores do grupo web (grupo contido no arquivo de inventário). Para instalar um software no Linux é necessário elevação de privilégio (sudo), a instrução “become: yes” satisfaz esse requisito.
Com o arquivo de inventário e um playbook definidos, é possível executar nossa primeira automação ansible. O Ansible precisa acessar o servidor remoto sem apresentar um prompt de login. Imagina ter que se autenticar manualmente em cada dispositivo que a automação for executada? Deixaria de ser um processo automático, no mínimo.
Para acessar o servidor remoto, é necessário criar uma chave SSH sem senha. Em nossa demonstração, e para simplificar a execução, foi incluída uma entrada no arquivo /etc/hosts. Dessa maneira toda a automação será executada usando SSH no host local.
Figura 1 – Criação da chave SSH sem senha e cópia para o servidor remoto
Ao trabalhar com automação Ansible, torna-se uma boa prática utilizar estrutura de diretórios para organizar suas rotinas e tarefas. Geralmente você poderá usufruir de uma ferramenta de versionamento de código baseada em Git para te auxiliar, como o Github. Veja como ficou a estrutura de diretórios.
Figura 2 – estrutura de diretório
O Ansible também aceita instruções ad hoc para execução de tarefas pontuais. Ele utiliza módulos para realizar essas instruções. Antes de executarmos o playbook, vamos ver como são executadas essas tarefas ad hoc. Um módulo é acionado com o uso da flag “-m <nome_do_módulo>”. Para saber se um host está pronto para receber a execução de um playbook, podemos utilizar o módulo ping. Apesar do nome, não é o mesmo comando ping utilizado em redes de computadores. Esse módulo acessa o servidor remoto utilizando SSH e verifica se o servidor tem os módulos python necessários para execução da automação.
Figura 3 – execução de comandos ad hoc com Ansible
Observe que a saída dos comandos Ansible sempre serão coloridas. Essas cores são representadas por:
- Verde: execução com sucesso
- Amarelo: apresenta um warning
- Vermelho: indica um erro na execução
Execução do playbook
Antes de executarmos o playbook, vamos validar que o Apache não se encontra instalado no sistema.
Figura 4 – conferindo a ausência do Apache no sistema
Não haveria problema em executar o playbook caso o Apache já estivesse instalado e rodando. O Ansible possui a característica de ser idempotente, ou seja, ao ser executado uma ou mil vezes o mesmo script de automação, o pacote não será substituído mil vezes. Apenas ocorrerá alteração se houver uma versão mais recente do pacote httpd ou se não estiver presente no sistema.
Para executar playbooks utilizamos o comando ansible-playbook, seguido de alguns parâmetros. No exemplo, informamos o caminho do arquivo playbook “deploy_httpd.yaml” seguido de “-i inventario” (arquivo contendo nosso inventário de hosts/dispositivos).
Figura 5 – execução do playbook e validação do status do serviço httpd no sistema
Podemos validar o deploy do Apache localmente ou utilizando um navegador web remoto.
Figura 6 – acessando a página web customizada
Esse artigo explorou o projeto Ansible e suas características mais básicas. Algumas funcionalidades foram demonstradas em linha de comando, exemplificando cenários típicos de um setor de TI. Entretanto, o Ansible vai além da linha de comando demonstrada nesse artigo. Há opção para executar o Ansible em um dashboard web (AWX), facilitando a organização e visualização dos cenários de automação. Para aqueles que nunca tiveram contato ou estão iniciando com o Ansible, existe um repositório (Ansible Galaxy) com centenas de playbooks escritos pela comunidade à disposição para uso imediato. Ansible é uma ferramenta de grande valor para o cenário DevSecOps: entrega consistência e permite integrações com outras soluções, independente da infraestrutura utilizada.