Pourquoi Ansible ?
Ansible est un outil de gestion et d'automatisation d'applications qui permet aux développeurs et administrateurs systèmes de gérer et de déployer des infrastructures cloud, on-premises ou hybrides. Il est conçu pour simplifier la mise en œuvre de scripts de configuration et de déploiement tout en offrant une sécurité accrue grâce à sa gestion intégrée des autorisations.
Un cas d'usage concret serait le déploiement d'une application web sur plusieurs serveurs, où Ansible peut automatiser l'installation des dépendances, la copie du code source et le redémarrage du service web.
Prerequis
Pour utiliser Ansible, vous aurez besoin de :
- Python 2.7 ou 3.x
- Un environnement d'exécution Linux ou macOS (Windows est supporté via WSL)
- Accès à des machines où vous voulez déployer vos applications
Outils à installer
Vous pouvez installer Ansible en utilisant pip :
## Installer pip si ce n'est pas déjà fait
sudo apt update && sudo apt install python3-pip
## Installer Ansible
pip3 install ansible
Concepts fondamentaux
Inventaire (Inventory)
L'inventaire est un fichier qui définit les hôtes sur lesquels vous souhaitez exécuter vos playbooks. Voici un exemple basique :
## inventaire.ini
[webservers]
web1.example.com
web2.example.com
[databases]
db1.example.com
Playbook (Playbook)
Un playbook est un fichier YAML qui définit les tâches à exécuter sur vos hôtes. Voici un exemple simple :
## playbook.yml
---
- name: Installer Apache sur tous les serveurs web
hosts: webservers
tasks:
- name: Assurer que le paquet Apache est installé
apt:
name: apache2
state: present
Roles (Roles)
Un rôle est une façon de structurer vos playbooks et les réutiliser. Voici comment créer un rôle :
## Créer un nouveau rôle
ansible-galaxy init my_role
## Structure du rôle
my_role/
├── tasks/
│ └── main.yml
├── handlers/
│ └── main.yml
├── files/
├── templates/
├── vars/
└── defaults/
Variables (Variables)
Vous pouvez définir des variables dans les fichiers vars/main.yml ou en ligne de commande. Voici un exemple :
## vars/main.yml
http_port: 80
max_clients: 200
Mise en pratique : projet fil rouge
Projet à réaliser : Un gestionnaire de tâches
Nous allons créer un gestionnaire de tâches simple qui permet d'ajouter, modifier et afficher des tâches.
Étape 1: Créer le rôle task_manager
ansible-galaxy init task_manager
Étape 2: Configurer les fichiers du rôle
tasks/main.yml
## task_manager/tasks/main.yml
- name: Installer Python et pip
apt:
name: "item"
state: present
loop:
- python3
- python3-pip
- name: Installer Flask
pip:
name: flask
state: present
templates/task_manager.py.j2
## task_manager/templates/task_manager.py.j2
from flask import Flask, request, jsonify
app = Flask(__name__)
tasks = []
@app.route('/tasks', methods=['POST'])
def add_task():
task = request.json
tasks.append(task)
return jsonify(task), 201
@app.route('/tasks', methods=['GET'])
def get_tasks():
return jsonify(tasks)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
handlers/main.yml
## task_manager/handlers/main.yml
- name: Redémarrer l'application Flask
command: pkill -f task_manager.py
ignore_errors: yes
args:
chdir: /path/to/task_manager
Étape 3: Créer le playbook
playbook.yml
## playbook.yml
---
- name: Déployer le gestionnaire de tâches
hosts: webservers
roles:
- task_manager
vars:
http_port: 5000
Étape 4: Exécuter le playbook
ansible-playbook -i inventaire.ini playbook.yml
Erreurs fréquentes et debugging
Erreur : Le fichier task_manager.py ne peut pas être trouvé
Code incorrect :
## playbook.yml
---
- name: Déployer le gestionnaire de tâches
hosts: webservers
roles:
- task_manager
Code correct :
## playbook.yml
---
- name: Déployer le gestionnaire de tâches
hosts: webservers
roles:
- task_manager
vars:
http_port: 5000
Erreur : Le service Flask n'est pas démarré
Code incorrect :
## handlers/main.yml
- name: Redémarrer l'application Flask
command: pkill -f task_manager.py
ignore_errors: yes
args:
chdir: /path/to/task_manager
Code correct :
## handlers/main.yml
- name: Redémarrer l'application Flask
command: systemctl restart flask_service
ignore_errors: yes
args:
chdir: /path/to/task_manager
Pour aller plus loin
Pistes de connaissance avancées
- Ansible Vault : Sécurisez vos variables sensibles en les chiffre.
- Gestion des déploiements continus avec Ansible Galaxy : Utilisez des roles officiels pour accélérer le développement.
- Utilisation de modules personnalisés : Créez des modules Ansible pour faciliter votre workflow.
Défi pratique
Créer un script Ansible qui permet d'automatiser la mise à jour des paquets sur tous les serveurs définis dans l'inventaire. Assurez-vous que le processus de mise à jour est sécurisé et que les notifications sont envoyées en cas de réussite ou d'échec.
## playbook_update.yml
---
- name: Mettre à jour les paquets sur tous les serveurs
hosts: all
tasks:
- name: Assurer que les paquets sont à jour
apt:
update_cache: yes
upgrade: dist
Exécutez le playbook :
ansible-playbook -i inventaire.ini playbook_update.yml
Ceci devrait vous donner une bonne base pour démarrer avec Ansible et vous aider à automatiser vos tâches de déploiement et de gestion des infrastructures.