Ansible Academy · leksjon

Hvorfor command bryter idempotens

Fellen med rå shell, og hvordan De unngår den.

Leksjon 3 av 413 trinn

Hvorfor command bryter idempotens er en gratis leksjon i Ansible Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Ansible Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Ansible Academy inneholder totalt 4 leksjoner.

command kjører alltid

command-modulen kjører ganske enkelt det du gir den på verten. Den vet ikke hvordan «ferdig» ser ut, så den kjører hver eneste gang.

ansible.builtin.command: useradd deploy

Alltid changed

Fordi command ikke kan undersøke tilstanden, rapporterer Ansible den som changed ved hver kjøring, selv når kommandoen faktisk ikke gjorde noe nytt.

changed: [web1]

Ny kjøring kan gjøre skade

Enda verre er det at noen kommandoer mislykkes eller gjentar arbeid ved en ny kjøring, for eksempel når useradd gir en feil fordi brukeren allerede finnes.

Foretrekk en tilstandsbasert modul

For brukere bør du heller bruke user-modulen. Den kontrollerer om kontoen finnes, og oppretter den bare når den mangler, slik at den forblir idempotent.

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

Det finnes som regel en modul

De fleste vanlige shell-oppgaver har en egen modul: file, copy, lineinfile og git. Bruk dem, slik at Ansible kan sammenligne og hoppe over oppgaven når alt er korrekt.

Sikre command med creates

Hvis du må bruke command, legger du til creates. Ansible hopper over oppgaven når den angitte stien allerede finnes, og idempotensen gjenopprettes.

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

Eller sikre med removes

Motstykket til creates er removes: Kommandoen kjører bare hvis den angitte stien fortsatt finnes. Dette er nyttig ved opprydding.

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

Begrens command med when

Du kan også legge en command-oppgave under en when-betingelse basert på en registrert kontroll, slik at den bare kjører når det faktisk trengs.

Fortell Ansible at den ikke gjorde noe

Sett changed_when: false på en kommando som bare leser, slik at Ansible slutter å rapportere den som changed ved hver kjøring.

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

shell har samme problem

shell-modulen har den samme svakheten. Den kjører gjennom et shell, så den er også ikke-idempotent med mindre du sikrer den på samme måte.

Bruk rå command som siste utvei

Rå command er en nødløsning, ikke et standardvalg. Hver slik kommando er et sted der idempotens ubemerket kan brytes, så bruk den bare når ingen modul passer.

Rask sjekk

Du brukte command til å kjøre et byggeskript, og den viser changed ved hver eneste kjøring.

Oppsummering

command- og shell-modulene kjører alltid og rapporterer alltid changed. Foretrekk ordentlige moduler, eller sikre dem med creates, removes eller changed_when. 🛡️

Gratis å komme i gang

Lær deg YAML med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
30
Leksjoner
120

Ofte stilte spørsmål

Er leksjonen «Hvorfor command bryter idempotens» gratis?

Ja – hele teksten i «Hvorfor command bryter idempotens» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Ansible Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Ansible Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Hvorfor command bryter idempotens»?

Fellen med rå shell, og hvordan De unngår den. Du øver på Ansible Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Ansible Academy?

Ingen tidligere erfaring er nødvendig. Ansible Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Hvorfor command bryter idempotens»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Ansible Academy-leksjonen?

Ja. Alle Ansible Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Ønsket tilstand, ikke trinnvise skript
  2. Lese changed kontra ok i resultatet
  3. Hvorfor command bryter idempotens
  4. Kontrollmodus: prøvekjøring med --check
← Tilbake til Ansible Academy