Spring til indhold

Har bygget virksomhedens egen infrastruktur som 19 Ansible‑playbooks og 34 roller fordelt på 12.065 linjer YAML, der konvergerer en levende vært til en erklæret tilstand med hvert play idempotent.

Situation. Engineer ApS driver sit eget miljø — en webtilstedeværelse, en git‑forge, en database, sikkerhedskopier, mailtransport og DNS — og der var ingen at overdrage driften til. Et enmandsfirma har de samme fejltilstande som et stort og ingen af redundansen, hvilket gør det sædvanlige svar, en person der husker hvordan værten blev sat op, til den mindst tilgængelige mulighed der findes.

Opgave. Hele miljøet skulle beskrives i et repository frem for i et hoved, og beskrives i en form der konvergerer en rigtig vært frem for at dokumentere en.

Handling. Det der voksede ud af det er 19 playbooks og 34 roller fordelt på 12.065 linjer YAML. Formen betyder mere end størrelsen. Sammensætning er data frem for flag: en vært ligger i en tier‑gruppe, hvis variabler erklærer hvilke roller den kører, så provisionering uden argumenter konvergerer hver vært til dens erklærede tilstand. Idempotens er en kontrakt frem for en ambition — en konvergeret vært rapporterer nul ændringer, og et play der ikke kan sige det, er ikke færdigt. Fire kommandonavnerum holder løfterne adskilt: en gate der ikke rører nogen vært, rapporter der læser en og aldrig ændrer den, provisionering der ændrer en vært så den matcher repositoryet, og verifikation der ændrer en vært med vilje og returnerer en dom.

Resultat. Miljøet kan reproduceres fra repositoryet, og de dele af det, der kun nogensinde var sande fordi nogen huskede dem, er nu assertions der fejler en kørsel. Prisen er reel: hver ændring er langsommere at lave end at redigere en fil på serveren ville være, og en konvergering der halvt gennemføres er værre end en der nægter, hvilket er grunden til at et preflight‑play senere blev sat foran den. Den afvejning blev truffet bevidst, og den har holdt.