Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Objekt nasazení, který porušuje svůj uzavřený kontrakt — klíčem, který kontrakt nemá, jinou verzí schématu, chybějícím polem, rozhraním, portem, počtem strojů nebo health routou, které by nemohly fungovat, hodnotou, která vypadá jako přihlašovací údaj, nebo identitou, o kterou se hlásí dva soubory — doctor odmítne s uvedením důvodu

Nasazení spustitelného souboru je jeden objekt YAML pod sekcí nasazení vrstvy,

deklarovaný stavdeklarovaný stav: zaručeno Deklarováno jako deterministické a blokující, implementováno a s uvedeným behaviorálním testem, který to má dokázat. Zda to zaznamenaný běh podporuje, říká verdikt důkazů zobrazený vedle.

zaznamenané důkazyzaznamenané důkazy: nespuštěno Deklarováno jako zaručené, ale nepodložené zaznamenaným během: test je pojmenován, ale žádný úspěšný běh nad současnými vstupy zaznamenán není. jak se zaznamenávají důkazy

Toto je shellová polovina kontraktu, rozhodnutá bez přítomného toolchainu Rustu. Sémantická polovina, tedy health route, kterou nezaregistrovala žádná schopnost, nebo balíček, který workspace neobsahuje, patří do apps/majordomus-cli/src/deploy/mod.rs a dokazují ji testy tohoto modulu, ne tento případ. Případ páruje každé odmítnutí podle jeho důvodu; nevyžaduje, aby nález jmenoval objekt, nekontroluje exit status doctor a neukazuje, že objekt dorazí do indexu nebo výpisu objektů, takže nic z toho se zde netvrdí.

Co to znamená

Nasazení spustitelného souboru je jeden objekt YAML v sekci nasazení vrstvy, čtený proti kontraktu deployment/v1. majordomus doctor odmítne objekt, který by nemohl fungovat nebo nesmí existovat, se zjištěním FAIL v kategorii deployment, které pojmenuje důvod:

  • klíč, který kontrakt nemá, včetně pole vymyšleného pro uložení tokenu;
  • verze schématu jiná než ta, kterou tento nástroj čte;
  • pole, které uvádí každé nasazení, chybí;
  • naslouchací rozhraní, které není ani loopback, ani all;
  • port mimo neprivilegovaný rozsah, protože nasazený proces neběží jako root;
  • běží víc strojů, než nasazení má;
  • zdravotní trasa zapsaná jako URL místo cesty;
  • hodnota, která vypadá jako přihlašovací údaj, v poli, které existuje;
  • dva objekty nárokující jednu identitu.

init založí sekci s jejím kontraktem a bez objektů, prázdná sekce není nález a platný objekt přidaný jako jeden soubor je přijat a započítán pomocí doctor.

Princip

mj_validate_deployments v lib/deployment.sh je validátor, který deklaruje vendorované pravidlo majordomus.deployment-contract, dispatchovaný z doctor a watch. Zploští každý objekt, porovná jeho klíče s share/allow/deployment.txt (allow-list generovaný ze schématu smlouvy, nikdy ne ručně psaný) a pak kontroluje verzi schématu, povinná pole, rozhraní, rozsah portů, počty strojů, health routy, hodnoty odpovídající známým prefixům přihlašovacích údajů a už viděné identity. Každé porušení je nález FAIL v kategorii deployment s důvodem a příkazem, který ukáže dotčené řádky.

test/cases/84_deployment_contract.sh to dokazuje mutací. Inicializuje repozitář, potvrdí, že prázdná sekce není nález, přidá jedno platné nasazení a potvrdí, že doctor je přijme a započítá, pak na tento objekt postupně aplikuje každé výše uvedené porušení a vyžaduje, aby je doctor odmítlo s pojmenovaným důvodem. Kontroluje také, že allow-list je projekcí schématu a že obnovený objekt je znovu přijat, takže o každém odmítnutí je známo, že pochází z mutace, a ne z tvaru fixture.

Jak to vidět

majordomus doctor                                  # FAIL deployment <object> — <reason>
bash test/run.sh 84_deployment_contract            # the refusals, one mutation at a time
cat share/allow/deployment.txt                     # the keys the contract allows

Co nepokrývá

Případ páruje každé odmítnutí podle jeho důvodu, ne podle objektu, který jmenuje. Nález, který jmenoval špatný soubor nebo žádný, by jím stále prošel, takže to, který objekt odmítnutí jmenuje, není součástí této záruky. Nekontroluje stavový kód, který doctor při odmítnutí vrací, a neukazuje, že přijatý objekt dosáhne indexu nebo výpisu objektů.

Toto je ta polovina smlouvy, která se rozhoduje bez toolchainu Rustu. Zda nasazení funguje právě proti tomuto repozitáři, zda jeho health trasy jsou trasy, které schopnost registruje, a zda jeho vstupy balíčku a buildu existují v pracovním prostoru, rozhoduje apps/majordomus-cli/src/deploy/mod.rs a dokazují testy onoho modulu, ne tento případ.

Kontrola přihlašovacích údajů porovnává prefixy známých formátů tokenů. Tajemství ve formátu, který nezná, zapsané do pole, které kontrakt dovoluje, se jako takové nepozná.

Nedokazuje, že vygenerovaná definice kontejneru a její ignore soubor odpovídají objektu; to drží majordomus generate --check a dokazuje to jeho vlastní případ. Nic tu nekontaktuje hostingového poskytovatele ani nedokazuje, že se nasazení, jakmile je přijato, spustí.

Proč existuje

Nasazení, které nemůže fungovat, má stát selhávající test, ne neúspěšný rollout, a přihlašovací údaj nesmí nikdy skončit v souboru, který nese každý klon repozitáře. Obě selhání je levné najít, dokud se objekt píše, a drahé po nasazení, takže smlouva je uzavřená a kontroluje se lokálně a každé odmítnutí jmenuje svůj důvod, takže oprava je jedna úprava, ne vyšetřování.

Detail vykreslený z docs/claims/deployment-contract-refuses-by-name.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Objekt nasazení, který porušuje svůj uzavřený kontrakt — klíčem, který kontrakt nemá, jinou verzí schématu, chybějícím polem, rozhraním, portem, počtem strojů nebo health routou, které by nemohly fungovat, hodnotou, která vypadá jako přihlašovací údaj, nebo identitou, o kterou se hlásí dva soubory — doctor odmítne s uvedením důvodu

    Žádná funkce ani odpovědnost v README ji nepojmenovává; tato stránka je místo, kde je uvedena.

  2. 2 · kanonické tvrzení

    deployment-contract-refuses-by-namedeklarovaný stav: zaručeno v docs/CLAIMS.yaml

    Definováno v .ai/repo/rules/vendor/majordomus/rules/deployment-contract.v1.md

  3. 3 · implementace

    lib/deployment.sh

  4. 4 · test a scénáře

    Test: test/cases/84_deployment_contract.sh

  5. 5 · zaznamenané běhy

    zaznamenané důkazy: nespuštěno jak se zaznamenávají důkazy

Ověřte si to sami

Test běží v jednorázovém dočasném repozitáři a ověřuje chování, ne řetězec ve zdrojovém kódu.

z klonu repozitáře
bash test/run.sh 84_deployment_contract

Prohledává názvy a popisy všech stránek, které tento web publikuje.