Un rôle Ansible, c'est quoi ?

Copier l'URL

Les rôles Ansible® sont des unités autonomes et portables de la technologie d'automatisation Ansible, dont l'utilisation est recommandée pour regrouper des tâches et les variables, fichiers, gestionnaires et autres ressources connexes dans une structure de fichiers connue. Tandis que les tâches d'automatisation ne peuvent être écrites que dans un playbook Ansible, les rôles Ansible permettent de regrouper des contenus d'automatisation et de les exécuter dans un ou plusieurs plays, de les réutiliser dans différents playbooks et de les partager avec d'autres utilisateurs via des collections.

Les rôles Ansible sont écrits en YAML, un langage de sérialisation des données lisible par l'utilisateur qui sert à coder des fichiers de configuration. Lorsqu'un rôle est ajouté dans une tâche ou un play, Ansible recherche un fichier main.yml dans au moins un des huit répertoires de rôles standard. Ces répertoires, détaillés ci-dessous, comprennent les tâches (tasks), les gestionnaires (handlers), les modules (library), les valeurs par défaut (defaults), les variables (vars), les fichiers (files), les modèles (templates) et les métadonnées (meta) d'un rôle.

roles/
    common/               # this hierarchy represents a "role"
        tasks/            #
            main.yml      #  <-- tasks file can include smaller files if warranted
        handlers/         #
            main.yml      #  <-- handlers file
        templates/        #  <-- files for use with the template resource
            ntp.conf.j2   #  <------- templates end in .j2
        files/            #
            bar.txt       #  <-- files for use with the copy resource
            foo.sh        #  <-- script files for use with the script resource
        vars/             #
            main.yml      #  <-- variables associated with this role
        defaults/         #
            main.yml      #  <-- default lower priority variables for this role
        meta/             #
            main.yml      #  <-- role dependencies
        library/          # roles can also include custom modules
        module_utils/     # roles can also include custom module_utils
        lookup_plugins/   # or other types of plugins, like lookup in this case
    webtier/              # same kind of structure as "common" was above, done for the webtier role
    monitoring/           # ""
    fooapp/               # ""

Pour utiliser un rôle Ansible, il faut l'appeler dans un playbook soit en le listant avec l'option roles, soit en l'ajoutant dans la section des tâches des rôles à l'aide de la commande include_role ou import_role. Les rôles listés avec l'option roles ou ajoutés à l'aide de la commande import_role sont exécutés avant les autres tâches du play, tandis que les rôles ajoutés à l'aide de la commande include_role sont exécutés dans l'ordre dans lequel ils ont été définis dans la liste de tâches.

En savoir plus sur les rôles Ansible et leur utilisation

Les rôles et les playbooks Ansible sont des outils d'organisation et d'exécution des tâches d'automatisation qui n'ont pas la même utilité. Selon les cas d'utilisation et leur niveau de maîtrise d'Ansible, les équipes pourront choisir de créer des rôles Ansible ou d'écrire toutes les tâches dans un playbook Ansible.

La plupart des équipes de développement de l'automatisation et d'administration système commencent à créer des contenus d'automatisation à l'aide de playbooks individuels. Un playbook est une liste de tâches d'automatisation qui s'exécutent pour un inventaire donné. Les tâches peuvent être organisées dans un play, qui est un groupe d'une ou plusieurs tâches associées à un hôte spécifique et exécutées dans l'ordre. Un playbook peut contenir un ou plusieurs plays, ce qui offre plus de flexibilité pour exécuter les processus automatisés avec Ansible dans un fichier unique.

Si l'utilisation de playbooks est une méthode efficace pour automatiser les processus avec Ansible, l'écriture de l'ensemble des tâches dans un playbook n'est pas toujours la meilleure approche. Lorsque le champ d'application et les variables des instances sont complexes et que la réutilisation est utile, il peut être plus judicieux de créer la plupart des contenus d'automatisation dans des rôles Ansible qui seront ensuite appelés dans des playbooks.

L'exemple suivant illustre l'utilisation du rôle linux-systemr-roles.timesync dans un playbook. Dans cette instance, plus de quatre tâches seraient nécessaires pour effectuer ce que fait un seul rôle.

