Installation et configuration
Objectifs du chapitre
- Installer Ansible sur différents systèmes
- Configurer le fichier ansible.cfg
- Établir la connectivité SSH
- Valider l'installation
1 - Prérequis
Control Node (machine Ansible)
| Système | Support |
|---|---|
| Linux | ✅ Complet |
| macOS | ✅ Complet |
| Windows | ⚠️ Via WSL uniquement |
Managed Nodes (cibles)
| Prérequis | Description |
|---|---|
| Python 2.7+ ou 3.5+ | Pour exécuter les modules |
| SSH Server | Accès à distance |
| Utilisateur avec sudo | Pour les tâches privilégiées |
2 - Installation sur Linux
Ubuntu/Debian
# Méthode 1: Via apt (version stable)
sudo apt update
sudo apt install ansible
# Méthode 2: Via PPA (dernière version)
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
# Méthode 3: Via pip (recommandé)
sudo apt install python3-pip
pip3 install ansible
RHEL/CentOS/Rocky
# RHEL 8+
sudo dnf install ansible-core
# CentOS 7
sudo yum install epel-release
sudo yum install ansible
# Via pip
pip3 install ansible
Arch Linux
sudo pacman -S ansible
3 - Installation sur macOS
# Via Homebrew
brew install ansible
# Via pip
pip3 install ansible
4 - Installation sur Windows (WSL)
# 1. Installer WSL (PowerShell admin)
wsl --install
# 2. Redémarrer Windows
# 3. Dans WSL Ubuntu
sudo apt update
sudo apt install ansible
5 - Vérification de l'installation
# Version d'Ansible
ansible --version
# Sortie attendue
ansible [core 2.15.0]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/user/.ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /home/user/.ansible/collections
executable location = /usr/bin/ansible
python version = 3.10.12
# Lister les modules disponibles
ansible-doc -l | head -20
# Documentation d'un module
ansible-doc apt
6 - Configuration SSH
Architecture de connexion
Générer une clé SSH
# Générer une paire de clés
ssh-keygen -t ed25519 -C "ansible@control-node"
# Ou avec RSA (compatibilité)
ssh-keygen -t rsa -b 4096 -C "ansible@control-node"
# Accepter les valeurs par défaut (Enter)
# La clé sera dans ~/.ssh/id_ed25519
Distribuer la clé publique
# Copier la clé vers les serveurs cibles
ssh-copy-id user@server1
ssh-copy-id user@server2
ssh-copy-id user@server3
# Ou manuellement
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Tester la connexion
# Connexion sans mot de passe
ssh user@server1
# Test Ansible
ansible all -i "server1," -m ping
7 - Configuration Ansible
Hiérarchie des fichiers de configuration
Créer ansible.cfg
# ansible.cfg - Configuration recommandée
[defaults]
# Inventaire par défaut
inventory = ./inventory/hosts.ini
# Désactiver la vérification des clés host (dev uniquement!)
host_key_checking = False
# Utilisateur distant par défaut
remote_user = ansible
# Nombre de connexions parallèles
forks = 10
# Timeout de connexion
timeout = 30
# Fichier de log
log_path = ./ansible.log
# Ne pas créer de fichiers .retry
retry_files_enabled = False
# Format de sortie
stdout_callback = yaml
# Collecter les facts au début
gathering = smart
[privilege_escalation]
# Devenir root par défaut
become = True
become_method = sudo
become_user = root
become_ask_pass = False
[ssh_connection]
# Optimisation SSH
pipelining = True
control_path = /tmp/ansible-%%h-%%p-%%r
Options importantes
| Option | Description | Valeur recommandée |
|---|---|---|
inventory | Chemin de l'inventaire | ./inventory/ |
host_key_checking | Vérifier clés SSH | False (dev), True (prod) |
forks | Parallélisme | 10-50 selon réseau |
pipelining | Optimisation SSH | True |
become | Escalade privilèges | True |
8 - Structure de projet recommandée
Créer la structure
# Créer le projet
mkdir -p ansible-project/{inventory,playbooks,roles,group_vars,host_vars,files,templates}
cd ansible-project
# Créer les fichiers de base
touch ansible.cfg
touch inventory/hosts.ini
touch playbooks/site.yml
Exemple de structure complète
ansible-project/
├── ansible.cfg
├── inventory/
│ ├── hosts.ini # Inventaire principal
│ ├── production/ # Inventaire prod
│ │ └── hosts.ini
│ └── staging/ # Inventaire staging
│ └── hosts.ini
├── playbooks/
│ ├── site.yml # Playbook principal
│ ├── webservers.yml
│ └── databases.yml
├── roles/
│ ├── common/ # Rôle commun à tous
│ ├── nginx/ # Rôle serveur web
│ └── postgresql/ # Rôle base de données
├── group_vars/
│ ├── all.yml # Variables pour tous
│ ├── webservers.yml # Variables groupe web
│ └── databases.yml # Variables groupe db
├── host_vars/
│ └── web-01.yml # Variables spécifiques
├── files/ # Fichiers statiques
│ └── config.conf
└── templates/ # Templates Jinja2
└── nginx.conf.j2
9 - Premier test
Créer l'inventaire minimal
# inventory/hosts.ini
[local]
localhost ansible_connection=local
[webservers]
web-01 ansible_host=192.168.1.10
web-02 ansible_host=192.168.1.11
[databases]
db-01 ansible_host=192.168.1.20
[all:vars]
ansible_user=ansible
ansible_python_interpreter=/usr/bin/python3
Tester la connectivité
# Ping localhost
ansible localhost -m ping
# Ping tous les hôtes
ansible all -m ping
# Ping un groupe spécifique
ansible webservers -m ping
# Avec plus de détails
ansible all -m ping -v
Résultat attendu
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
web-01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
10 - Dépannage
Problèmes courants
Commandes de diagnostic
# Test SSH manuel
ssh -v user@target-host
# Vérifier la configuration Ansible
ansible-config dump
# Mode verbose
ansible all -m ping -vvv
# Vérifier l'inventaire
ansible-inventory --list
# Graphique de l'inventaire
ansible-inventory --graph
Résoudre les erreurs SSH
# Erreur: Host key verification failed
# Solution 1: Ajouter la clé
ssh-keyscan -H target-host >> ~/.ssh/known_hosts
# Solution 2: Désactiver la vérification (dev uniquement)
# Dans ansible.cfg: host_key_checking = False
# Erreur: Permission denied (publickey)
# Vérifier que la clé est copiée
ssh-copy-id user@target-host
# Vérifier les permissions
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
Résumé
Points clés
- Installez Ansible sur le Control Node uniquement
- Configurez SSH avec des clés (pas de mot de passe)
- Utilisez un ansible.cfg par projet
- Testez avec
ansible all -m pingavant de continuer
Exercices pratiques
- Installez Ansible sur votre machine
- Créez une structure de projet
- Configurez SSH vers une VM ou conteneur
- Validez avec un ping Ansible