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

5 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

    • Da máquina remota, ele faz quando toda a primeira tarefa, a “Gathering Facts”, que pega todas as informações sobre o host e a deixa disponível para o Ansible utilizar.

      Curtir

  2. Pingback: Utilizando o Ansible – parte 4 | giovannireisnunes

Os comentários estão desativados.