Sobes.tech
Junior

¿Cómo llamar a los roles en un playbook de Ansible?

sobes.tech AI

Respuesta de la IA

Los roles en Ansible se pueden invocar de varias maneras dentro de un playbook.

  1. Uso de la palabra clave roles a nivel de playbook:

    # playbooks/my_playbook.yml
    - name: Aplicar roles a los servidores
      hosts: webservers
      become: yes
      roles:
        - role: common  # Invoca el role 'common'
        - role: nginx   # Invoca el role 'nginx'
          vars:         # Pasa variables al role
            nginx_port: 8080
        - another_role # Forma abreviada de invocar
    

    Este método se usa para invocar roles que se ejecutarán secuencialmente en todos los hosts definidos en la sección hosts.

  2. Uso del módulo include_role en la lista de tareas:

    # playbooks/my_playbook.yml
    - name: Aplicar roles con condiciones
      hosts: appservers
      tasks:
        - name: Incluir el role de base de datos (solo para dev)
          include_role:
            name: database
          when: env == 'dev' # Invoca el role condicionalmente
    
        - name: Incluir el role de la aplicación
          include_role:
            name: app
          vars:
            app_version: 1.2.0 # Pasa variables al role
    

    El módulo include_role ejecuta el role como si fuera una lista de tareas incluida en el play actual. Permite usar condiciones (when) y bucles (loop) para controlar la ejecución del role.

  3. Uso del módulo import_role en la lista de tareas:

    # playbooks/my_playbook.yml
    - name: Importar el role de la aplicación
      hosts: appservers
      tasks:
        - name: Importar el role de la aplicación para todos los hosts
          import_role:
            name: app
          vars:
            app_config_file: /etc/app/config.conf # Pasa variables
    

    El módulo import_role se procesa en la fase de análisis del playbook, antes de su ejecución real. Esto significa que todas las directivas, como when, se aplicarán a todas las tareas dentro del role, no solo a la invocación del role. Las variables pasadas mediante vars estarán disponibles dentro del role.

La diferencia clave entre include_role y import_role radica en el momento de procesamiento: import_role se procesa de forma estática en la fase de análisis, mientras que include_role se procesa dinámicamente durante la ejecución del playbook. Esto afecta la capacidad de usar condiciones y bucles:

Función include_role import_role
Procesamiento Dinámico Estático
Uso de when para invocar No
Uso de loop para invocar No
Capacidad de usar variables definidas previamente en el play No

La elección entre estos métodos depende de la flexibilidad requerida y del momento de procesamiento. Para incluir roles de forma sencilla, generalmente basta con la palabra clave roles o import_role. Para escenarios más complejos con condiciones y bucles, se usa include_role.