Sobes.tech
Junior

Como chamar funções no playbook do Ansible?

sobes.tech IA

Resposta da IA

Os papéis no Ansible podem ser invocados de várias maneiras dentro de um playbook.

  1. Uso da palavra-chave roles ao nível do playbook:

    # playbooks/my_playbook.yml
    - name: Aplicar papéis aos servidores
      hosts: webservers
      become: yes
      roles:
        - role: common  # Invoca o papel 'common'
        - role: nginx   # Invoca o papel 'nginx'
          vars:         # Passa variáveis para o papel
            nginx_port: 8080
        - another_role # Forma abreviada de invocar
    

    Este método é usado para invocar papéis que serão executados sequencialmente em todos os hosts definidos na secção hosts.

  2. Uso do módulo include_role na lista de tarefas:

    # playbooks/my_playbook.yml
    - name: Aplicar papéis com condições
      hosts: appservers
      tasks:
        - name: Incluir o papel de base de dados (apenas para dev)
          include_role:
            name: database
          when: env == 'dev' # Invoca o papel condicionalmente
    
        - name: Incluir o papel da aplicação
          include_role:
            name: app
          vars:
            app_version: 1.2.0 # Passa variáveis para o papel
    

    O módulo include_role executa o papel como se fosse uma lista de tarefas incluída no play atual. Permite usar condições (when) e ciclos (loop) para controlar a execução do papel.

  3. Uso do módulo import_role na lista de tarefas:

    # playbooks/my_playbook.yml
    - name: Importar o papel da aplicação
      hosts: appservers
      tasks:
        - name: Importar o papel da aplicação para todos os hosts
          import_role:
            name: app
          vars:
            app_config_file: /etc/app/config.conf # Passa variáveis
    

    O módulo import_role é processado na fase de análise do playbook, antes da sua execução real. Isso significa que todas as diretivas, como when, serão aplicadas a todas as tarefas dentro do papel, e não apenas à invocação do papel. As variáveis passadas via vars estarão disponíveis dentro do papel.

A diferença chave entre include_role e import_role reside no momento de processamento: import_role é processado de forma estática na fase de análise, enquanto que include_role é processado dinamicamente durante a execução do playbook. Isto afeta a capacidade de usar condições e ciclos:

Função include_role import_role
Processamento Dinâmico Estático
Uso de when para invocar Sim Não
Uso de loop para invocar Sim Não
Capacidade de usar variáveis definidas anteriormente no play Sim Não

A escolha entre estes métodos depende da flexibilidade requerida e do momento de processamento. Para inclusão simples de papéis, geralmente basta a palavra-chave roles ou import_role. Para cenários mais complexos com condições e ciclos, usa-se include_role.