Installation et configuration
Ansible ne nécessite d'installation que sur le nœud de contrôle. Les machines cibles n'ont besoin que d'un accès SSH et de Python 3. Cette section couvre l'installation, la configuration de base, et la vérification de la connectivité.
Prérequis
- Nœud de contrôle : Linux ou macOS, Python 3.10+, pip, SSH client (ansible-core 2.18+ exige Python 3.10 minimum sur le nœud de contrôle)
- Machines cibles : SSH actif, Python 3 installé (la plupart des distributions l'incluent par défaut)
- Authentification : clé SSH recommandée, mot de passe possible via
--ask-pass
Installation via pip
L'installation via pip est recommandée pour obtenir une version récente, indépendamment de la version packagée par la distribution :
pip3 install --user ansible
# Vérifier l'installation
ansible --versionSur Debian 13 Trixie, le paquet ansible disponible via apt est souvent en retard d'une version majeure. Pip garantit l'accès aux dernières collections.
Pour un environnement isolé (recommandé en production) :
python3 -m venv ~/.venv/ansible
source ~/.venv/ansible/bin/activate
pip install ansible ansible-lintansible.cfg : configuration du comportement
Ansible cherche sa configuration dans cet ordre : variable d'environnement ANSIBLE_CONFIG, puis ./ansible.cfg (répertoire courant), puis ~/.ansible.cfg, puis /etc/ansible/ansible.cfg.
Un fichier ansible.cfg minimal par projet :
[defaults]
inventory = inventory/
remote_user = debian
private_key_file = ~/.ssh/id_ed25519
host_key_checking = False # uniquement en développement
forks = 10
stdout_callback = yaml
[ssh_connection]
pipelining = Truehost_key_checking = False désactive la vérification du fingerprint SSH. Acceptable en lab, à proscrire en production.
Premier inventaire statique
L'inventaire décrit les machines cibles. Format INI minimal :
[web]
web01.example.com
web02.example.com ansible_user=ubuntu
[db]
db01.example.com ansible_port=2222
[prod:children]
web
dbLe groupe prod contient ici tous les hôtes de web et db. Deux groupes spéciaux existent toujours : all (tous les hôtes) et ungrouped (hôtes sans groupe).
Pour placer l'inventaire dans un dossier (recommandé) :
mkdir -p inventory/
# inventory/hosts.ini contient le contenu ci-dessusVérification de la connectivité
Le module ping Ansible n'est pas un ping ICMP : il établit une connexion SSH, vérifie Python, et retourne pong :
# Tous les hôtes
ansible all -m ping
# Un groupe spécifique
ansible web -m ping
# Un hôte spécifique
ansible web01.example.com -m ping -vCommandes ad-hoc
Les commandes ad-hoc permettent d'exécuter un module unique sans playbook :
# Uptime sur tous les serveurs
ansible all -m command -a "uptime"
# Installer un paquet (avec élévation sudo)
ansible web -m apt -a "name=nginx state=present" --become
# Copier un fichier
ansible db -m copy -a "src=/tmp/test.conf dest=/etc/test.conf" --become
# Récupérer des facts
ansible web01.example.com -m setup | grep ansible_distributionLes commandes ad-hoc sont utiles pour des opérations ponctuelles ou de la vérification rapide. Dès qu'une opération doit être reproductible, elle mérite un playbook.
Structure de projet recommandée
Avant d'aller plus loin, voici la structure minimale d'un projet Ansible propre :
mon-projet/
├── ansible.cfg
├── inventory/
│ └── hosts.ini
├── group_vars/
│ └── all.yml
├── host_vars/
├── roles/
└── playbooks/
└── site.yml