Início » DevOPS » Ansible: Elimine as tarefas chatas e repetitivas do seu dia-a-dia

Ansible: Elimine as tarefas chatas e repetitivas do seu dia-a-dia

O Ansible é um mecanismo de automação de TI radicalmente simples que automatiza o provisionamento em nuvem, o gerenciamento de configuração, a implantação de aplicativos, a orquestração intra-serviços e muitas outras necessidades de TI.

Projetado para implementações de várias camadas desde o começo, o Ansible modela sua infraestrutura de TI descrevendo como todos os seus sistemas se inter-relacionam, ao invés de apenas gerenciar um sistema por vez.

Ansible vs Puppet e Chef

Uma razão  para escolher o Ansible é a sua capacidade de manter uma arquitetura de servidor e o design totalmente imutáveis.

Ele não usa agentes e nenhuma infraestrutura de segurança personalizada adicional, portanto é fácil de implantar – e, mais importante, usa uma linguagem muito simples (YAML, na forma de Ansible Playbooks) que permite descrever seus trabalhos de automação de uma forma que se aproxima da língua inglesa.

Vamos dar uma olhada em algumas características interessantes do Ansible:

Utilizar a Idempotência

Idempotência é a propriedade de certas operações que podem ser executadas várias vezes sem alterar o resultado da aplicação inicial. Este conceito está presente na maioria dos módulos Ansible: você especifica o estado final desejado e Ansible decide se a tarefa deve ser executada. Esse princípio não é aplicado por padrão ao módulo de comando. Por padrão, se você tiver a tarefa abaixo em seu playbook, ela sempre será executada:

– command: /usr/bin/create-database.sh

A fim de alcançar idempotência, você poderia usar o atributo create. Quando estiver presente, o Ansible executará somente a tarefa de comando se o arquivo especificado pelo padrão não existir. Como alternativa, você pode usar remove, que só executará a tarefa se o arquivo especificado existir.

– command: /usr/bin/create-database.sh create = /caminho/da/database

Tenha sempre em mente que o Ansible tem muitos módulos e as operações mais comuns não requerem o uso do módulo de comando. Por exemplo, existem módulos para criar sistemas de arquivos, modificar os iptables e gerenciar entradas cron. Todos esses módulos são idempotentes por padrão, portanto, você deve preferi-los.

Coletar informações

Se você já usou o Ansible,  já pode perceber que a primeira coisa que Ansible faz quando executa um playbook é algo como isto:

– TASK [setup] ********************************************** *********************

-Ok: [servername]

Isso acontece porque Ansible invoca a configuração do módulo especial antes de executar a primeira tarefa. O módulo de configuração se conecta ao host e recolhe fatos para todos os tipos de detalhes: endereço IP, espaço em disco, arquitetura da CPU, memória disponível e muito mais. Pode ser útil invocar este módulo manualmente como uma maneira rápida de coletar informações sobre seus hosts. Para isso basta executar o comando abaixo:

$ ansible localhost -m setup
localhost | SUCCESS => {
“ansible_facts”: {
“ansible_all_ipv4_addresses”: [
“10.0.0.100”,
“192.168.100.100”
],
MANY more fcts)

Listar todas as tarefas de um playbook

Quer lembrar o que um playbook faz? Execute ansible-playbook usando o sinalizador –list-tasks e o Ansible listará todas as suas tarefas:

$ ansible-playbook install-jenkins.yml –list-tasks

Utilizar o ansible-vault para armazenar informações confidenciais

Se uma de suas tarefas exigir informações confidenciais (digamos o usuário e a senha do banco de dados), é uma boa prática manter essas informações criptografadas, em vez de armazená-las em texto simples.
O Ansible é fornecido com uma ferramenta de linha de comando chamada ansible-vault, que permite criar e gerenciar arquivos criptografados. Desta forma, você pode confirmar o arquivo criptografado para o controle de origem e somente os usuários com a senha de descriptografia poderão lê-lo.

Usar with_items para agilizar mais ainda

Quando você usa a cláusula with_items, o Ansible criará uma variável chamada {{item}} contendo o valor para a iteração atual. Alguns módulos lidar com coleções de itens muito bem e são realmente mais rápido do que executar a mesma tarefa várias vezes com parâmetros diferentes.

# Installing all packages with one task (faster)
– name: install required packages using the apt module
apt: package={{ item }} update_cache=yes
sudo: True
with_items:
– git
– memcacv0hed
– nginx

Realizar correções de segurança

O Ansible é um sistema de gerenciamento de configuração incrivelmente poderoso e robusto. Minha característica favorita? Sua simplicidade. Isso pode ser visto pelo quão fácil é para patch servidores vulneráveis.

O playbook a seguir atualiza as variantes de Linux e Debian RedHat. Ele irá corrigir e reiniciar 25% dos servidores de cada vez até que todos os hosts definidos no arquivo de inventário sejam atualizados.

– hosts: all
    gather_facts: yes
    remote_user: craun
serial: “25%”
sudo: yes
tasks:
      – name: Update OpenSSL and OpenSSH (Debian)
          apt: name={{ item }}
                  state=latest
update_cache=yes
         -with_items:
               – openssl
– openssh-client
– openssh-server
         when: ansible_os_family == “Debian”

– name: Update OpenSSL and OpenSSH (RedHat)
          yum: name={{ item }}
               state=latest
               update_cache=yes
         with_items:
               – openssl
– openssh-client
– openssh-server
         when: ansible_os_family == “RedHat”
      post_tasks:
         – name: Reboot servers
         command: reboot

Automatizar mudanças

Imagine um projeto para implementar e remover uma solução de monitoramento simultaneamente. Por exemplo: remover o Nagios e substituí-lo pelo Zabbix ou o Server Density. Isso torna-se incrivelmente fácil com a ajuda do Ansible.

Uma das coisas mais positivas sobre Ansible é que é muito fácil escrever playbooks, e ainda ter sempre espaço para melhorá-los. U Você pode continuamente revisar e fazer atualizações usando conhecimento recém-descobertos e recursos adicionais que sejam lançados em versões mais recentes do Ansible.

Todo o resto

O Ansible tem muitas outras funcionalidades interessantes e casos de uso além dos mencionados artigo tais como: o provisionamento de infraestrutura em nuvem, implantação de código de aplicativo, gerenciamento de chaves SSH, configuração de bancos de dados e configuração de servidores web.

Já está usando um produto como Puppet ou SaltStack? Você ainda pode encontrar benefícios ao usar o Ansible ao lado de outras ferramentas de gerenciamento de configuração. Ter um agente que precisa ser reiniciado? Ótimo! Ansible é agentless, então você poderia executar algo como:

– ansible -i inventories/servers all -m service -a “name=salt-minion state=restarted”

Se estas razões já lhe convenceram a dar uma chance ao Ansible e você se interessou em saber mais sobre ele, dê uma olhada na página de nosso Curso a Distância de Ansible.