Original YAML
Endret YAML

YAML-diff: sammenlign to YAML-filer på nett

Lim inn to YAML-dokumenter og få en presis diff side om side. Laget for Kubernetes-manifester, GitHub Actions-workflows, Helm values og docker-compose-filer.

Hva er YAML-diff-verktøyet?

Et gratis verktøy i nettleseren for å sammenligne to YAML-dokumenter. Lim inn den gamle versjonen til venstre, den nye til høyre, og forskjellene markeres tegn for tegn. Teksten forlater aldri nettleseren din, noe som teller når du differ manifester med referanser til secrets eller interne hostnames.

Diffen kjører på tegnnivå, samme motor som vårt tekst-diff-verktøy bruker. Editorens YAML-modus håndterer syntaksfarging i tråd med YAML 1.2.2-spesifikasjonen, så block scalars, anchors og flow collections får riktige farger.

Har du noen gang stirret på en diff på 400 linjer i en Helm values.yaml i en pull request og lett etter den ene innrykksfeilen som knakk charten, så er dette verktøyet som finner den på sekunder. Det er også nyttig når kopier-lim mellom Slack og editoren din gjør om mellomrom til tabs, noe YAML nekter å akseptere.

Slik fungerer YAML-diffen i praksis

Diffen kjører på tegnnivå, og deretter grupperer en semantisk oppryddingspass markeringene i meningsfulle blokker i stedet for spredte enkelttegn. Innsettinger vises grønne i høyre rute, slettinger røde til venstre, og tellerne i hver topplinje sier hvor mange ulike redigeringer diffen fant.

YAML har parsings-regler som biter den som behandler formatet som tilgivende. Innrykk er strukturelt ifølge YAML 1.2.2-spec, så et eneste feilplassert mellomrom endrer dokumenttreet. Tabs er forbudt som innrykk, og parseren avviser dem direkte. Implicit typing gjør i YAML 1.1 det usiterte tokenet NO om til den booleanske false, det berømte Norway problem: lister med landskoder mister Norge i stillhet. YAML 1.2 strammet inn reglene slik at bare true, false, null og numeriske former konverteres uten anførselstegn, men mange verktøy parser fortsatt 1.1.

Har du allerede konvertert YAML-en din til JSON for en konsument nedstrøms, tar vårt JSON-diff-verktøy seg av strukturelle ting som nøkkelrekkefølge og kanonikalisering. JSON er en streng delmengde av YAML 1.2, så ethvert gyldig JSON-dokument er også gyldig YAML: den kompatibiliteten er beskrevet i specen og er grunnen til at js-yaml og libyaml begge kan round-trippe JSON uten overraskelser.

Slik sammenligner du YAML i tre steg

To tekstruter, én diff. Ingen registrering, ingen opplasting, ingen tur til serveren.

  1. 1

    Lim inn eller last opp YAML-en din

    Lim inn den gamle YAML-en til venstre, den nye til høyre. Eller klikk på Last opp på en av sidene for å åpne en .yaml- eller .yml-fil direkte. Eksempel-knappen fyller begge ruter med et lite Kubernetes-Deployment, så du først ser verktøyet i drift.

  2. 2

    Sjekk at innrykket samsvarer med det du ville

    YAML bruker bare mellomrom til innrykk, aldri tabs. Har du limt inn fra en chat-klient eller terminal som har gjort mellomrom om til tabs, avviser parseren filen. Editoren markerer tabs og blanktegn på linjeslutt, så du fanger dem før de velter en deploy.

  3. 3

    Les diffen

    Slettinger vises røde til venstre, innsettinger grønne til høyre. Begge ruter ruller i takt, så du kan følge lange manifester uten å miste plassen. Endringstellerne i topplinjene oppsummerer hvor mange ulike redigeringer diffen fant.

Når YAML-diff er det rette verktøyet

Sammenligne Kubernetes Deployment-specs mellom staging og prod

