0Pricing
Ansible Academy · Leçon

Pourquoi command rompt l’idempotence

Le piège de l’interpréteur brut et comment l’éviter.

Pourquoi command rompt l’idempotence est une leçon Ansible Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Ansible Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Ansible Academy comprend 4 leçons au total.

command s'exécute toujours

Le module command exécute simplement ce que vous lui donnez sur l'hôte. Il ne sait pas à quoi ressemble un état « terminé » et s'exécute donc à chaque fois.

ansible.builtin.command: useradd deploy

Toujours changed

Comme command ne peut pas examiner l'état, Ansible le signale comme changed à chaque exécution, même lorsque la commande n'a en réalité rien fait de nouveau.

changed: [web1]

Relancer peut causer des problèmes

Pire encore, certaines commandes échouent ou répètent le travail lors d'une nouvelle exécution, comme useradd qui génère une erreur parce que l'utilisateur existe déjà.

Préférez un module fondé sur l'état

Pour les utilisateurs, préférez plutôt le module user. Il vérifie si le compte existe et ne le crée que s'il est absent, ce qui préserve l'idempotence.

ansible.builtin.user:
  name: deploy
  state: present

Il existe généralement un module

La plupart des tâches courantes d'interpréteur de commandes disposent d'un module dédié : file, copy, lineinfile, git. Utilisez-les afin qu'Ansible puisse comparer l'état et ignorer la tâche lorsqu'il est correct.

Protégez command avec creates

Si vous devez utiliser command, ajoutez creates. Ansible ignore la tâche lorsque ce chemin existe déjà, ce qui rétablit l'idempotence.

ansible.builtin.command: ./build.sh
args:
  creates: /opt/app/built

Ou protégez-la avec removes

L'équivalent inverse de creates est removes : la commande ne s'exécute que si le chemin indiqué existe encore, ce qui est utile pour les étapes de nettoyage.

ansible.builtin.command: rm /tmp/lock
args:
  removes: /tmp/lock

Conditionnez command avec when

Vous pouvez également entourer une commande d'une condition when pilotée par une vérification enregistrée, afin qu'elle ne s'exécute que lorsque cela est réellement nécessaire.

Indiquez à Ansible qu'aucune modification n'a été effectuée

Définissez changed_when: false sur une commande en lecture seule afin qu'Ansible cesse de la signaler comme changed à chaque exécution.

ansible.builtin.command: cat /etc/hostname
changed_when: false

shell présente le même problème

Le module shell partage ce défaut. Il s'exécute via un interpréteur de commandes et n'est donc pas idempotent non plus, à moins de le protéger de la même manière.

Considérez les commandes brutes comme un dernier recours

La commande brute est une solution de secours, pas un choix par défaut. Chacune est un endroit où l'idempotence peut se rompre discrètement ; utilisez-la donc uniquement lorsqu'aucun module ne convient.

Vérification rapide

Vous avez utilisé command pour exécuter un script de compilation et il affiche changed à chaque exécution.

Récapitulatif

Les modules command et shell s'exécutent toujours et signalent toujours changed. Préférez les vrais modules ou protégez-les avec creates, removes ou changed_when. 🛡️

Questions Fréquemment Posées

La leçon « Pourquoi command rompt l’idempotence » est-elle gratuite ?

Oui — le texte complet de « Pourquoi command rompt l’idempotence » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Ansible Academy, passe à CoddyKit PRO. Le cours Ansible Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Pourquoi command rompt l’idempotence » ?

Le piège de l’interpréteur brut et comment l’éviter. Tu pratiques Ansible Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Ansible Academy ?

Aucune expérience préalable n'est requise. Ansible Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Pourquoi command rompt l’idempotence » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Ansible Academy ?

Oui. Chaque leçon Ansible Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. État souhaité, pas scripts étape par étape
  2. Lire changed et ok dans la sortie
  3. Pourquoi command rompt l’idempotence
  4. Mode vérification : simulation avec --check
← Retour à Ansible Academy