Applez Nous: +41 22 518 70 00
Un Playbook consigne la suite d’états à appliquer sur un groupe de serveurs :
# Fichier : deploy-nginx.yaml
---
- name: Déploiement et durcissement des serveurs web
hosts: geneve
become: true
tasks:
- name: Installation du serveur web NGINX
ansible.builtin.apt:
name: nginx
state: present
update_cache: yes
- name: Déploiement de la configuration personnalisée via Jinja2
ansible.builtin.template:
src: templates/nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
notify: Recharger NGINX
- name: Assurer que le service NGINX est actif et activé au boot
ansible.builtin.service:
name: nginx
state: started
enabled: yes
handlers:
- name: Recharger NGINX
ansible.builtin.service:
name: nginx
state: reloaded
Un Handler est une tâche spéciale déclenchée uniquement lorsqu’une action précédente signale une modification effective (changed) via l’instruction notify. Si le fichier de configuration est déjà à jour, NGINX ne sera pas rechargé inutilement.
Pour organiser un projet d’envergure, Ansible structure le code par rôles réutilisables (ansible-galaxy init mon_role) :
roles/serveur_web/
├── tasks/main.yaml # Liste des tâches séquentielles
├── handlers/main.yaml # Déclencheurs de rechargement
├── templates/main.j2 # Gabarits de configuration dynamiques
├── vars/main.yaml # Variables internes au rôle
├── defaults/main.yaml # Variables par défaut surchargeables
└── meta/main.yaml # Métadonnées et dépendances de rôles
Pour stocker des mots de passe, des certificats SSL ou des clés d’API dans Git sans compromettre la sécurité, Ansible Vault chiffre vos fichiers sensibles avec l’algorithme robuste AES-256 :
# Création d'un fichier de variables chiffré
ansible-vault create vars/vault.yaml
# Édition transparente du fichier protégé par mot de passe
ansible-vault edit vars/vault.yaml
# Exécution du playbook en transmettant le fichier de mot de passe
ansible-playbook -i inventory.yaml deploy-nginx.yaml --vault-password-file ~/.vault_pass
Templates Jinja2 : Les templates permettent d’injecter des boucles et des conditions dynamiques (ex:
{% for server in groups['geneve'] %}) pour générer automatiquement des configurations d’équilibrage de charge adaptées au nombre d’hôtes actifs.