Sobes.tech
Junior

Comment appeler les rôles dans un playbook Ansible?

sobes.tech IA

Réponse de l'IA

Les rôles dans Ansible peuvent être invoqués de plusieurs façons dans un playbook.

  1. Utilisation du mot-clé roles au niveau du playbook :

    # playbooks/my_playbook.yml
    - name: Appliquer des rôles aux serveurs
      hosts: webservers
      become: yes
      roles:
        - role: common  # Appel du rôle 'common'
        - role: nginx   # Appel du rôle 'nginx'
          vars:         # Passage de variables au rôle
            nginx_port: 8080
        - another_role # Forme abrégée d'appel
    

    Cette méthode est utilisée pour invoquer des rôles qui seront exécutés séquentiellement pour tous les hôtes définis dans la section hosts.

  2. Utilisation du module include_role dans la liste des tâches :

    # playbooks/my_playbook.yml
    - name: Appliquer des rôles avec conditions
      hosts: appservers
      tasks:
        - name: Inclure le rôle de la base de données (seulement pour dev)
          include_role:
            name: database
          when: env == 'dev' # Appel du rôle conditionnel
    
        - name: Inclure le rôle de l'application
          include_role:
            name: app
          vars:
            app_version: 1.2.0 # Passage de variables au rôle
    

    Le module include_role exécute le rôle comme s'il s'agissait d'une liste de tâches incluse dans le play actuel. Il permet d'utiliser des conditions (when) et des boucles (loop) pour contrôler l'exécution du rôle.

  3. Utilisation du module import_role dans la liste des tâches :

    # playbooks/my_playbook.yml
    - name: Importer le rôle de l'application
      hosts: appservers
      tasks:
        - name: Importer le rôle de l'application pour tous les hôtes
          import_role:
            name: app
          vars:
            app_config_file: /etc/app/config.conf # Passage de variables
    

    Le module import_role est traité lors de l'analyse du playbook, avant son exécution effective. Cela signifie que toutes les directives, telles que when, seront appliquées à toutes les tâches à l'intérieur du rôle, et non seulement à l'appel du rôle. Les variables passées via vars seront accessibles à l'intérieur du rôle.

La différence clé entre include_role et import_role réside dans le moment de traitement : import_role est traité statiquement lors de l'analyse, tandis que include_role est traité dynamiquement lors de l'exécution du playbook. Cela influence la possibilité d'utiliser des conditions et des boucles :

Fonction include_role import_role
Traitement Dynamique Statique
Utilisation de when pour l'invocation Oui Non
Utilisation de loop pour l'invocation Oui Non
Capacité d'utiliser des variables définies précédemment dans le play Oui Non

Le choix entre ces méthodes dépend de la flexibilité requise et du moment de traitement. Pour une inclusion simple de rôles, la clé roles ou import_role suffit généralement. Pour des scénarios plus complexes avec conditions et boucles, include_role est utilisé.