Polarys
Automatisation avec Ansible/Ansible en production

Ansible en production

Plusieurs environnements sans se tromper de cible

L'incident qu'on veut éviter

Un playbook de recette exécuté sur la production. Cela arrive, et presque toujours pour la même raison : un inventaire par défaut, une option --limit oubliée, deux fichiers aux noms voisins.

L'organisation qui suit rend cette erreur difficile, ce qui vaut mieux que de compter sur l'attention.

Un répertoire par environnement

inventories/
  production/
    hosts.yml
    group_vars/
      all.yml
      web.yml
  recette/
    hosts.yml
    group_vars/
      all.yml
      web.yml
playbooks/
roles/

Les playbooks et les rôles sont communs : ce sont les mêmes gestes. Seules les données changent, et elles vivent dans l'inventaire.

Deux conséquences saines. Impossible d'exécuter sans nommer l'inventaire, donc sans nommer l'environnement. Et la recette teste réellement le code de la production, puisque c'est le même.

Où mettre quelle variable

L'ordre de précédence d'Ansible est long ; deux règles suffisent en pratique.

Les valeurs par défaut vont dans defaults/ du rôle. Elles sont faciles à surcharger, ce qui est le but.

Les valeurs spécifiques à un environnement vont dans group_vars/ de son inventaire. C'est le seul endroit où l'on s'attend à les trouver.

Évitez vars/ dans un rôle pour ce qui pourrait varier : cette précédence élevée produit des variables qu'on n'arrive plus à surcharger, et des heures perdues à comprendre pourquoi.

Les secrets

Un fichier chiffré par environnement, jamais un fichier partagé entre production et recette.

inventories/production/group_vars/all/vault.yml

La clé de déchiffrement de la production n'est pas la même que celle de la recette, et elle n'est pas sur les postes de développement.

Et le rappel qui vaut pour tout dépôt : un secret poussé en clair, même retiré au commit suivant, reste dans l'historique. Il se révoque, il ne s'efface pas.

Trois garde-fous simples

Rendre l'inventaire obligatoire. Retirez tout inventaire par défaut de la configuration : une exécution sans -i doit échouer.

Demander confirmation en production. Une tâche pause en tête de playbook, conditionnée à l'environnement, coûte cinq secondes et évite l'irréparable.

Afficher la cible avant d'agir. Une tâche qui affiche le nom de l'environnement et le nombre de machines concernées permet à l'opérateur de voir son erreur avant qu'elle ne compte.

Le dernier garde-fou

--limit restreint l'exécution à un sous-ensemble. Prenez l'habitude de déployer d'abord sur une machine :

ansible-playbook -i inventories/production playbooks/web.yml --limit web-01

Vérifier sur une machine avant d'en toucher cinquante est la version Ansible du SELECT avant l'UPDATE.

À retenir

Un inventaire par environnement, des playbooks communs, aucun inventaire par défaut. Les valeurs d'environnement dans group_vars, les secrets chiffrés par environnement. Et déployez toujours sur une machine avant le parc.

Quiz de validation

Quiz - 3 questions

1. Pourquoi retirer tout inventaire par défaut de la configuration ?

2. Où placer une valeur spécifique à un environnement ?

3. Quel est l'équivalent Ansible du SELECT avant l'UPDATE ?

Suis ta progression

Crée un compte gratuit pour suivre ta progression et accéder à toutes les leçons.