Kjør kubectl get deployment web -o yaml i begge clusters og diff utgangen. Ofte står prod fortsatt med replicas: 2 og en gammel image-tag fordi en utrulling sent i sprinten aldri nådde dit, og en tekst-diff er den raskeste måten å bekrefte det på før du kjører kubectl apply på nytt. Kubernetes-objektmodellen er YAML hele veien, så dette er hverdagscaset.

Diffe GitHub Actions-workflow-YAML

Når en workflow slutter å trigges etter at en branch er omdøpt, eller en jobb plutselig tar 8 minutter lenger, diff .github/workflows/ci.yml mot siste grønne commit. Synderen er som regel et endret on:-filter, en fjernet cache:-nøkkel i actions/setup-node, eller en matrix-oppføring som stille gikk fra node-version: "18" (string) til node-version: 18 (tall) og snublet på type checkeren.

Gjennomgå docker-compose-env-endringer før en deploy

Diff docker-compose.yml mot versjonen i main for å bekrefte hvilke environment:-oppføringer du faktisk endret. Folk limer inn en liste med nye env-variabler og glemmer at en av dem allerede var satt under en annen service, så overriden snur stille et flagg et annet sted. Diffen gjør det åpenbart.

Følge values.yaml for et Helm-chart over releaser

Når du oppgraderer et chart fra 1.8.0 til 2.0.0, diff din values.yaml mot de nye defaultene maintaineren har publisert. Helm merger verdier nøkkel for nøkkel, så en omdøpt toppnøkkel (image.tag som flytter inn under image.repository) faller stille tilbake til chartens default. Diffen får omdøpingen frem før helm upgrade ruller ut en regresjon.

Gjennomgang av OpenAPI- og Swagger-YAML-skjemaer

En diff av en 3 000 linjers openapi.yaml er uleselig når en kodegenerator omsorterer paths alfabetisk. Sett versjonene side om side, og den faktiske endringen kommer frem: et required-felt lagt til i et request-skjema, eller et response der typen stille gikk fra string til integer. Lettere enn å grave i en generert SDK for å finne hvorfor builden ble ødelagt.

Ansible-playbook-diff på tvers av miljøer

Når en playbook fungerer i dev og feiler i prod, diff inventory eller rollens defaults/main.yml mellom de to. En vanlig årsak er en hostvar som aldri ble kopiert, eller en become: yes som i dev sto på rollen, men i prod på en enkelt task. Diffen finner det på sekunder.

YAML hurtigreferanse

Et kort jukseark for parsings-grensetilfellene dette verktøyet oftest får frem. Alt forankret i YAML-spesifikasjonen og reell parser-oppførsel.

TopicWhat this tool does
InnrykkBare mellomrom, og antallet er strukturelt. To og fire mellomrom er begge vanlige; velg én per fil og hold deg til det. YAML-oversikten på Wikipedia har en god oppsummering hvis du vil ha historikken.
TabsForbudt som innrykk ifølge spec. Tillatt inne i skalarverdier. Hvis editoren din legger inn en tab på Enter, still den om til å bruke mellomrom i .yaml- og .yml-filer.
Anchors og aliases&name definerer en anchor; *name refererer til den. Praktisk for å gjenta store blokker som container-env-variabler eller default-service-config uten kopier-lim.
Merge keys<<: *base merger den refererte mappingen inn i den nåværende. En YAML 1.1-funksjon. De fleste parsere, inkludert libyaml, godtar den fortsatt; YAML 1.2-spec droppet den.
Filer med flere dokumenterTre bindestreker (---) skiller dokumenter i samme strøm. Praktisk for å sende flere Kubernetes-objekter gjennom én kubectl apply -f. ... avslutter et dokument.
Block scalars| bevarer linjeskift (literal); > bretter dem til mellomrom. Modifikatorene - og + styrer avsluttende linjeskift. Bruk | for shell-skript og > for lang prosa.
Norway problemUsiterte NO, YES, ON, OFF blir booleans i YAML 1.1. Sett dem i anførselstegn eller bruk en 1.2-parser. Se YAML-typedefinisjonene for hvilke strenger som konverteres.
KodingYAML 1.2-spec krever UTF-8. UTF-16 er tillatt med BOM. I praksis venter verktøy seg UTF-8 uten BOM, så lagre filene slik for å unngå overraskelser.

