Accueil » Cours » Administration système » Introduction à Ansible

Objectif du cours

Ce cours a pour objectif d’introduire Ansible, un outil d’automatisation open-source permettant de gérer la configuration et l’administration des infrastructures informatiques. Vous découvrirez les concepts fondamentaux d’Ansible, comment l’installer et l’utiliser pour automatiser des tâches courantes, ainsi que les bonnes pratiques à suivre.

Plan du cours

  1. Qu’est-ce qu’Ansible ?

    • Définition : Ansible est un outil d’automatisation open-source utilisé pour la configuration et la gestion des infrastructures IT. Il permet de gérer un grand nombre de serveurs de manière centralisée en utilisant des scripts simples.

    • Gestion via YAML : Ansible utilise le langage YAML pour décrire les tâches automatisées sous forme de playbooks. Cela rend les playbooks simples à lire et à écrire, même pour des personnes sans expérience de programmation.

    • Simplicité et flexibilité : Ansible est populaire pour sa simplicité. Il est agentless, ce qui signifie qu’il n’est pas nécessaire d’installer un agent sur chaque nœud à gérer, réduisant ainsi la complexité et les risques de sécurité.

    • Idempotence : Les tâches dans Ansible sont idempotentes, ce qui signifie que leur exécution plusieurs fois produit le même résultat sans effet négatif. Cela est essentiel pour garantir la stabilité des systèmes.

    • Communauté et support : Ansible bénéficie d’une large communauté qui fournit des modules, des extensions et une assistance, facilitant ainsi l’intégration et l’utilisation de l’outil.

  2. Installation d’Ansible

    • Installation sur différentes plateformes : Ansible peut être installé sur Linux via les gestionnaires de paquets comme apt ou yum. Sur macOS, Homebrew est couramment utilisé, tandis que sur Windows, Ansible fonctionne via WSL (Windows Subsystem for Linux) ou en utilisant des environnements de conteneurisation.

    • Pré-requis : Ansible nécessite Python, qui est généralement préinstallé sur la plupart des systèmes Linux et macOS. Il est également important de gérer les permissions pour permettre une connexion sans mot de passe aux nœuds via SSH.

    • Configuration initiale : Une fois installé, il est nécessaire de vérifier l’installation avec la commande $ ansible --version. La configuration des clés SSH est cruciale pour permettre une connexion sécurisée aux nœuds.

  3. Inventaire Ansible

    • Définition de l’inventaire : L’inventaire est un fichier texte ou un script qui liste les hôtes sur lesquels Ansible doit exécuter des tâches. Il peut s’agir d’une simple liste de serveurs ou d’une structure plus complexe avec des groupes d’hôtes.

    • Format de l’inventaire : Par défaut, l’inventaire est défini dans /etc/ansible/hosts, mais vous pouvez aussi définir des inventaires personnalisés. Le fichier peut être écrit en format INI ou YAML, et il est possible de créer des groupes d’hôtes pour exécuter des tâches sur des ensembles spécifiques de machines.

    • Communication avec les nœuds : Ansible utilise SSH pour les systèmes Unix/Linux et WinRM pour les systèmes Windows afin de communiquer avec les nœuds distants, offrant une connexion sécurisée et efficace.

  4. Les Playbooks

    • Définition des Playbooks : Un playbook est un fichier YAML qui contient une série de tâches à exécuter sur les serveurs. Les playbooks sont au cœur de l’automatisation avec Ansible, car ils permettent de décrire l’état désiré des systèmes.

    • Structure des playbooks : Les playbooks sont structurés en plusieurs niveaux, comprenant les hôtes cibles, les variables, les tâches et les handlers. Cette structure facilite la compréhension des étapes nécessaires pour configurer un système.

    • Exemple pratique : Par exemple, un playbook peut être utilisé pour installer Apache sur un groupe de serveurs, configurer les fichiers de configuration, et redémarrer le service après modification.

  5. Les Tâches Ansible

    • Définition des Tâches : Les tâches sont les unités de base d’un playbook. Chaque tâche exécute un module sur les hôtes cibles, comme installer un paquet, copier un fichier, ou redémarrer un service.

    • Utilisation des Modules : Ansible possède une vaste bibliothèque de modules pour diverses tâches. Par exemple, le module apt ou yum est utilisé pour gérer les paquets, le module file pour manipuler les fichiers, et le module service pour gérer les services système.

    • Exemple de Tâche : Une tâche typique pourrait être :

      - name: Installer Apache
        apt:
          name: apache2
          state: present

      Cette tâche installe le serveur Apache sur les hôtes cibles utilisant le gestionnaire de paquets apt.

  6. Variables et Facts

    • Variables : Les variables rendent les playbooks plus dynamiques et réutilisables. Elles permettent de définir des valeurs comme les chemins, les noms d’utilisateur, ou d’autres paramètres spécifiques à chaque environnement.

    • Facts : Les facts sont des variables générées automatiquement par Ansible à chaque connexion à un nœud. Elles fournissent des informations sur le système cible, telles que l’adresse IP, le type de système d’exploitation, la mémoire disponible, etc.

    • Utilisation des Variables et Facts : Par exemple, une tâche peut conditionner son exécution en utilisant un fact spécifique, comme :

      - name: Créer un répertoire si l'OS est Ubuntu
        file:
          path: /opt/mon_dossier
          state: directory
        when: ansible_facts['os_family'] == 'Debian'
  7. Les Rôles dans Ansible

    • Définition des Rôles : Les rôles sont des unités logiques qui regroupent les tâches, fichiers, templates, et variables nécessaires pour réaliser une fonctionnalité spécifique. Cela permet de rendre les projets modulaires et plus faciles à maintenir.

    • Organisation des Rôles : Chaque rôle suit une structure bien définie comprenant des dossiers pour les tâches (tasks/), les variables (vars/), les fichiers (files/), et les templates (templates/). Cette organisation facilite la réutilisation des rôles entre plusieurs playbooks.

    • Utilisation des Rôles : Par exemple, un rôle pour l’installation de Nginx pourrait être réutilisé dans plusieurs projets nécessitant un serveur web, en modifiant simplement les variables selon le contexte.

  8. Ansible Vault

    • Définition d’Ansible Vault : Ansible Vault est un outil permettant de chiffrer des fichiers contenant des données sensibles, comme des mots de passe ou des clés API. Cela garantit que les informations confidentielles ne sont pas stockées en clair.

    • Chiffrement des fichiers : Vous pouvez chiffrer un fichier avec la commande $ ansible-vault encrypt <nom_du_fichier>. Le fichier chiffré peut ensuite être utilisé dans des playbooks en spécifiant qu’il doit être déchiffré lors de l’exécution.

    • Utilisation dans les Playbooks : Pour inclure des variables chiffrées dans un playbook, on utilise la directive vars_files pour indiquer le fichier contenant les secrets.

  9. Ansible Galaxy

    • Définition d’Ansible Galaxy : Ansible Galaxy est une plateforme communautaire où les utilisateurs peuvent partager des rôles réutilisables. Cela permet d’accélérer le développement en réutilisant du code déjà testé et approuvé par la communauté.

    • Téléchargement de Rôles : Vous pouvez rechercher et télécharger des rôles depuis Ansible Galaxy avec la commande $ ansible-galaxy install <nom_du_rôle>. Cela permet d’intégrer rapidement des fonctionnalités sans avoir à les développer de zéro.

    • Création de Rôles pour Galaxy : Les développeurs peuvent également créer leurs propres rôles et les partager sur Galaxy, contribuant ainsi à la communauté.

  10. Gestion des Erreurs et Gestion des Blocs

    • Ignore Errors : Ansible permet de continuer l’exécution même si une tâche échoue en utilisant ignore_errors: yes. Cela est utile lorsque l’on veut s’assurer que certaines parties du playbook s’exécutent malgré des erreurs mineures.

    • Contrôle des Conditions d’Échec : Avec failed_when et changed_when, vous pouvez spécifier les conditions d’échec ou de changement d’une tâche. Cela offre un contrôle précis sur la gestion des erreurs.

    • Groupement de Tâches : Les blocs (block) permettent de regrouper plusieurs tâches. En cas d’échec d’une tâche dans un bloc, un rescue peut être utilisé pour exécuter des actions de récupération, et always pour exécuter des actions quelles que soient les conditions.

  11. Handlers et Débogage

    • Handlers : Les handlers sont des tâches spéciales qui s’exécutent en réponse à un changement déclenché par une autre tâche. Par exemple, après l’installation d’un nouveau paquet, un handler peut redémarrer le service concerné.

    • Débogage avec le Module Debug : Le module debug est utilisé pour afficher des messages ou la valeur de variables pendant l’exécution d’un playbook. Cela est particulièrement utile pour comprendre le flux d’exécution et résoudre les problèmes.

    • Mode Verbeux : Exécuter les playbooks en mode verbeux (-v, -vv, -vvv) permet d’obtenir plus de détails sur les actions effectuées, ce qui facilite le débogage.

  12. Tests avec Molecule et Testinfra

    • Molecule : Molecule est un outil permettant de tester les rôles Ansible dans des environnements isolés, tels que des conteneurs Docker ou des machines virtuelles. Cela permet de s’assurer que les rôles fonctionnent comme prévu avant de les déployer en production.

    • Testinfra : Testinfra est une bibliothèque Python qui permet d’écrire des tests pour vérifier l’état des serveurs après l’exécution des rôles. Par exemple, un test peut vérifier qu’un service est en cours d’exécution, qu’un fichier existe ou qu’un port est ouvert.

    • Intégration Molecule et Testinfra : En utilisant Molecule avec Testinfra, vous pouvez écrire des tests automatisés pour valider que vos rôles appliquent les configurations attendues, améliorant ainsi la fiabilité de vos déploiements.

Conclusion

À la fin de ce cours, vous aurez une bonne compréhension de l’utilisation d’Ansible pour automatiser les tâches de gestion des infrastructures. Vous serez capable de créer des playbooks, gérer les inventaires, utiliser les rôles pour organiser vos automatisations, et appliquer des pratiques de sécurité avec Ansible Vault. Vous comprendrez également comment tester vos rôles avec Molecule et Testinfra pour garantir leur bon fonctionnement.

Retour en haut