Ansible na prática #8  – TAGS

Ansible na prática #8  - TAGS
Por:  Adelmo da Silva – consultor de sistemas
No uso diário dos playbooks no Ansible, na maioria dos casos, iremos criar um playbook com várias tarefas sequenciais. Ou ainda, iremos criar roles (falarei sobre isso nos próximos artigos) para as nossas demandas. Essas tarefas serão, em sua maioria, executadas uma após a outra. Contudo, às vezes, pode ocorrer que apenas duas tarefas sejam necessárias dentro deste playbook. Mas, com um playbook básico isso não será possível por causa do encadeamento delas. Por exemplo, foi aberta uma demanda por parte dos desenvolvedores para instalarmos em um cluster o Apache e os ficheiros do site/sistema. Às vezes o que precisamos é que algumas tarefas rodem de forma independente das outras (anteriores ou posteriores) e que não seja necessário executar todo o playbook. Vamos lá entender essa situação.
 
Nossa Demanda
 
Recebemos uma demanda onde é necessário instalar um servidor Apache em um cluster de 5 servidores. Contudo, precisamos seguir as seguintes etapas:
  1. Criar usuário webadmin:
  2. Criar pastas /var/logs e /home/files-deploy:
  3. Atualizar o Ubuntu Server
  4. Instalar o Apache.
  5. Copiar ficheiros do site do diretório /home/site para a pasta padrão do Apache /var/www/html.
  6. Iniciar o Apache
  7. Habilitar o Apache
  8. Reiniciar o Apache.

Com base nessas etapas, o nosso playbook ficará assim:

– hosts: Webservers

become: yes

  tasks:

  – name: Criar usuário webadmin

    user:

      name: webadmin

      state: present

      shell: /bin/bash

      home: /home/webadmin

      create_home: yes

  – name: Criar pastas /var/logs e /home/files-deploy

    file:

      path: “{{ item }}”

      state: directory

      owner: webadmin

      group: webadmin

      mode: 0755

    with_items:

– /var/logs

      – /home/files-deploy

  – name: Atualizar o Ubuntu Server

apt:

      update_cache: yes

      upgrade: yes

  – name: Instalar o Apache

    apt:

      name: apache2

      state: present

– name: Copiar arquivos do site para a pasta padrão do Apache

    copy:

src: /home/site/*

      dest: /var/www/html

      owner: webadmin

      group: webadmin

  – name: Iniciar o Apache

    service:

      name: apache2

      state: started

      enabled: yes

– name: Reiniciar o Apache

    service:

      name: apache2

      state: restarted

Salvamos com o nome INSTALL-APACHE.YAML.

Todas as etapas se tornaram uma tarefa cada uma. Contudo, as tarefas são sequenciais e não possuem uma marcação ou tag para classificá-las. Vamos melhorar isso para que o nosso playbook se torne mais dinâmico.

TAGs – As etiquetas de tarefas do Ansible

TAGS em playbooks do Ansible são como etiquetas que você pode adicionar às tarefas, blocos, plays, roles e imports. Elas servem para controlar quais partes do playbook serão executadas separadamente quando você quiser.

Para usarmos as tags, devemos especificá-las no arquivo YAML do playbook. Para isso, devemos associar uma tag a uma ou mais tarefas, blocos inteiros de tarefas, um play, um role ou um import.

Da primeira vez executaríamos esta playbook desta forma:

ansible-playbook install-apache.yaml

Caso não ocorram erros, o playbook terminará e o site estará online.

Contudo, sabemos que nada dá certo na primeira tentativa.

Depois da implantação do site, recebemos uma nova demanda dos desenvolvedores para uma actualização dos ficheiros do site. Neste caso, precisamos:

  1. Copiar os novos ficheiros para a pasta do site;
  2. Reiniciar os serviços do Apache para validar a leitura dos novos ficheiros.

É nesse ponto onde entram as tags. Vamos alterar as nossas duas tarefas de Cópia e Restart de serviços para que recebam a tag “ficheirossite”, por exemplo.

– name: Copiar arquivos do site para a pasta padrão do Apache

    copy:

      src: /home/site/*

      dest: /var/www/html

      owner: webadmin

      group: webadmin

    tags:

    – ficheirossite

 

  – name: Reiniciar o Apache

    service:

      name: apache2

      state: restarted

   tags:

    – ficheirossite

Neste ponto, estas duas tarefas estão etiquetadas com a TAG “ficheirossite”, indicando que ao executarmos o ansible-playbook referenciando esta tag, apenas as duas tarefas serão executadas. Mas, para isso vamos incrementar o nosso comando:

ansible-playbook install-apache.yaml –tags ficheirossite

Desta maneira, apenas as duas tarefas serão executadas dentro do playbook, evitando que todo o processo de instalação, actualização etc., sejam feitos, economizando tempo, recursos e banda de Internet. Eis a saída de um playbook com tags:

PLAY [Webservers] ***************************************************************************************************

TASK [Copiar arquivos do site para a pasta padrão do Apache] *********************************************************

changed: [server1]

changed: [server2]

TASK [Reiniciar o Apache] ********************************************************************************************

changed: [server1]

changed: [server2]

PLAY RECAP ***********************************************************************************************************

server1  : ok=2    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

server2  : ok=2    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

 

Feito. Rodamos apenas as duas tarefas marcadas com a tag ficheirossite. Também podemos marcar cada tarefa com uma tag diferente. Por exemplo:

– name: Copiar arquivos do site para a pasta padrão do Apache

    copy:

      src: /home/site/*

      dest: /var/www/html

      owner: webadmin

      group: webadmin

    tags:

         – ficheirossite

 

  – name: Reiniciar o Apache

    service:

      name: apache2

      state: restarted

   tags:

         – restartapache

 

Neste caso, deveremos rodar o comando:

ansible-playbook install-apache.yaml –tags ficheirossite,restartapache

Com isso, teremos a mesma saída que a de antes. Devemos colocar cada tag a ser executada separada por vírgula. Com isso, economizaremos um tempinho para saborear aquele cafezinho delicioso.

Até o próximo artigo, meus amigos.

Partilhar artigo:

Somos um portal de notícias, voltado às tecnologias de informação e inovação tecnológica. Informamos com Rigor, Objectividade e Imparcialidade. Primamos pela qualidade, oferecendo aos nossos leitores, a inclusão tecnológica e a literacia digital

+(244) 930747817

info@pti.ao | redaccao@pti.ao

Mais Lidas

Últimos Artigos

Desenvolvido Por SP Media