- name: Manage timesync with 3 servers
  hosts: targets
  vars:
     timesync_ntp_servers:
        - hostname: foo.example.com
          iburst: true
        - hostname: bar.example.com
          iburst: true
        - hostname: baz.example.com
          iburst: true
  roles:
     - linux-system-roles.timesync

L'utilisation de rôles Ansible offre des avantages que l'écriture de tous les contenus d'automatisation dans un seul playbook n'apporte pas.

Réutilisation et partage

Les rôles sont conçus en tant qu'unités d'automatisation réutilisables. Puisqu'ils permettent de séparer des groupes logiques de tâches d'automatisation du contexte d'un play ou playbook unique, les rôles peuvent être réutilisés dans plusieurs plays ou différents playbooks et partagés en vue de leur réutilisation dans d'autres projets.

Modularité

Les rôles favorisent une approche modulaire de l'automatisation, où chaque rôle est responsable d'une partie spécifique de la fonctionnalité. Cette approche facilite par ailleurs la compréhension, la gestion et la correction du code d'automatisation.

Organisation

Les rôles Ansible permettent d'organiser les tâches, les modèles, les fichiers et les variables de manière structurée. Cette structure facilite la gestion de configurations d'automatisation complexes, puisque tout ce qui se rapporte à un rôle donné est contenu dans son répertoire.

Paramétrage

Les rôles permettent de définir des variables par défaut qui peuvent être remplacées lorsque le rôle est utilisé dans un playbook Ansible. Il est ainsi plus facile d'adapter le comportement d'un rôle à différents environnements ou cas d'utilisation sans modifier le rôle lui-même.

Gestion des versions et des dépendances

Il est possible de versionner des rôles et d'indiquer leurs dépendances dans un fichier meta/main.yml au sein d'un rôle. Cette fonctionnalité permet de gérer les versions et les dépendances de manière explicite, et ainsi d'assurer la stabilité et la cohérence dans différents environnements.

Test

La structure des rôles facilite l'application des méthodes de test. Il est possible de créer des tests propres à un rôle afin de s'assurer qu'il se comporte comme prévu avant de l'intégrer à de plus longs playbooks.

Simplicité

Dans le cadre de projets plus volumineux ou complexes, les rôles simplifient l'utilisation des playbooks Ansible. Plutôt que d'avoir un long playbook détaillant les tâches, gestionnaires et modèles, il est possible d'écrire des playbooks bien plus courts que les utilisateurs pourront facilement lire et comprendre. Cette approche facilite aussi l'identification des rôles pouvant être réutilisés dans d'autres projets, ce qui accélère l'écriture des contenus d'automatisation et simplifie les workflows. 

Pour créer un rôle, vous pouvez utiliser la commande role_name init du rôle ansible-galaxy. Cette opération créera un répertoire qui suit la structure standard des répertoires de rôles. Une fois que vous avez vérifié le répertoire, vous pouvez définir des tâches, des variables par défaut et d'autres composants. Bien qu'elle ne soit pas nécessaire au fonctionnement du rôle, il vous est possible d'ajouter de la documentation dans un fichier README.md et dans le fichier meta/main.yml.

La création d'un rôle peut nécessiter une maîtrise plus approfondie d'Ansible et peut s'avérer difficile pour les équipes qui apprennent encore à créer des contenus automatisés. Pour créer des contenus plus facilement, quel que soit leur niveau d'expérience, les équipes d'automatisation peuvent s'appuyer sur Red Hat® Ansible Lightspeed with IBM watsonx Code Assistant, un service d'IA générative qui fournit des recommandations de code basées sur les meilleures pratiques d'Ansible. Avec cet outil, vous pouvez décrire le processus automatisé à créer à l'aide d'invites en langage naturel et vous recevez des suggestions de contenus à une ou plusieurs tâches. Les tâches générées peuvent ensuite être incluses dans un rôle ou un playbook Ansible.

Ansible Lightspeed with watsonx Code Assistant facilite la création et la gestion du code Ansible, et en améliore la qualité, ce qui augmente la productivité et accélère l'adoption. 

