ProHoster > Օրագիր > Վարչակազմը > Հրահանգներ. ինչպես փորձարկել անլուրջ դերերը և պարզել խնդիրների մասին մինչև արտադրությունը
Հրահանգներ. ինչպես փորձարկել անլուրջ դերերը և պարզել խնդիրների մասին մինչև արտադրությունը
Hello everyone!
Ես աշխատում եմ որպես DevOps-ի ինժեներ հյուրանոցների ամրագրման ծառայությունում: Ostrovok.ru. Այս հոդվածում ես ուզում եմ խոսել անսխալ դերերի փորձարկման մեր փորձի մասին:
Ostrovok.ru-ում մենք օգտագործում ենք ansible-ը որպես կոնֆիգուրացիայի կառավարիչ: Վերջերս մենք հասանք դերերը փորձարկելու անհրաժեշտությանը, բայց, ինչպես պարզվեց, դրա համար այդքան էլ շատ գործիքներ չկան. ամենահայտնին, հավանաբար, Molecule շրջանակն է, ուստի մենք որոշեցինք օգտագործել այն: Բայց պարզվեց, որ նրա փաստաթղթավորումը լռում է բազմաթիվ ծուղակների մասին։ Մենք չկարողացանք գտնել բավականաչափ մանրամասն ձեռնարկ ռուսերեն լեզվով, ուստի որոշեցինք գրել այս հոդվածը:
Մոլեկուլ
Մոլեկուլ - շրջանակ, որը կօգնի ստուգել իրական դերերը:
Պարզեցված նկարագրություն. Մոլեկուլը ստեղծում է օրինակ ձեր նշած հարթակում (ամպ, վիրտուալ մեքենա, կոնտեյներ; լրացուցիչ մանրամասների համար տե՛ս բաժինը Վարորդ), գործարկում է ձեր դերը դրա վրա, այնուհետև կատարում է թեստեր և ջնջում օրինակը: Քայլերից մեկի ձախողման դեպքում Մոլեկուլը ձեզ կտեղեկացնի այդ մասին:
Հիմա ավելին:
Մի քիչ տեսություն
Դիտարկենք մոլեկուլի երկու հիմնական միավորները՝ Սցենարը և Վարորդը:
Սցենար
Սցենարը պարունակում է նկարագրություն, թե ինչ, որտեղ, ինչպես և ինչ հաջորդականությամբ է կատարվելու։ Մեկ դերը կարող է ունենալ մի քանի սցենար, և յուրաքանչյուրը ճանապարհի երկայնքով գրացուցակ է <role>/molecule/<scenario>, որը պարունակում է թեստի համար անհրաժեշտ գործողությունների նկարագրություններ: Սցենարը պետք է ներառվի default, որը ավտոմատ կերպով կստեղծվի, եթե դերը նախաստորագրեք մոլեկուլով: Հետևյալ սցենարների անունները կախված են ձեզանից:
Ստուգման գործողությունների հաջորդականությունը սցենարում կոչվում է matrix, և լռելյայն դա հետևյալն է.
(Քայլերը նշված են ?, լռելյայն բաց թողնված, եթե օգտագործողի կողմից նշված չէ)
lint - հոսող գլանափաթեթներ: Լռելյայն օգտագործվում են yamllint и flake8,
destroy - մոլեկուլի վերջին գործարկումից (եթե այդպիսիք կան) օրինակների ջնջում
dependency? - ստուգված դերի զգալի կախվածության տեղադրում,
syntax - օգտագործելով դերի շարահյուսությունը ansible-playbook --syntax-check,
create - ստեղծել օրինակ,
prepare? - օրինակի պատրաստում; օրինակ՝ ստուգել/տեղադրել python2
converge - փորձարկվող խաղային գրքի գործարկում,
idempotence - վերսկսել խաղատախտակը անգործունակության թեստի համար,
side_effect? - գործողություններ, որոնք անմիջականորեն կապված չեն դերի հետ, բայց անհրաժեշտ են թեստերի համար,
verify - արդյունքում ստացված կոնֆիգուրացիայի փորձարկումներ օգտագործելով testinfra(կանխադրված) /goss/inspec,
cleanup? - (նոր տարբերակներում) - կոպիտ ասած, «մաքրում» է մոլեկուլից տուժած արտաքին ենթակառուցվածքը,
destroy - Օրինակի ջնջում:
Այս հաջորդականությունը ընդգրկում է դեպքերի մեծ մասը, բայց անհրաժեշտության դեպքում կարող է փոփոխվել:
Վերոհիշյալ քայլերից յուրաքանչյուրը կարող է իրականացվել առանձին molecule <command>. Բայց պետք է հասկանալ, որ յուրաքանչյուր նման cli-հրամանի համար կարող է լինել իր գործողությունների հաջորդականությունը, որը դուք կարող եք պարզել կատարելով. molecule matrix <command>. Օրինակ՝ հրամանը գործարկելիս converge (փորձարկվող խաղագիրքը գործարկելով), կկատարվեն հետևյալ գործողությունները.
$ molecule matrix converge
...
└── default # название сценария
├── dependency # установка зависимостей
├── create # создание инстанса
├── prepare # преднастройка инстанса
└── converge # прогон плейбука
Այս գործողությունների հաջորդականությունը կարող է խմբագրվել: Եթե ցուցակից ինչ-որ բան արդեն արված է, այն բաց կթողնեն: Ընթացիկ վիճակը, ինչպես նաև օրինակների կազմաձևումը, Molecule-ը պահում է գրացուցակում $TMPDIR/molecule/<role>/<scenario>.
Ավելացրեք քայլերի հետ ? Դուք կարող եք նկարագրել ցանկալի գործողությունները ansible-playbook ձևաչափով և կատարել ֆայլի անվանումը ըստ քայլի՝ prepare.yml/side_effect.yml. Սպասեք այս ֆայլերին Մոլեկուլը կլինի սցենարի թղթապանակում:
Վարորդ
Վարորդը մի միավոր է, որտեղ ստեղծվում են փորձարկման օրինակներ:
Ստանդարտ դրայվերների ցանկը, որոնց համար Molecule-ը պատրաստի կաղապարներ ունի, հետևյալն է՝ Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated:
Շատ դեպքերում կաղապարները ֆայլեր են create.yml и destroy.yml սցենարի թղթապանակում, որը նկարագրում է համապատասխանաբար օրինակի ստեղծումը և ջնջումը:
Բացառություն են կազմում Docker-ը և Vagrant-ը, քանի որ նրանց մոդուլների հետ փոխազդեցությունը կարող է տեղի ունենալ առանց վերը նշված ֆայլերի:
Արժե առանձնացնել Պատվիրակված դրայվերը, քանի որ եթե այն օգտագործվում է ֆայլերում օրինակ ստեղծելու և ջնջելու համար, նկարագրված է միայն օրինակների կազմաձևման հետ աշխատանքը, մնացածը պետք է նկարագրի ինժեները:
Նախնական դրայվերը Docker-ն է:
Այժմ եկեք անցնենք պրակտիկային և քննարկենք այնտեղ հետագա առանձնահատկությունները:
Ինչից սկսել
Որպես «բարև աշխարհ», եկեք փորձարկենք nginx տեղադրման պարզ դերը: Մենք կընտրենք docker-ը որպես վարորդ. կարծում եմ, որ ձեզանից շատերն այն տեղադրել են (և հիշեք, որ դոկերը լռելյայն դրայվերն է):
Եկեք պատրաստվենք virtualenv և տեղադրել դրա մեջ molecule:
Հաջորդ քայլը նոր դերի սկզբնավորումն է:
Նոր դերի, ինչպես նաև նոր սցենարի սկզբնավորումն իրականացվում է հրամանի միջոցով 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
Ստացվեց տիպիկ անսիբլ-դեր: Ավելին, CLI մոլեկուլների հետ բոլոր փոխազդեցությունները կատարվում են դերի արմատից:
Տեսնենք, թե ինչ կա դերերի գրացուցակում.
> tree molecule/default/
molecule/default/
├── Dockerfile.j2 # Jinja-шаблон для Dockerfile
├── INSTALL.rst. # Немного информации об установке зависимостей сценария
├── molecule.yml # Файл конфигурации
├── playbook.yml # Плейбук запуска роли
└── tests # Директория с тестами стадии verify
└── test_default.py
1 directory, 6 files
Եկեք վերլուծենք կազմաձևը molecule/default/molecule.yml (փոխարինեք միայն դոկերի պատկերը):
Նկարագրում է ատյանների կոնֆիգուրացիան:
Դոկերի՝ որպես վարորդի դեպքում, մոլեկուլը կրկնվում է այս բաժնի վրա, և ցանկի յուրաքանչյուր տարր հասանելի է. Dockerfile.j2 որպես փոփոխական item.
Վարորդի դեպքում, որը պահանջում է create.yml и destroy.yml, բաժինը հասանելի է դրանցում որպես molecule_yml.platforms, և դրա կրկնությունները արդեն նկարագրված են այս ֆայլերում:
Քանի որ Molecule-ն ապահովում է անսարք մոդուլների կառավարումը, հնարավոր պարամետրերի ցանկը նույնպես պետք է փնտրել այնտեղ: Դոկերի համար, օրինակ, մոդուլն օգտագործվում է docker_container_module. Որ մոդուլներն են օգտագործվում այլ դրայվերներում, կարելի է գտնել փաստաթղթավորում.
Ինչպես նաև կարելի է գտնել տարբեր վարորդների օգտագործման օրինակներ հենց մոլեկուլի փորձարկումներում.
Փոխարինեք այստեղ ցենտ:7 մասին Ubuntu.
մատակարարող
«Մատակարար»՝ օրինակներ կառավարող կազմակերպություն: Molecule-ի դեպքում սա անընդունելի է, մյուսների համար աջակցություն նախատեսված չէ, ուստի այս բաժինը կարելի է անվանել անլուրջ ընդլայնված կոնֆիգուրացիա՝ նախազգուշացումով:
Այստեղ դուք կարող եք շատ բան նշել, ես ընդգծեմ հիմնական կետերը, իմ կարծիքով.
խաղային գրքերԴուք կարող եք նշել, թե որ գրքույկները պետք է օգտագործվեն որոշակի փուլերում:
Սցենարների հաջորդականությունների անվանումը և նկարագրությունը:
Դուք կարող եք փոխել ցանկացած հրամանի լռելյայն գործողության մատրիցը՝ ավելացնելով ստեղնը <command>_sequence և որպես արժեք դրա համար՝ սահմանելով մեզ անհրաժեշտ քայլերի ցանկը։
Ենթադրենք, որ ուզում ենք փոխել գործողությունների հաջորդականությունը playbook run հրամանը գործարկելիս. molecule converge
Մեր պարզ դերը փորձարկվեց առանց խնդիրների:
Հարկ է հիշել, որ եթե աշխատանքի ընթացքում խնդիրներ կան molecule test, ապա, եթե դուք չեք փոխել լռելյայն հաջորդականությունը, Մոլեկուլը կջնջի օրինակը։
Վրիպազերծման համար օգտակար են հետևյալ հրամանները.
> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge # Оставляет инстанс после прогона тестируемой роли.
> molecule login # Зайти в созданный инстанс.
> molecule --help # Полный список команд.
Առկա դերը
Գոյություն ունեցող դերին նոր սցենար ավելացնելն է դերերի գրացուցակից հետևյալ հրամաններով.
# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>
Այն դեպքում, երբ սա դերի առաջին սցենարն է, ապա պարամետրը -s կարող է բաց թողնել, քանի որ այն կստեղծի սցենար default.
Ամփոփում
Ինչպես տեսնում եք, մոլեկուլը այնքան էլ բարդ չէ, և օգտագործելով ձեր սեփական ձևանմուշները, նոր սցենարի տեղակայումը կարող է կրճատվել մինչև փոփոխականների խմբագրում օրինակների ստեղծման և ջնջման գրքույկներում: Մոլեկուլն անխափան կերպով ինտեգրվում է CI համակարգերին, ինչը թույլ է տալիս մեծացնել զարգացման արագությունը՝ նվազեցնելով խաղային տետրերի ձեռքով փորձարկման ժամանակը:
Շնորհակալություն ուշադրության համար. Եթե դուք ունեք փորձարկվող դերեր փորձարկելու փորձ, և դա կապված չէ մոլեկուլի հետ, ասեք մեզ այդ մասին մեկնաբանություններում: