Você está na página 1de 5

Ansible: Elimine as tarefas chatas e repetitivas

do seu dia-a-dia
• Publicado por E-cogni Treinamentos
• Categorias DevOps
• Data 11/02/2017
• Comentários 0 comentário

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
view raw gistfile1.txt hosted with ❤ by GitHub
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


view raw gistfile1.txt hosted with ❤ by GitHub
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]
view raw gistfile1.txt hosted with ❤ by GitHub
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 facts)

}
view raw gistfile1.txt hosted with ❤ by GitHub

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


view raw gistfile1.txt hosted with ❤ by GitHub

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
- memcached

- nginx
view raw gistfile1.txt hosted with ❤ by GitHub
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
view raw gistfile1.txt hosted with ❤ by GitHub

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"


view raw gistfile1.txt hosted with ❤ by GitHub
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 treinamento ou faça o contato com um de nossos
executivos de vendas.

Você também pode gostar