Aller au contenu principal

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èmeSupport
Linux✅ Complet
macOS✅ Complet
Windows⚠️ Via WSL uniquement

Managed Nodes (cibles)

PrérequisDescription
Python 2.7+ ou 3.5+Pour exécuter les modules
SSH ServerAccès à distance
Utilisateur avec sudoPour 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

OptionDescriptionValeur recommandée
inventoryChemin de l'inventaire./inventory/
host_key_checkingVérifier clés SSHFalse (dev), True (prod)
forksParallélisme10-50 selon réseau
pipeliningOptimisation SSHTrue
becomeEscalade privilègesTrue

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 ping avant de continuer

Exercices pratiques

  1. Installez Ansible sur votre machine
  2. Créez une structure de projet
  3. Configurez SSH vers une VM ou conteneur
  4. Validez avec un ping Ansible

← Introduction | Inventaire →