Découvrir des ressources pédagogiques pour prendre en main la solution Ansible Automation Platform

La facilité de partage des rôles Ansible vous permet d'utiliser des rôles fiables et testés pour automatiser vos processus. Vous pouvez partager ces rôles à l'aide des référentiels suivants.

  • Ansible Galaxy : référentiel gratuit qui permet de partager des rôles et d'autres contenus Ansible avec la communauté Ansible à plus grande échelle. Les rôles peuvent y être chargés via une interface en ligne de commande (CLI), tandis que les collections peuvent être partagées via l'interface web. Étant donné qu'Ansible Galaxy est un site communautaire, les contenus proposés ne sont pas vérifiés, certifiés, ni pris en charge par Red Hat.
  • Ansible Automation Hub : référentiel centralisé dans lequel il est possible de chercher, télécharger et partager des collections de contenus Ansible Content Collections. Inclus dans la souscription pour Red Hat Ansible Automation Platform. Hébergé par Red Hat, ce référentiel regroupe des contenus certifiés et validés par Red Hat et nos partenaires éditeurs de logiciels indépendants.
  • Référentiel Automation Hub privé : référentiel sur site qui permet aux entreprises de gérer, partager et sélectionner des contenus en interne, uniquement pour leurs équipes. Les rôles et les contenus d'automatisation peuvent être partagés avec toutes les équipes de l'entreprise, ce qui simplifie les workflows et accélère l'automatisation des processus. 

La solution Red Hat Ansible Automation Platform est une plateforme unifiée conçue pour aider les entreprises à accélérer leurs processus, les orchestrer et innover grâce à l'automatisation. Avec une souscription Red Hat, vous avez accès aux collections de contenus certifiés Red Hat et aux contenus validés pour Ansible, disponibles dans le référentiel Ansible Automation Hub.

Également inclus dans chaque souscription, le service Red Hat Ansible Lightspeed with IBM watsonx Code Assistant facilite l'écriture et l'amélioration des tâches incluses dans les rôles Ansible pour aider les équipes à créer efficacement des contenus d'automatisation. Entièrement intégré à Visual Studio Code, Ansible Lightspeed répond aux besoins des équipes de développement de l'automatisation, quels qu'ils soient. Celles-ci peuvent créer des rôles et des playbooks Ansible en adoptant les meilleures pratiques, sans avoir à passer d'un environnement de développement à un autre.

Ansible Lightspeed comprend également des fonctionnalités de mise en correspondance des sources de contenus, qui vous permettent de vérifier les données d'entraînement source servant de base aux suggestions et de prendre de meilleures décisions lors de la création de rôles pour les utilisateurs. Ansible Lightspeed exploite des modèles entraînés sur des milliers de rôles issus de la communauté Ansible et de points de données fournis par Red Hat. Cet outil permet donc de créer du code Ansible et de l'améliorer de manière fiable et transparente, afin de répondre aux besoins de l'entreprise et d'accélérer l'adoption.

Découvrir pourquoi Red Hat est un partenaire de choix en matière d'automatisation
Hub

Le blog officiel de Red Hat

Découvrez les dernières informations concernant notre écosystème de clients, partenaires et communautés.

Tous les essais de produits Red Hat

Profitez de nos essais gratuits de produits Red Hat pour renforcer votre expérience pratique, préparer une certification ou évaluer l'adéquation d'un produit avec les besoins de votre entreprise.

En savoir plus

Un module Ansible, c'est quoi ?

Un module Ansible® est un programme qui exécute des opérations sur une machine locale, une API ou un hôte distant.

Un rulebook Ansible, c'est quoi ?

Un rulebook Ansible® est un ensemble de règles que suit Event-Driven Ansible pour effectuer des actions dans un modèle d'automatisation orientée événements.

Le CloudOps, qu'est-ce que c'est ?

Le CloudOps (Cloud Operations) combine les meilleures pratiques d'exploitation informatique pour la gestion des environnements cloud.

Automatisation et gestion : ressources recommandées

Produit recommandé

Articles associés