Passer au contenu principal

Automatisation (Linux)

Introduction à Ansible

Bash automatise une machine à la fois. Ansible automatise des parcs entiers depuis un poste de contrôle, sans agent sur les serveurs cibles. C'est le pont naturel entre les scripts shell et l'infrastructure as code.

Concepts fondamentaux

  • Inventory : la liste des serveurs à gérer (fichier texte ou dynamique)
  • Playbook : le fichier YAML décrivant les tâches à exécuter
  • Module : l'unité d'action Ansible (apt, file, service, copy, template...)
  • Idempotence : exécuter un playbook plusieurs fois produit le même résultat
  • SSH : Ansible se connecte aux cibles via SSH, sans daemon ni agent

Installation

apt install ansible          # sur le poste de contrôle uniquement
ansible --version

Inventory

# ./inventory
[webservers]
web1.exemple.fr
web2.exemple.fr ansible_user=romain ansible_port=2222

[dbservers]
db1.exemple.fr

[all:vars]
ansible_user=romain
ansible_ssh_private_key_file=~/.ssh/id_ed25519

Tester la connectivité :

ansible all -i inventory -m ping
ansible webservers -i inventory -m ping

Premier playbook

# deploy-nginx.yml
---
- name: Installer et configurer Nginx
  hosts: webservers
  become: true      # équivalent de sudo

  tasks:
    - name: Mettre à jour le cache apt
      apt:
        update_cache: yes

    - name: Installer Nginx
      apt:
        name: nginx
        state: present    # present / absent / latest

    - name: Démarrer et activer Nginx
      service:
        name: nginx
        state: started
        enabled: true

    - name: Copier la configuration
      copy:
        src: files/nginx.conf
        dest: /etc/nginx/nginx.conf
        mode: '0644'
      notify: Recharger Nginx

  handlers:
    - name: Recharger Nginx
      service:
        name: nginx
        state: reloaded
ansible-playbook -i inventory deploy-nginx.yml          # exécuter
ansible-playbook -i inventory deploy-nginx.yml --check  # dry-run
ansible-playbook -i inventory deploy-nginx.yml --diff   # afficher les différences

Modules essentiels

  • apt : gestion des paquets Debian
  • service : démarrer, arrêter, activer des services
  • copy : copier des fichiers sur les cibles
  • template : copier des fichiers Jinja2 avec variables
  • file : gérer permissions, propriétaires, liens symboliques
  • user : créer et modifier des utilisateurs
  • command / shell : exécuter une commande (à éviter si un module existe)

En pratique

La valeur d'Ansible se révèle dès le deuxième serveur : ce qui prenait deux fois plus de temps se fait en une seule exécution. L'idempotence change l'approche : un playbook n'est pas "exécuté une fois", il décrit l'état désiré du système. Même résultat sur 10 ou 100 serveurs. Le passage de Bash à Ansible est naturel : les scripts shell restent pour les tâches locales ponctuelles, Ansible prend la main pour tout ce qui touche plusieurs machines ou doit être reproductible et auditable.