Ansible : Automatisation et Configuration Management
Ansible est un outil d’automatisation puissant qui simplifie la gestion de configuration, le déploiement d’applications et l’orchestration d’infrastructure. Ce guide vous accompagne dans la maîtrise d’Ansible.
Introduction à Ansible
Avantages Clés
- Agentless : Pas besoin d’installer d’agent sur les machines cibles
- Idempotent : Exécution sûre et répétable
- Simple : Syntaxe YAML lisible et intuitive
- Extensible : Large écosystème de modules
Architecture
Control Node (Ansible)
↓ SSH/WinRM
Managed Nodes (Serveurs cibles)
Installation et Configuration
Installation sur Ubuntu
# Mise à jour du système
sudo apt update
# Installation d'Ansible
sudo apt install ansible
# Vérification de l'installation
ansible --version
Configuration SSH
# Génération de clés SSH
ssh-keygen -t rsa -b 4096
# Copie de la clé publique
ssh-copy-id user@target-server
# Test de connexion
ssh user@target-server
Inventaire et Configuration
Fichier d’Inventaire
# inventory.ini
[webservers]
web1.example.com
web2.example.com
[databases]
db1.example.com
db2.example.com
[production:children]
webservers
databases
[webservers:vars]
http_port=80
max_clients=200
Configuration Ansible
# ansible.cfg
[defaults]
inventory = inventory.ini
remote_user = ansible
private_key_file = ~/.ssh/id_rsa
host_key_checking = False
retry_files_enabled = False
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
Modules Essentiels
Gestion des Packages
# Installation de packages
- name: Install web server
apt:
name: nginx
state: present
update_cache: yes
# Installation de plusieurs packages
- name: Install multiple packages
apt:
name:
- nginx
- mysql-server
- php-fpm
state: present
Gestion des Services
# Démarrage et activation d'un service
- name: Start and enable nginx
systemd:
name: nginx
state: started
enabled: yes
# Redémarrage conditionnel
- name: Restart nginx if config changed
systemd:
name: nginx
state: restarted
when: nginx_config.changed
Gestion des Fichiers
# Copie de fichier
- name: Copy nginx config
copy:
src: nginx.conf
dest: /etc/nginx/nginx.conf
backup: yes
notify: restart nginx
# Template avec variables
- name: Generate config from template
template:
src: app.conf.j2
dest: /etc/app/app.conf
owner: app
group: app
mode: '0644'
Playbooks Avancés
Structure d’un Playbook
---
- name: Configure web servers
hosts: webservers
become: yes
vars:
http_port: 80
max_clients: 200
tasks:
- name: Install nginx
apt:
name: nginx
state: present
- name: Start nginx service
systemd:
name: nginx
state: started
enabled: yes
Utilisation des Handlers
# Playbook avec handlers
---
- name: Configure nginx
hosts: webservers
become: yes
tasks:
- name: Install nginx
apt:
name: nginx
state: present
- name: Copy nginx config
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify:
- restart nginx
- reload nginx
handlers:
- name: restart nginx
systemd:
name: nginx
state: restarted
- name: reload nginx
systemd:
name: nginx
state: reloaded
Rôles Ansible
Structure d’un Rôle
roles/
nginx/
tasks/
main.yml
handlers/
main.yml
templates/
nginx.conf.j2
files/
index.html
vars/
main.yml
defaults/
main.yml
meta/
main.yml
Exemple de Rôle
# roles/nginx/tasks/main.yml
---
- name: Install nginx
apt:
name: nginx
state: present
- name: Copy nginx config
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: restart nginx
- name: Start nginx
systemd:
name: nginx
state: started
enabled: yes
Utilisation des Rôles
# site.yml
---
- name: Configure web infrastructure
hosts: webservers
become: yes
roles:
- common
- nginx
- ssl-certificates
Variables et Templates
Définition des Variables
# group_vars/webservers.yml
nginx_port: 80
nginx_user: www-data
nginx_worker_processes: auto
# host_vars/web1.example.com.yml
nginx_worker_connections: 1024
server_name: web1.example.com
Template Jinja2
# templates/nginx.conf.j2
user ;
worker_processes ;
events {
worker_connections ;
}
http {
server {
listen ;
server_name ;
location / {
root /var/www/html;
index index.html;
}
}
}
Conditions et Boucles
Conditions
- name: Install package on Ubuntu
apt:
name: nginx
state: present
when: ansible_distribution == "Ubuntu"
- name: Install package on CentOS
yum:
name: nginx
state: present
when: ansible_distribution == "CentOS"
Boucles
- name: Create multiple users
user:
name: ""
state: present
loop:
- alice
- bob
- charlie
- name: Install packages
apt:
name: ""
state: ""
loop:
- { name: nginx, state: present }
- { name: apache2, state: absent }
Vault et Sécurité
Chiffrement avec Ansible Vault
# Créer un fichier chiffré
ansible-vault create secrets.yml
# Éditer un fichier chiffré
ansible-vault edit secrets.yml
# Chiffrer un fichier existant
ansible-vault encrypt passwords.yml
# Déchiffrer un fichier
ansible-vault decrypt passwords.yml
Utilisation des Secrets
# secrets.yml (chiffré)
database_password: "super_secret_password"
api_key: "secret_api_key"
# Playbook utilisant les secrets
- name: Configure database
mysql_user:
name: app_user
password: ""
state: present
Bonnes Pratiques
Organisation des Projets
ansible-project/
├── ansible.cfg
├── inventory/
│ ├── production
│ └── staging
├── group_vars/
├── host_vars/
├── roles/
├── playbooks/
└── vault/
Tests et Validation
# Validation de la syntaxe
- name: Check if nginx is running
uri:
url: "http://"
method: GET
delegate_to: localhost
# Tests avec assert
- name: Verify nginx is listening
wait_for:
port: 80
host: ""
timeout: 30
Intégration CI/CD
Pipeline GitLab CI
# .gitlab-ci.yml
stages:
- validate
- deploy
validate:
stage: validate
script:
- ansible-playbook --syntax-check site.yml
- ansible-lint site.yml
deploy:
stage: deploy
script:
- ansible-playbook -i inventory/production site.yml
only:
- main
Conclusion
Ansible transforme la gestion d’infrastructure en permettant :
- Automatisation complète des déploiements
- Standardisation des configurations
- Réduction des erreurs manuelles
- Accélération des livraisons
Maîtriser Ansible est essentiel pour tout professionnel DevOps souhaitant optimiser ses processus d’infrastructure.
Découvrez nos autres guides DevOps pour approfondir vos compétences en automatisation et orchestration.