ProHoster > Блог > Administrado > Instrukcioj: kiel testi ansibajn rolojn kaj ekscii pri problemoj antaŭ produktado
Instrukcioj: kiel testi ansibajn rolojn kaj ekscii pri problemoj antaŭ produktado
Saluton ĉiuj!
Mi laboras kiel DevOps-inĝeniero en hotela rezerva servo. Ostrovok.ru. En ĉi tiu artikolo, mi volas paroli pri nia sperto pri testado de ansible roloj.
Ĉe Ostrovok.ru, ni uzas ansible kiel agordan administranton. Lastatempe ni venis al la bezono testi rolojn, sed kiel montriĝis, ne ekzistas tiom da iloj por ĉi tio - la plej populara, eble, estas la Molecule-kadro, do ni decidis uzi ĝin. Sed montriĝis, ke lia dokumentado silentas pri multaj faŭltoj. Ni ne povis trovi sufiĉe detalan manlibron en la rusa, do ni decidis skribi ĉi tiun artikolon.
Simpligita priskribo: La molekulo kreas ekzemplon sur la platformo, kiun vi specifas (nubo, virtuala maŝino, ujo; por pliaj detaloj, vidu la sekcion). ŝoforo), prizorgas vian rolon sur ĝi, poste faras testojn kaj forigas la petskribon. En kazo de malsukceso en unu el la ŝtupoj, la Molekulo informos vin pri tio.
Nun pli.
Iom teorio
Konsideru du ĉefajn estaĵojn de la Molekulo: Scenaro kaj Ŝoforo.
scenaro
La skripto enhavas priskribon de kio, kie, kiel kaj en kiu sinsekvo estos farita. Unu rolo povas havi plurajn skriptojn, kaj ĉiu estas dosierujo laŭ la vojo <role>/molecule/<scenario>, kiu enhavas priskribojn de la agoj necesaj por la testo. Skripto devas esti inkluzivita default, kiu aŭtomate kreiĝos se vi pravigos la rolon per Molekulo. La nomoj de la sekvaj skriptoj dependas de vi.
La sekvenco de testaj agoj en skripto nomiĝas Matrico, kaj defaŭlte ĝi estas:
(Paŝoj etikeditaj ?, preterlasita defaŭlte se ne specifita de la uzanto)
lint - kurante linters. Defaŭlte estas uzataj yamllint и flake8,
destroy - forigi okazojn de la lasta lanĉo de la Molekulo (se ekzistas),
dependency? — instalado de la ansible dependeco de la testita rolo,
syntax - kontroli la sintakson de la rolo uzante ansible-playbook --syntax-check,
create - kreante ekzemplon,
prepare? — preparado de la petskribo; ekz. kontroli/instali python2
converge — lanĉo de la testata ludlibro,
idempotence - rekomencante la ludlibron por la provo de idempotenco,
side_effect? - agoj ne rekte rilataj al la rolo, sed necesaj por testoj,
verify - ruli testojn de la rezulta agordo uzante testinfra(defaŭlte)/goss/inspec,
cleanup? - (en novaj versioj) - proksimume, "purigante" la eksteran infrastrukturon trafitan de la Molekulo,
destroy - Forigo de kazo.
Ĉi tiu sekvenco kovras la plej multajn kazojn, sed povas esti ŝanĝita se necese.
Ĉiu el la supraj paŝoj povas esti rulita aparte kun molecule <command>. Sed oni devas kompreni, ke por ĉiu tia kli-komando povas ekzisti sia propra sinsekvo de agoj, kiujn vi povas ekscii per ekzekuto. molecule matrix <command>. Ekzemple, kiam oni rulas la komandon converge (prizorgante la ludlibron sub testo), la sekvaj agoj estos faritaj:
$ molecule matrix converge
...
└── default # название сценария
├── dependency # установка зависимостей
├── create # создание инстанса
├── prepare # преднастройка инстанса
└── converge # прогон плейбука
La sekvenco de ĉi tiuj agoj povas esti redaktita. Se io el la listo jam estas farita, ĝi estos preterlasita. La aktuala stato, same kiel la agordo de la petskriboj, la Molekulo stokas en la dosierujo $TMPDIR/molecule/<role>/<scenario>.
Aldonu paŝojn kun ? vi povas priskribi la deziratajn agojn en la formato ansible-playbook, kaj fari la dosiernomon laŭ la paŝo: prepare.yml/side_effect.yml. Atendu ĉi tiujn dosierojn La molekulo estos en la skriptdosierujo.
ŝoforo
Ŝoforo estas ento kie testaj petskriboj estas kreitaj.
La listo de normaj ŝoforoj por kiuj Molecule havas ŝablonojn pretajn estas jena: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated.
Plejofte, ŝablonoj estas dosieroj create.yml и destroy.yml en la skriptdosierujo, kiu priskribas la kreadon kaj forigon de kazo, respektive.
La esceptoj estas Docker kaj Vagrant, ĉar interagoj kun iliaj moduloj povas okazi sen la menciitaj dosieroj.
Indas reliefigi la Delegitan pelilon, ĉar se ĝi estas uzata en la dosieroj por krei kaj forigi petskribon, nur laboro kun la agordo de petskriboj estas priskribita, la resto devus esti priskribita de la inĝeniero.
La defaŭlta ŝoforo estas Docker.
Nun ni plu praktiku kaj konsideru pliajn funkciojn tie.
Kiel ekuzi
Kiel "saluton mondo", ni provu simplan instalrolon de nginx. Ni elektos docker kiel la pelilon - mi pensas, ke la plimulto el vi havas ĝin instalita (kaj memoru, ke docker estas la defaŭlta pelilo).
La sekva paŝo estas pravalorigi la novan rolon.
Iniciatigo de nova rolo, same kiel nova skripto, estas farita per la komando 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
Ĝi rezultis tipa ansible-rolo. Plue, ĉiuj interagoj kun CLI-Molekuloj estas faritaj de la radiko de la rolo.
Ni vidu kio estas en la rola dosierujo:
> tree molecule/default/
molecule/default/
├── Dockerfile.j2 # Jinja-шаблон для Dockerfile
├── INSTALL.rst. # Немного информации об установке зависимостей сценария
├── molecule.yml # Файл конфигурации
├── playbook.yml # Плейбук запуска роли
└── tests # Директория с тестами стадии verify
└── test_default.py
1 directory, 6 files
Ni analizu la agordon molecule/default/molecule.yml (anstataŭigu nur docker-bildon):
Priskribas la agordon de la petskriboj.
En la kazo de docker kiel ŝoforo, la Molekulo estas ripetata super ĉi tiu sekcio, kaj ĉiu elemento de la listo estas havebla en Dockerfile.j2 kiel variablo item.
En la kazo de ŝoforo kiu postulas create.yml и destroy.yml, la sekcio disponeblas en ili kiel molecule_yml.platforms, kaj ripetoj super ĝi jam estas priskribitaj en ĉi tiuj dosieroj.
Ĉar la Molekulo disponigas kontrolon de okazoj al ansibaj moduloj, la listo de eblaj agordoj ankaŭ devus esti serĉita tie. Por docker, ekzemple, la modulo estas uzata docker_container_module. En kiuj moduloj estas uzataj en aliaj ŝoforoj troviĝas dokumentado.
Same kiel ekzemploj de la uzo de diversaj ŝoforoj troveblas en la provoj de la Molekulo mem.
Anstataŭigu ĉi tie centos:7 sur ubuntu.
provizanto
"Provizanto" - ento kiu administras petskribojn. En la kazo de Molecule, ĉi tio estas ansible, subteno por aliaj ne estas planita, do ĉi tiu sekcio povas esti nomita ansible etendita agordo kun averto.
Ĉi tie vi povas specifi multajn aferojn, mi reliefigos la ĉefajn punktojn, laŭ mi:
ludlibroj: vi povas specifi kiuj ludlibroj estu uzataj en certaj stadioj.
Nomo kaj priskribo de skriptosekvencoj.
Vi povas ŝanĝi la defaŭltan agan matricon de iu ajn komando aldonante la ŝlosilon <command>_sequence kaj kiel valoron por ĝi difinante la liston de paŝoj, kiujn ni bezonas.
Ni diru, ke ni volas ŝanĝi la sekvencon de agoj dum rulado de la ludlibro prizorga komando: molecule converge
Nia simpla rolo estis provita senprobleme.
Indas memori, ke se estas problemoj dum la laboro molecule test, tiam se vi ne ŝanĝis la defaŭltan sekvencon, la Molekulo forigos la kazon.
La sekvaj komandoj estas utilaj por sencimigi:
> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge # Оставляет инстанс после прогона тестируемой роли.
> molecule login # Зайти в созданный инстанс.
> molecule --help # Полный список команд.
Ekzistanta Rolo
Aldoni novan skripton al ekzistanta rolo estas el la rola dosierujo kun la jenaj komandoj:
# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>
Se ĉi tio estas la unua scenaro en la rolo, tiam la parametro -s povas esti preterlasita ĉar ĝi kreos skripton default.
konkludo
Kiel vi povas vidi, la Molekulo ne estas tre kompleksa, kaj uzante viajn proprajn ŝablonojn, deploji novan skripton povas reduktiĝi al redaktado de variabloj en la ludlibroj pri kreado kaj forigo de petskriboj. La molekulo integriĝas perfekte kun CI-sistemoj, kio ebligas al vi pliigi la rapidecon de evoluo reduktante la tempon por manlibrotestado de ludlibroj.
Dankon pro via atento. Se vi havas sperton pri testado de ansibaj roloj, kaj ĝi ne rilatas al la Molekulo, diru al ni pri ĝi en la komentoj!