ProHoster > Blog > башкаруу > Көрсөтмөлөр: Ansible ролдорун кантип сынап көрүү жана өндүрүшкө чейин көйгөйлөрдү билүү
Көрсөтмөлөр: Ansible ролдорун кантип сынап көрүү жана өндүрүшкө чейин көйгөйлөрдү билүү
Баарына салам!
Мен мейманкананы ээлөө кызматында DevOps инженери болуп иштейм. Ostrovok.ru. Бул макалада мен Ansible ролдорун сынап көрүү тажрыйбабыз жөнүндө айткым келет.
Ostrovok.ru сайтында биз конфигурация менеджери катары ansible колдонобуз. Жакында биз ролдорду сынап көрүү зарылдыгына келдик, бирок, белгилүү болгондой, бул үчүн көптөгөн куралдар жок - эң популярдуу, балким, Молекула алкагы, ошондуктан биз аны колдонууну чечтик. Бирок анын документтери көптөгөн туңгуюктар тууралуу унчукпай турганы белгилүү болду. Биз орус тилинде жетиштүү деталдуу жол таба алган жокпуз, ошондуктан биз бул макаланы жазууну чечтик.
Молекула
молекула — Ansible ролдорун сынап көрүү үчүн негиз.
Жөнөкөйлөштүрүлгөн сүрөттөмө: Молекула сиз көрсөткөн платформада мисал түзөт (булут, виртуалдык машина, контейнер; кененирээк маалымат үчүн бөлүмдү караңыз айдоочу), андагы ролуңузду иштетет, андан кийин тесттерди жүргүзөт жана инстанцияны жок кылат. Кадамдардын биринде ката болсо, Молекула бул тууралуу сизге кабарлайт.
Азыр көбүрөөк.
теориясынын бир үзүм
Келгиле, Молекуланын эки негизги объектисин карап көрөлү: Сценарий жана Драйвер.
жагдай
Сценарийде эмне, кайда, кантип жана кандай ырааттуулукта аткарыла тургандыгы сүрөттөлгөн. Бир ролдо бир нече скрипт болушу мүмкүн жана алардын ар бири жолдогу каталог <role>/molecule/<scenario>, сыноо үчүн зарыл болгон иш-аракеттердин сүрөттөлүшүн камтыган. Сценарий болушу керек defaultМолекула аркылуу ролду инициализацияласаңыз, ал автоматтык түрдө түзүлөт. Төмөнкү скрипттердин аттары сиздин каалооңуз боюнча.
Скрипттеги текшерүү аракеттеринин ырааттуулугу деп аталат Булакта, жана демейки боюнча бул төмөнкүдөй:
(Кадамдар белгиленген ?, колдонуучу тарабынан көрсөтүлбөсө, демейки боюнча өткөрүп жиберилет)
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 # прогон плейбука
Бул аракеттердин ырааттуулугу түзөтүлүшү мүмкүн. Тизмедеги бир нерсе мурунтан эле бүткөрүлгөн болсо, ал өткөрүп жиберилет. Учурдагы абал, ошондой эле инстанциянын конфигурациясы Молекула каталогунда сакталат $TMPDIR/molecule/<role>/<scenario>.
менен кадамдарды кошуу ? Сиз Ansible ойнотуу китеби форматында каалаган аракеттерди сүрөттөп, файлдын атын кадамга ылайык жасай аласыз: prepare.yml/side_effect.yml. Бул Molecule файлдары скрипт папкасында болушун күтүңүз.
айдоочу
Драйвер - бул тесттер үчүн инстанциялар түзүлгөн уюм.
Molecule даяр калыптары бар стандарттуу драйверлердин тизмеси: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated.
Көпчүлүк учурларда, калыптар файлдар болуп саналат create.yml и destroy.yml скрипт папкасында, тиешелүүлүгүнө жараша инстанцияны түзүүнү жана жок кылууну сүрөттөйт.
Докер жана Vagrant өзгөчөлүктөр болуп саналат, анткени алардын модулдары менен өз ара аракеттенүү жогорудагы файлдарсыз да болушу мүмкүн.
Делегацияланган драйверди баса белгилеп кетүү керек, анткени ал колдонулса, инстанцияларды түзүү жана жок кылуу файлдарында инстанция конфигурациясы менен иштөө гана сүрөттөлөт, калганын инженер сүрөттөп бериши керек.
Демейки драйвер Docker болуп саналат.
Эми практикага өтүп, андан аркы функцияларды карап көрөлү.
баштоо
"Салам дүйнө" катары биз жөнөкөй nginx орнотуу ролун сынап көрөбүз. Келгиле, драйвер катары докерди тандайлы - менимче, көпчүлүгүңүздөр аны орноткон (жана докер демейки драйвер экенин унутпаңыз).
Кийинки кадам - жаңы ролду баштоо.
Жаңы ролду, ошондой эле жаңы сценарийди инициализациялоо команданы колдонуу менен ишке ашырылат 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
Натыйжада типтүү ansible ролу болуп саналат. Андан тышкары, 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 (биз докер сүрөтүн гана алмаштырабыз):
Shell бул жөн гана командалык кабык, эгерде галактика жана алтын жалтыратуу сиздин муктаждыктарыңызды канааттандырбаса.
Мен бул жерде көпкө калбайм, бул жерде жетиштүү сүрөттөлгөн документтер.
айдоочу
Айдоочунун аты. Биз үчүн бул докер.
бор
Yamllint линтер катары колдонулат.
Конфигурациянын бул бөлүгүндөгү пайдалуу варианттар yamllint үчүн конфигурация файлын көрсөтүү, чөйрөнүн өзгөрмөлөрүн алдыга жылдыруу же линтерди өчүрүү:
Инстанциялардын конфигурациясын сүрөттөйт.
Докердин айдоочусу болгон учурда, Молекула бул бөлүмдө кайталанат жана тизменин ар бир элементи Dockerfile.j2 өзгөрмө катары item.
Кайсы бир айдоочунун учурда create.yml и destroy.yml, бөлүм аларда катары жеткиликтүү molecule_yml.platforms, жана андагы итерациялар бул файлдарда мурунтан эле сүрөттөлгөн.
Molecule Ansible модулдарына инстанцияларды башкарууну камсыз кылгандыктан, мүмкүн болгон орнотуулардын тизмесин ошол жерден издешиңиз керек. Докер үчүн, мисалы, модул колдонулат docker_container_module. Башка драйверлерде кайсы модулдар колдонулганын табууга болот документтер.
Ошондой эле ар кандай драйверлерди колдонуунун мисалдарын таба аласыз Молекуланын өзүн сыноодо.
Бул жерден алмаштыралы centos: 7 боюнча Ubuntu.
камсыздоочу
"Провайдер" - инстанцияларды башкарган уюм. Молекулада бул мүмкүн болот; башкаларды колдоо пландаштырылган эмес, ошондуктан бул бөлүмдү эскертүү менен кеңейтилген конфигурация деп атоого болот.
Бул жерде сиз көп нерсени белгилей аласыз, бирок мен негизги ойлорду баса белгилейм, менин оюмча:
оюн китептери: Белгилүү этаптарда кайсы окуу китептерин колдонуу керектигин белгилей аласыз.
Сценарий тизмегинин аталышы жана сүрөттөлүшү.
Ачкычты кошуу менен буйруктун демейки аракет матрицасын өзгөртө аласыз <command>_sequence жана ал үчүн баалуулук катары, бизге керектүү кадамдардын тизмесин аныктоо.
Ойнотуу китебин иштетүү буйругун иштетүүдө биз аракеттердин ырааттуулугун өзгөрткүбүз келет дейли: molecule converge
Биздин жөнөкөй ролубуз көйгөйсүз сыналды.
Бул көйгөйлөр иш учурунда пайда болсо, эстен чыгарбоо керек molecule test, анда стандарттык ырааттуулукту өзгөртпөсөңүз, Molecule мисалды жок кылат.
Төмөнкү буйруктар мүчүлүштүктөрдү оңдоо үчүн пайдалуу:
> 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.
жыйынтыктоо
Көрүнүп тургандай, Molecule өтө татаал эмес жана өзүңүздүн шаблондоруңузду колдонуп жатканда, инстанцияларды түзүү жана жок кылуу үчүн окуу китептериндеги өзгөрмөлөрдү түзөтүү үчүн жаңы скрипттин жайылышын азайта аласыз. Молекула CI системалары менен үзгүлтүксүз интеграцияланат, бул окуу китептерин кол менен текшерүү убактысын кыскартуу менен өнүгүү ылдамдыгын жогорулатууга мүмкүндүк берет.
Көңүл бурганыңыздар үчүн рахмат. Эгер сизде ansible ролдорду сынап көрүү тажрыйбасы бар болсо жана ал Молекулага тиешеси жок болсо, бул тууралуу комментарийлерде айтып бериңиз!