ANSIBLE SERIES: h.t.wrt* … DYNAMIC: includes (roles, tasks, vars)

Antes de prosseguir: PARE, RETORNE E LEIA a primeira parte sobre reuso de playbooks e seus elementos básicos, sendo aquela a forma estática. A seguir, a parte 02 ensinando como fazê-lo de maneira dinâmica. Bons estudos! 😎

PARTE 01 https://automatesmachines.org/2022/02/26/ansible-series-h-t-wrt-static-imports-playbooks-files-roles/

REUSANDO FILES E ROLES

Citar ou incluir roles, files e variáveis dentro de um playbook, automaticamente os torna parte deste, dinamicamente falando. Isso quer dizer que o Ansible os processa à medida que a execução se desenrola, ou seja, tarefas que foram incluídas podem sim ser afetadas por outras anteriores e que estão um nível acima naquele mesmo playbook. O que as torna muito semelhantes aos manipuladores (handlers), pois assim elas podem ou não serem executadas/acionadas, dependendo é claro do resultado das outras tarefas “irmãs”, sendo que as últimas precisam sempre estar precursoras às primeiras.

Sabendo disso, a principal vantagem de usar instruções do tipo include_* diz respeito aos loops. Quando combinamos laços de repetição e inclusões (loops + includes), as tarefas e funções “herdadas” de outrem serão executadas pelo menos uma vez para cada item no loop.

Os nomes de arquivo para funções, tarefas e vars incluídos são modelados antes de ocorrer a inclusão em si. Também é possível passar variáveis dentro de inclusões.

REUSANDO TAREFAS COMO SE FOSSEM MANIPULADORES

Bastante similar ao exemplo equivalente da primeira parte (estática), temos o seguinte arquivo:

# restarts.yml
- name: Restart apache
  ansible.builtin.service:
    name: apache
    state: restarted

- name: Restart mysql
  ansible.builtin.service:
    name: mysql
    state: restarted

O que difere ambos é a lógica apresentada, pois aqui as inclusões são executadas em tempo real, portanto, o nome da inclusão existe durante a reprodução, enquanto que o restante não. Ou seja, as tarefas incluídas apenas aguardam, até o momento em que a própria inclusão sofra um gatilho (seja acionada) Por exemplo:

- name: Trigger an included (dynamic) handler
  hosts: localhost
  handlers:
    - name: Restart services
      include_tasks: restarts.yml
  tasks:
    - command: "true"
      notify: Restart services

IMPORTS versus INCLUDES: COMPARANDO tabela

Cada abordagem para reutilizar artefatos distribuídos tem vantagens e limitações. Você pode escolher a reutilização dinâmica para alguns playbooks e a reutilização estática para outros. Embora você possa usá-las ao mesmo tempo em um único playbook, é melhor escolher apenas uma por vez. Misturar reutilização estática e dinâmica pode introduzir bugs difíceis de diagnosticar em seus manuais. Esta tabela resume as principais diferenças para que você possa escolher a melhor abordagem para cada manual que criar.

>_ REFERÊNCIAS:

https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse.html

Deixe uma resposta

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.