YAML-diff: vanlige spørsmål

Hjelper eller skader YAMLs følsomhet for blanktegn diffen?

YAML er følsomt for blanktegn, så en vanlig tekst-diff er allerede nyttig: enhver innrykksendring er en strukturell endring, og diffen fanger den. Forskjellen ligger i presentasjonen. YAML-modusen farger anchors, tags, block scalars og flow collections med syntaksfarger, så du på et blunk ser om en endring gjelder en nøkkel, en strengverdi eller et listeelement. Diff-algoritmen under panseret er den samme som i vårt tekst-diff-verktøy.

Hvorfor er YAML så kresent på innrykk og mellomrom?

Fordi innrykket er det eneste som forteller parseren hvilke nøkler som hører til hvilken mapping. YAML 1.2.2-spec definerer en nodes innrykksnivå med antall innledende mellomrom og forbyr tabs som innrykk. Et enkelt ekstra mellomrom forfremmer en nøkkel til en sub-mapping. Den strengheten er prisen for et format uten krøllparenteser og kommaer, og forklaringen på at innrykksfeil sees oftere i YAML enn i JSON.

Hva er Norway problem?

Implicit typing i YAML 1.1 gjør det usiterte tokenet NO om til den booleanske false. Så en liste med landskoder som inneholder NO for Norge blir stille en liste der én oppføring er byttet ut med false. Det samme gjelder YES, ON, OFF og lignende. StrictYAML beskriver det i detalj. Løsningen er å sette verdien i anførselstegn ("NO") eller bruke en parser som følger YAML 1.2 og bare konverterer true, false og null implisitt.

Hvordan virker anchors, aliases og merge keys?

En anchor (&name) merker en node, slik at du senere kan referere til den med en alias (*name) og slipper gjentakelser i lange filer. Merge key (<<: *name) var en YAML 1.1-utvidelse som kopierer alle nøkler fra den refererte mappingen inn i den nåværende, nyttig for å dele felles config mellom services. Merge keys er ikke en del av YAML 1.2, men de fleste parsere, inkludert js-yaml, godtar dem fortsatt for kompatibilitet. Diffen behandler anchors og aliases som ren tekst, så en omdøpt anchor vises rent.

Kan jeg lime inn JSON i YAML-diff-verktøyet?

Ja. JSON er en streng delmengde av YAML 1.2, så ethvert gyldig JSON-dokument er også et gyldig YAML-dokument. Du kan blande de to om du vil, og slippe en flow collection i JSON-stil inn i en fil i blokkstil. For rent JSON-arbeid har vårt JSON-diff-verktøy formaterings- og valideringsknapper som forstår JSON, inkludert pretty-print og sort-keys.

Hvorfor avviser parseren filen min når jeg bruker tabs?

Fordi YAML-spec forbyr tabs som innrykk. Fra 1.2.2-spec: "To maintain portability, tab characters must not be used in indentation." Tabs er tillatt inne i skalarverdier (en streng kan inneholde en tab), bare ikke i begynnelsen av en linje der innrykket måles. Løsningen er et raskt søk-og-erstatt fra tab til to eller fire mellomrom, alt etter hvilken konvensjon filen din allerede følger.

Personvern og hvordan det fungerer

YAML-en din forlater ikke nettleseren. Editor, syntaksfarger og diff kjører alle på maskinen din, lokalt. Ingen analyse av input, ingen logger, ingen tur til skyen. Formatet vi følger er YAML 1.2.2-spesifikasjonen. For å bekrefte at ingenting lastes opp, åpne DevTools og følg med på Network-fanen mens du sammenligner.