P10 - Automatisation avec Ansible

Objectif

Faire proprement ce que ton script Bash du TP Linux faisait à la main : décrire l’état voulu des serveurs dans des fichiers YAML et l’appliquer par SSH, autant de fois qu’on veut, sans casse.


1. Principe

flowchart LR
  PC["💻 Ton PC (nœud de contrôle)<br/>ansible installé"] -->|"SSH (aucun agent)"| W["VM web"]
  PC -->|SSH| B["VM bdd"]
  INV["📄 inventaire.ini<br/>qui ?"] --> PC
  PB["📄 playbook.yml<br/>quoi ?"] --> PC
NotionDéfinition
InventaireListe des machines, rangées en groupes
ModuleUne action (apt, service, copy, template, user, lineinfile…)
TâcheUn appel de module
PlaybookFichier YAML de tâches appliquées à des groupes
RôlePlaybook réutilisable et rangé (web, bdd…)
IdempotenceRelancer = aucun changement si tout est déjà conforme (ton « vérifier que ce n’est pas déjà installé », mais automatique)

2. Installation

sudo apt install ansible        # ou : pipx install ansible-core
sudo pacman -S ansible          # Arch
ansible --version

3. L’équivalent de ton TP en Ansible

inventaire.ini

[web]
192.168.122.50
 
[bdd]
192.168.122.51
 
[all:vars]
ansible_user=etudiant

site.yml

- name: Rôle WEB
  hosts: web
  become: true                      # sudo
  tasks:
    - name: Installer Apache et PHP
      ansible.builtin.apt:
        name: [apache2, php, libapache2-mod-php, php-mysql, php-curl, php-gd, php-mbstring, php-xml]
        state: present
        update_cache: true
    - name: Apache démarré et activé
      ansible.builtin.service:
        name: apache2
        state: started
        enabled: true
 
- name: Rôle BDD
  hosts: bdd
  become: true
  tasks:
    - name: Installer MariaDB
      ansible.builtin.apt:
        name: mariadb-server
        state: present
        update_cache: true
    - name: Écouter sur toutes les interfaces
      ansible.builtin.lineinfile:
        path: /etc/mysql/mariadb.conf.d/50-server.cnf
        regexp: '^bind-address'
        line: 'bind-address = 0.0.0.0'
      notify: Redémarrer MariaDB
  handlers:
    - name: Redémarrer MariaDB
      ansible.builtin.service:
        name: mariadb
        state: restarted
ansible all -i inventaire.ini -m ping                    # tester la connexion
ansible-playbook -i inventaire.ini site.yml --ask-become-pass --check   # simulation
ansible-playbook -i inventaire.ini site.yml --ask-become-pass           # application

--ask-become-pass demande le mot de passe sudo sans l’afficher (exactement la contrainte du TP).

4. Bash vs Ansible

Script Bash (TP)Ansible
Vérifier avant d’installerÀ coder soi-même (dpkg -s)Automatique (idempotence)
Plusieurs serveursBoucle à écrireUn groupe dans l’inventaire
LisibilitéMoyenneYAML déclaratif
SimulationNon--check --diff
Secretsstty -echo--ask-become-pass, Ansible Vault

Voir aussi