1. Les Playbooks YAML : Orchestration déclarative de tâches

Un Playbook consigne la suite d’états à appliquer sur un groupe de serveurs :

# Fichier : deploy-nginx.yaml
---
- name: Déploiement et durcissement des serveurs web
  hosts: geneve
  become: true

  tasks:
    - name: Installation du serveur web NGINX
      ansible.builtin.apt:
        name: nginx
        state: present
        update_cache: yes

    - name: Déploiement de la configuration personnalisée via Jinja2
      ansible.builtin.template:
        src: templates/nginx.conf.j2
        dest: /etc/nginx/nginx.conf
        owner: root
        group: root
        mode: '0644'
      notify: Recharger NGINX

    - name: Assurer que le service NGINX est actif et activé au boot
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: yes

  handlers:
    - name: Recharger NGINX
      ansible.builtin.service:
        name: nginx
        state: reloaded

2. Le rôle des Handlers : Optimisation des rechargements

Un Handler est une tâche spéciale déclenchée uniquement lorsqu’une action précédente signale une modification effective (changed) via l’instruction notify. Si le fichier de configuration est déjà à jour, NGINX ne sera pas rechargé inutilement.

3. Structuration professionnelle avec les Rôles Ansible

Pour organiser un projet d’envergure, Ansible structure le code par rôles réutilisables (ansible-galaxy init mon_role) :

roles/serveur_web/
├── tasks/main.yaml       # Liste des tâches séquentielles
├── handlers/main.yaml    # Déclencheurs de rechargement
├── templates/main.j2     # Gabarits de configuration dynamiques
├── vars/main.yaml        # Variables internes au rôle
├── defaults/main.yaml    # Variables par défaut surchargeables
└── meta/main.yaml        # Métadonnées et dépendances de rôles

4. Chiffrement des secrets d’entreprise avec Ansible Vault

Pour stocker des mots de passe, des certificats SSL ou des clés d’API dans Git sans compromettre la sécurité, Ansible Vault chiffre vos fichiers sensibles avec l’algorithme robuste AES-256 :

# Création d'un fichier de variables chiffré
ansible-vault create vars/vault.yaml

# Édition transparente du fichier protégé par mot de passe
ansible-vault edit vars/vault.yaml

# Exécution du playbook en transmettant le fichier de mot de passe
ansible-playbook -i inventory.yaml deploy-nginx.yaml --vault-password-file ~/.vault_pass

Templates Jinja2 : Les templates permettent d’injecter des boucles et des conditions dynamiques (ex: {% for server in groups['geneve'] %}) pour générer automatiquement des configurations d’équilibrage de charge adaptées au nombre d’hôtes actifs.