ProHoster > Dienoraštis > Administravimas > Instrukcijos: kaip išbandyti galimus vaidmenis ir sužinoti apie problemas prieš pradedant gaminti
Instrukcijos: kaip išbandyti galimus vaidmenis ir sužinoti apie problemas prieš pradedant gaminti
Sveiki visi!
Dirbu DevOps inžinieriumi viešbučių užsakymo tarnyboje. Ostrovok.ru. Šiame straipsnyje noriu pakalbėti apie mūsų patirtį išbandant galimus vaidmenis.
Ostrovok.ru kaip konfigūracijos tvarkyklę naudojame ansible. Neseniai priėjome prie poreikio išbandyti vaidmenis, tačiau, kaip paaiškėjo, tam priemonių nėra daug – populiariausia, ko gero, yra „Molecule“ karkasas, todėl nusprendėme jį panaudoti. Tačiau paaiškėjo, kad jo dokumentuose nekalbama apie daugybę spąstų. Neradome pakankamai išsamaus vadovo rusų kalba, todėl nusprendėme parašyti šį straipsnį.
molekulė
Molekulė - sistema, padedanti išbandyti galimus vaidmenis.
Supaprastintas aprašymas: Molekulė sukuria egzempliorių jūsų nurodytoje platformoje (debesyje, virtualioje mašinoje, konteineryje; daugiau informacijos žr. Vairuotojas), vykdo jūsų vaidmenį, tada atlieka testus ir ištrina egzempliorių. Jei viename iš žingsnių nepavyks, Molekulė jus apie tai informuos.
Dabar daugiau.
Teorijos tiek
Apsvarstykite du pagrindinius molekulės objektus: scenarijų ir tvarkyklę.
Scenarijus
Scenarijuje yra aprašyta, kas, kur, kaip ir kokia seka bus atliekama. Viename vaidmenyje gali būti keli scenarijai, ir kiekvienas yra katalogas kelyje <role>/molecule/<scenario>, kuriame pateikiami testui atlikti reikalingų veiksmų aprašymai. Scenarijus turi būti įtrauktas default, kuris bus automatiškai sukurtas, jei inicijuosite vaidmenį naudodami molekulę. Toliau nurodytų scenarijų pavadinimai priklauso nuo jūsų.
Testavimo veiksmų seka scenarijuje vadinama matricair pagal numatytuosius nustatymus yra:
(Žingsniai pažymėti ?, pagal numatytuosius nustatymus praleistas, jei vartotojas nenurodė)
lint - bėgiojančios lintės. Pagal numatytuosius nustatymus naudojami yamllint и flake8,
destroy - egzempliorių ištrynimas iš paskutinio molekulės paleidimo (jei yra),
syntax - vaidmens sintaksės tikrinimas naudojant ansible-playbook --syntax-check,
create - sukurti pavyzdį,
prepare? — bylos parengimas; pvz., patikrinkite / įdiekite python2
converge — bandomojo plano paleidimas,
idempotence - iš naujo paleisti idempotencijos testo planą,
side_effect? - veiksmai, kurie nėra tiesiogiai susiję su vaidmeniu, bet būtini testams,
verify — gautos konfigūracijos bandymų vykdymas naudojant testinfra(numatytas) /goss/inspec,
cleanup? - (naujose versijose) - grubiai tariant, "išvalyti" išorinę infrastruktūrą, kurią veikia Molekulė,
destroy – egzemplioriaus ištrynimas.
Ši seka apima daugumą atvejų, tačiau prireikus ją galima pakeisti.
Kiekvieną iš aukščiau nurodytų veiksmų galima atlikti atskirai molecule <command>. Tačiau turėtumėte suprasti, kad kiekvienai tokiai cli komandai gali būti sava veiksmų seka, kurią galite sužinoti paleidę molecule matrix <command>. Pavyzdžiui, kai vykdoma komanda converge (paleidžiant išbandytą knygelę) bus atlikti šie veiksmai:
$ molecule matrix converge
...
└── default # название сценария
├── dependency # установка зависимостей
├── create # создание инстанса
├── prepare # преднастройка инстанса
└── converge # прогон плейбука
Šių veiksmų seką galima redaguoti. Jei kažkas iš sąrašo jau padaryta, tai bus praleista. Dabartinę būseną, taip pat egzempliorių konfigūraciją, „Molecule“ saugo kataloge $TMPDIR/molecule/<role>/<scenario>.
Pridėkite žingsnių su ? galite apibūdinti norimus veiksmus ansible-playbook formatu ir sukurti failo pavadinimą pagal veiksmą: prepare.yml/side_effect.yml. Tikėtis, kad šie „Molecule“ failai bus scenarijaus aplanke.
Vairuotojas
Vairuotojas yra subjektas, kuriame sukuriami bandomieji egzemplioriai.
Standartinių tvarkyklių, kurioms Molecule turi paruoštus šablonus, sąrašas yra: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated.
Daugeliu atvejų šablonai yra failai create.yml и destroy.yml scenarijaus aplanke, kuriame atitinkamai aprašomas egzemplioriaus kūrimas ir ištrynimas.
Išimtys yra „Docker“ ir „Vagrant“, nes sąveika su jų moduliais gali vykti be minėtų failų.
Verta pabrėžti deleguotą tvarkyklę, nes jei ji naudojama egzemplioriaus kūrimo ir ištrynimo failuose, aprašomas tik darbas su egzempliorių konfigūracija, visa kita turėtų aprašyti inžinierius.
Numatytoji tvarkyklė yra „Docker“.
Dabar pereikime prie praktikos ir apsvarstykime kitas funkcijas.
Darbo pradžia
Kaip „labas pasaulis“, išbandykime paprastą „nginx“ diegimo vaidmenį. Mes pasirinksime docker kaip tvarkyklę – manau, kad dauguma jūsų yra ją įdiegę (ir atminkite, kad docker yra numatytoji tvarkyklė).
Kitas žingsnis yra naujo vaidmens inicijavimas.
Naujo vaidmens inicijavimas, taip pat naujas scenarijus, atliekamas naudojant komandą molecule init <params>:
> molecule init role -r nginx
--> Initializing new role nginx...
Initialized role in <path>/nginx successfully.
> cd nginx
> tree -L 1
.
├── README.md
├── defaults
├── handlers
├── meta
├── molecule
├── tasks
└── vars
6 directories, 1 file
Rezultatas yra tipiškas tinkamas vaidmuo. Be to, visos sąveikos su Molecules CLI yra atliekamos iš vaidmens šaknies.
Pažiūrėkime, kas yra vaidmenų kataloge:
> tree molecule/default/
molecule/default/
├── Dockerfile.j2 # Jinja-шаблон для Dockerfile
├── INSTALL.rst. # Немного информации об установке зависимостей сценария
├── molecule.yml # Файл конфигурации
├── playbook.yml # Плейбук запуска роли
└── tests # Директория с тестами стадии verify
└── test_default.py
1 directory, 6 files
Pažiūrėkime į konfigūraciją molecule/default/molecule.yml (pakeisti tik „Docker“ vaizdą):
Shell yra tik komandų apvalkalas, kuris naudojamas tuo atveju, jei galaktika ir gilt nepatenkina jūsų poreikių.
Ilgai čia neužsibūsiu, tai pakankamai aprašyta dokumentacija.
vairuotojas
Vairuotojo vardas. Mūsų yra dokeris.
pūkuotas
Linter yra yamllint.
Naudingos parinktys šioje konfigūracijos dalyje yra galimybė nurodyti yamllint konfigūracijos failą, persiųsti aplinkos kintamuosius arba išjungti linterį:
Aprašoma egzempliorių konfigūracija.
Jei dokeris yra tvarkyklė, molekulė kartojama šioje dalyje, o kiekvienas sąrašo elementas yra pasiekiamas Dockerfile.j2 kaip kintamasis item.
Jei vairuotojas reikalauja create.yml и destroy.yml, skyrius juose yra kaip molecule_yml.platforms, o iteracijos per jį jau aprašytos šiuose failuose.
Kadangi Molecule teikia egzempliorių valdymą Ansible moduliams, ten turėtumėte ieškoti galimų nustatymų sąrašo. Pavyzdžiui, dokeriui naudojamas modulis docker_container_module. Kurie moduliai naudojami kitose tvarkyklėse, galite rasti dokumentacija.
Taip pat galima rasti įvairių tvarkyklių naudojimo pavyzdžių pačios molekulės bandymuose.
Pakeiskite čia centos:7 apie ubuntu.
aprūpintojas
„Teikėjas“ yra subjektas, valdantis egzempliorius. Molecule atveju tai įmanoma, kitų parama neplanuojama, todėl šią sekciją su išlyga galima pavadinti išplėstine galima konfigūracija.
Čia galite nurodyti daug dalykų, aš išskirsiu pagrindinius dalykus, mano nuomone:
žaidimų knygas: galite nurodyti, kurios žaidimo knygos turėtų būti naudojamos tam tikrais etapais.
Scenarijų sekų pavadinimas ir aprašymas.
Galite pakeisti numatytąją komandos veiksmų matricą pridėdami raktą <command>_sequence ir kaip jo vertę apibrėžiant mums reikalingų veiksmų sąrašą.
Tarkime, kad norime pakeisti veiksmų seką, kai vykdoma žaidimo knygos vykdymo komanda: molecule converge
Mūsų paprastas vaidmuo buvo išbandytas be problemų.
Verta prisiminti, kad jei veikimo metu kyla problemų molecule test, tada, jei nepakeitėte standartinės sekos, „Molecule“ ištrins egzempliorių.
Derinant naudingos šios komandos:
> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge # Оставляет инстанс после прогона тестируемой роли.
> molecule login # Зайти в созданный инстанс.
> molecule --help # Полный список команд.
Esamas vaidmuo
Naujo scenarijaus pridėjimas prie esamo vaidmens yra iš vaidmenų katalogo su šiomis komandomis:
# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>
Jei tai pirmasis vaidmens scenarijus, tada parametras -s galima praleisti, nes bus sukurtas scenarijus default.
išvada
Kaip matote, molekulė nėra labai sudėtinga, o naudojant savo šablonus, naujo scenarijaus diegimas gali būti sumažintas iki kintamųjų redagavimo egzempliorių kūrimo ir ištrynimo knygelėse. Molekulė sklandžiai integruojasi su CI sistemomis, o tai leidžia padidinti kūrimo greitį sumažinant rankinio žaidimų knygelių testavimo laiką.
Ačiū už dėmesį. Jei turite patirties išbandydami įmanomus vaidmenis ir tai nesusiję su molekule, pasakykite apie tai komentaruose!