Utilizando o Ansible – parte 3

ansible-3_abertura.png

Na parte anterior foram utilizados alguns módulos para realizar tarefas diretamente através do Ansible via linha de comando, porém a execução em sequência de cada um é pouco prática, por mais que até seja possível agrupar todos eles dentro de um único script para ajudar um pouco!

Mas antes de começar a “adaptar” a ferramenta é bom saber que o Ansible tem sua própria maneira de executar diversas tarefas de uma só vez, os playbooks.

Antes de começar

Mas para não perder o hábito…

$ cd ~/Vagrant/ansible
$ git pull
$ git checkout parte-3
$ vagrant up --provision
...
$ vagrant ssh
$ source ~/ansible_env/bin/activate

Para cuidar da atualização do repositório, iniciar a máquina virtual e, claro, configurar o ambiente da ferramenta. 🙂

Playbooks

De acordo com a documentação do Ansible eles são a linguagem utilizada para a configuração, instalação e orquestração e descrevem um conjunto de regras e de procedimentos a serem aplicados aos nós. Um playbook consiste de um arquivos no formato YAML que lista não só as tarefas — tasks — a serem executadas como também a relação dos nós afetados, condições a serem cumpridas e até valores para algumas variáveis utilizadas.

Playbook de exemplo

Aproveitando para consolidar algumas tarefas já executadas de maneira individual para a criar um playbook:

Este playbook será executado no grupo localhost, usando a conexão local e também  informando que será utilizado um outro usuário e que ele deverá ser o root. Dos módulos utilizados nele dois foram apresentados na segunda parte, apt e service, e é possível observar como os parâmetros requeridos por eles foram inseridos dentro do YAML.

Os outros dois módulos são o copy, cuja função é copiar arquivos locais (“src=”) para diretórios específicos (“dest=”) dos nós remotos, e template, com função e parâmetros parecidos com o copy porém realizando a substituição de variáveis dentro do arquivo de origem por valores específicos de cada nó ou definidos no próprio playbook (sim, um copia os arquivos enquanto outro permite personalizá-los a partir de um modelo).

O arquivo de template utilizado para a página HTML é este aqui:

Ele é uma adaptação do utilizado no cookbook (da parte 2 do “Usando o Chef”), aliás o arquivo gerado é idêntico e a diferença está na grafia do nomes das variáveis a serem substituídas — só para recordar o Chef trabalha com arquivos em embedded ruby enquanto que o Ansible se utiliza do Jinja2.

As variáveis utilizadas aqui serão populadas em uma das primeiras etapas de execução do playbook — a Gathering Facts — e para saber o que mais há por lá, utilize o módulo setup para listá-las:

$ ansible localhost -c local -i ~/hosts -m setup

O resultado será um JSON contendo quase tudo o que é possível saber sobre o host remoto.

Executando o playbook

A execução do playbook é feita através do comando “ansible-playbook” sendo necessário informar o arquivo de inventário e, claro, o playbook:

$ ansible-playbook -i hosts /vagrant/configure_http.yaml
PLAY [localhost] ****************************************************

TASK [Gathering Facts] **********************************************
ok: [127.0.0.1]

TASK [Instala o Nginx] **********************************************
changed: [127.0.0.1]

TASK [Interrompe o Nginx] *******************************************
changed: [127.0.0.1]

TASK [Monta a página principal] *************************************
changed: [127.0.0.1]

TASK [Copia a imagem] ***********************************************
changed: [127.0.0.1]

TASK [Inicia o Nginx] ***********************************************
changed: [127.0.0.1]

PLAY RECAP **********************************************************
127.0.0.1                  : ok=6  changed=5  unreachable=0  failed=0

Cada tarefa executada será listada e no final será exibido um sumário¹ por nó e se tudo der certo ao acessar http://127.0.0.1:8000 — o Vagrantfile foi alterado para redirecionar a porta para a máquina virtual — será possível ver:

ansible-3_html

(¹) Removi o Nginx foi removido da máquina virtual antes da execução do playbook então, se aparecer um “changed=4”, não se assuste… 🙂

Uso de variáveis no playbook

ansible-3_vars

Observando nas linhas 20, 21, 27 e 28 do arquivo original do playbook é possível notar a repetição dos valores “/vagrant” e “/var/www/html”. Isto pode ser evitado com a utilização de variáveis específicas dentro do próprio playbook; para tal crie um bloco chamado “vars” antes de “tasks” e acrescente nele as variáveis desejadas, neste caso orig e dest, e utilize-as dentro das tarefas colocando-as entre colchetes chaves duplos “{{ … }}”.

O arquivo com estas modificações também está no repositório Git sob o nome de “configure_http_vars.yaml”, assim não é preciso replicar aqui.

Fim desta parte

Pronto, agora é possível, através dos playbooks, executar um conjunto de tarefas de forma bem mais simplificada! Na próxima parte será a vez de condicionar a execução de determinadas tarefas e também utilizar um tipo específico de tarefa, os handlers.

Até!

Anúncios

4 comentários sobre “Utilizando o Ansible – parte 3

  1. Uma pergunta no html onde tem {{ ansible_default_ipv4[‘address’] }, ele irá substituir pelo ip de cada máquina cadastrada no hosts ou pelo ip do servidor Ansible?

    Se for pelo das máquinas cadastradas no hosts fica muito barbada.

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s