tenv v2.0: Versijų tvarkyklės aiškaus elgesio svarba
Aiškus IAC versijų tvarkytojų elgesys yra labai svarbus. Tai ypač svarbu „Terraform“ ir „OpenTofu“ srityje, nes įrankių atnaujinimas gali sunaikinti arba sugadinti visą valdomą infrastruktūrą. Norėdami apsaugoti vartotojus nuo netikėtų atnaujinimų, visos versijų tvarkyklės turi dirbti aiškiai ir be jokių vidinių burtų, kurių neįmanoma paaiškinti giliai nesigilinus į šaltinius.
tenv yra universali versijų tvarkyklė
Kuriant tenv, mūsų komanda atrado nemalonų staigmeną su Terragrunt ir tenv, dėl ko galėjo kilti rimtų problemų. Naujai įdiegus „Linux“ sistemą, kai vienas iš mūsų vartotojų bandė paleisti „Terragrunt“, vykdymas baigėsi naudojant „OpenTofu“, o ne „Terraform“, be išankstinio įspėjimo. Gamybinėje aplinkoje tai gali sukelti rimtą Terraform būsenos korupciją, bet, laimei, tai buvo testavimo aplinka. Prieš pažvelgdami į pagrindinę šios problemos priežastį, turiu paaiškinti, kaip tenv veikia.
„Tenv“ valdo visus įrankius, suvyniodama juos į papildomą dvejetainį failą, kuris yra pradinio įrankio tarpinis serveris. Tai reiškia, kad negalite įdiegti „Terraform“ ar „OpenTofu“ įprastoje „Linux“ mašinoje kartu su tenv (išskyrus „NixOS“ dėklą). Savo įrankyje pateikiame dvejetainį failą tokiu pačiu pavadinimu kaip ir įrankis (Terraform/OpenTofu/Terragrunt/Atmos), kuriame įdiegiame tarpinio serverio šabloną. Tai buvo reikalinga, nes supaprastina versijų valdymą ir leidžia mums pridėti naujų galimybių prie automatinio versijų paieškos ir diegimo tvarkymo.
Taigi, žinodami, kad tenv yra pagrįsta paskesnio tarpinio serverio architektūra, esame pasirengę grįžti prie problemos. Kodėl mūsų naudotojo vykdymas buvo atliktas naudojant „OpenTofu“, o ne „Terraform“? Atsakymas susideda iš dviejų dalių:
-
„Terragrunt“ pradėjo naudoti „OpenTofu“ kaip numatytąjį IAC įrankį, tačiau tai nebuvo pagrindinis leidimas; Vietoj to, jis buvo pateiktas kaip pataisa ir vartotojai nesitikėjo, kad elgesys skirsis. Pradinę problemą galite rasti adresu https://github.com/gruntwork-io/terragrunt/issues/3172.
-
Kai „Terragrunt“ paskambino „OpenTofu“ pagal naują numatytąją elgseną, jis naudojo tenv tarpinį serverį, kad patikrintų reikiamą „OpenTofu“ versiją ir ją įdiegtų automatiškai.
nors TERRAGRUNT_TFPATH
nustatymas gali kontroliuoti elgseną, vartotojai nežinojo apie „Terragrunt“ pakeitimą ir nustebo pamatę „OpenTotu“ vykdymo pabaigoje. Bet kodėl „OpenTofu“ paleido, jei vartotojai to neturėjo savo sistemoje? Čia mes sprendžiame antrąjį iškilusį klausimą. Tenv kūrimo pradžioje atkartojome daugelį tfenv įrankio funkcijų.
Viena iš šių funkcijų buvo automatinis įrankių diegimas, kurį valdo TFENV_AUTO_INSTALL
aplinkos kintamasis ir yra įjungtas pagal numatytuosius nustatymus. Tenv taip pat turi TENV_AUTO_INSTALL
kintamasis, kuris taip pat yra teisingas pagal numatytuosius nustatymus, nebent minėtas atvejis nebuvo aptiktas.
Vartotojai, kurie naudojo „Terraform / OpenTofu“ be „Terragrunt“ per tenv, galėjo susidurti su automatiniu diegimu, kai, pavyzdžiui, perjungė įrankio versiją naudodami šią komandą:
tenv tf use 1.5.3
tenv tofu use 1.6.1
The use
komanda įdiegė reikiamą versiją, net jei jos nebuvo operacinėje sistemoje vietoje.
Po trumpos „GitHub“ diskusijos mūsų komanda nusprendė pagal numatytuosius nustatymus išjungti automatinį diegimą ir išleisti šį nedidelį pakeitimą kaip naują, pagrindinę tenv versiją. Mes nepadarėme didelių programos pakeitimų, neatnaujinome kalbos versijos sistemos ir atnaujinome tik numatytąjį kintamąjį, nuspręsdami, kad vartotojai turėtų suprasti, kad pasikeitė vienas iš dažniausiai naudojamų ir svarbiausių elgsenų.
Įdomu tai, kad diskusijos metu nesutarėme, ar vartotojai turėtų skaityti README, ar dokumentaciją, bet ar jums tai patinka, ar ne, tiesa, kad žmonės neskaito dokumentų, nebent jie turi sunkumų. Kaip „tofuutils“ komanda negalime sutikti su galimybe, kad vartotojas per klaidą panaudos „OpenTofu“ realioje gamybos aplinkoje ir sugadins būseną arba debesies aplinką.
Galiausiai norėčiau dar kartą pabrėžti keletą dalykų:
- Įdiekite intuityvų elgesį savo įrankyje.
- Atsižvelkite į naudotojo patirtį ir atminkite, kad daugelis žmonių neskaito vadovų.
- Nesijaudinkite dėl pagrindinės versijos išleidimo, jei padarėte lūžtantį pakeitimą.
- Programavime pageidautina aiški, o ne numanoma, ypač kai kalbama apie būsenai jautrius įrankius.