Retour au cours

introduction à ansible : configuration et automatisation

Objectifs

  • Comprendre le rôle d’Ansible dans une chaîne d’outils DevOps et sa différence avec Terraform.
  • Découvrir l’architecture “sans agent” d’Ansible.
  • Écrire un inventaire pour lister les machines à gérer.
  • Écrire un playbook simple pour exécuter une série de tâches sur ces machines.

Ansible vs. Terraform : Deux outils complémentaires

  • Terraform est un outil de provisionnement. Son rôle est de créer l’infrastructure de base : les serveurs, les réseaux, les bases de données…
  • Ansible est un outil de gestion de configuration. Son rôle est de configurer des serveurs existants : installer des logiciels, déployer une application, gérer des fichiers de configuration, démarrer des services…

Le workflow typique est d’utiliser Terraform pour créer un serveur, puis d’utiliser Ansible pour le configurer.

L’architecture “sans agent”

C’est la grande force d’Ansible. Vous n’avez rien à installer sur les serveurs que vous voulez gérer (les “nœuds cibles”). Ansible fonctionne en se connectant à vos machines via SSH et en exécutant des petits scripts Python temporaires pour effectuer les tâches.

Cela le rend très léger et facile à mettre en place.

Les concepts clés d’Ansible

1. L’inventaire (Inventory)

C’est un fichier texte (au format INI ou YAML) qui liste les serveurs que vous souhaitez gérer. Vous pouvez les regrouper pour appliquer des configurations différentes.

Fichier inventory.ini :

[webservers]
server1.exemple.com
server2.exemple.com

[dbservers]
db1.exemple.com

2. Le Playbook

C’est un fichier YAML qui décrit une série de tâches à exécuter sur un groupe de serveurs. Il se lit comme une “pièce de théâtre” (un “play”).

3. La Tâche (Task) et le Module

Chaque tâche dans un playbook est une action individuelle. Elle utilise un module Ansible, qui est un outil spécialisé pour une action précise.

  • Module apt : Gère les paquets sur Debian/Ubuntu.
  • Module copy : Copie un fichier vers la machine cible.
  • Module service : Gère un service (démarrer, arrêter…).

Exemple : Installer Nginx sur des serveurs web

Ce playbook va se connecter à tous les serveurs du groupe webservers et s’assurer que Nginx est installé et démarré.

Fichier playbook.yml :

- name: Installer et configurer un serveur web Nginx
  hosts: webservers # Cible les serveurs du groupe [webservers] de l'inventaire
  become: true      # Exécute les tâches avec des privilèges root (via sudo)

  tasks:
    - name: S'assurer que Nginx est installé à la dernière version
      ansible.builtin.apt:
        name: nginx
        state: latest
        update_cache: yes

    - name: S'assurer que le service Nginx est démarré et activé au boot
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: yes

Lancer le playbook

La commande ansible-playbook exécute le playbook.

  • -i : Spécifie le fichier d’inventaire.
ansible-playbook -i inventory.ini playbook.yml

Ansible va se connecter en SSH à server1 et server2, exécuter les tâches, et vous afficher un résumé des changements.

L’idempotence

C’est un concept clé. Les modules Ansible sont idempotents : si vous lancez le playbook ci-dessus une deuxième fois, Ansible verra que Nginx est déjà installé et que le service tourne déjà. Il ne fera aucun changement. Un playbook idempotent ne modifie le système que si c’est nécessaire pour atteindre l’état désiré.

Bonnes pratiques

  • Rendez vos playbooks idempotents. C’est le comportement par défaut de la plupart des modules, mais il faut y faire attention lorsque vous écrivez des tâches plus complexes.
  • Utilisez des “rôles” (Ansible Roles) pour organiser vos playbooks en structures réutilisables et partageables.
  • Stockez les données sensibles (mots de passe, clés) dans Ansible Vault, un outil de chiffrement intégré.

Exercices

  1. Installez Ansible :

    • Suivez les instructions sur le site officiel. Sur la plupart des systèmes Linux, c’est sudo apt install ansible ou sudo dnf install ansible.
  2. Créez votre premier inventaire :

    • Créez un fichier inventory.ini et ajoutez-y une section [local] avec une seule ligne : localhost ansible_connection=local. Cela permet à Ansible de s’exécuter sur votre propre machine.
  3. Ping de test :

    • Écrivez un playbook ping.yml qui cible local et utilise le module ping pour vérifier la connexion.
      - name: Test de connexion
        hosts: local
        tasks:
          - name: Ping la machine locale
            ansible.builtin.ping:
    • Lancez-le avec ansible-playbook -i inventory.ini ping.yml. Vous devriez voir une sortie “SUCCESS” avec “pong”.
  4. Installez un paquet :

    • Écrivez un playbook install.yml qui cible local et utilise le module apt (ou dnf/yum selon votre système) pour installer un paquet simple comme htop. N’oubliez pas become: true.
    • Lancez le playbook. Il vous demandera probablement votre mot de passe sudo.
    • Vérifiez que htop est bien installé.
    • Relancez le playbook et observez qu’Ansible ne fait aucun changement.