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
| Notion | Définition |
|---|---|
| Inventaire | Liste des machines, rangées en groupes |
| Module | Une action (apt, service, copy, template, user, lineinfile…) |
| Tâche | Un appel de module |
| Playbook | Fichier YAML de tâches appliquées à des groupes |
| Rôle | Playbook réutilisable et rangé (web, bdd…) |
| Idempotence | Relancer = 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 --version3. L’équivalent de ton TP en Ansible
inventaire.ini
[web]
192.168.122.50
[bdd]
192.168.122.51
[all:vars]
ansible_user=etudiantsite.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: restartedansible 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 serveurs | Boucle à écrire | Un groupe dans l’inventaire |
| Lisibilité | Moyenne | YAML déclaratif |
| Simulation | Non | --check --diff |
| Secrets | stty -echo | --ask-become-pass, Ansible Vault |