Асосҳои ҳассос, ки бидуни он китобҳои бозии шумо як пораи макаронҳои часпанда хоҳанд буд

Ман бисёр баррасиҳои коди Ansible одамони дигар мекунам ва худам бисёр менависам. Ҳангоми таҳлили хатогиҳо (ҳам одамони дигар ва ҳам худи ман), инчунин як қатор мусоҳибаҳо ман хатои асосиеро, ки корбарони Ansible мекунанд, фаҳмидам - ​​онҳо бидуни азхуд кардани хатогиҳои асосӣ ба корҳои мураккаб ворид мешаванд.

Барои ислоҳи ин беадолатии умумибашарӣ, ман тасмим гирифтам, ки ба Ansible барои онҳое, ки аллакай онро медонанд, муқаддима нависам. Ман шуморо ҳушдор медиҳам, ки ин такрори мардон нест, ин як китоби дарозхонда бо ҳарфҳои зиёд ва ҳеҷ сурат нест.

Сатҳи интизории хонанда ин аст, ки аллакай чанд ҳазор сатр ямла навишта шудааст, чизе аллакай дар истеҳсолот аст, аммо "чи хел ҳама чиз каҷ аст".

Номҳо

Хатои асосии корбари Ansible ин надонистани чизест, ки чизе чӣ ном дорад. Агар шумо номҳоро надонед, шумо намефаҳмед, ки ҳуҷҷатҳо чӣ мегӯянд. Мисоли зинда: ҳангоми мусоҳиба шахсе, ки гӯё дар Ansible бисёр навиштааст, ба саволи «китоби бозӣ аз кадом унсурҳо иборат аст?» ҷавоб дода наметавонад. Ва ҳангоме ки ман пешниҳод кардам, ки "ҷавоб интизор буд, ки китоби бозӣ аз бозӣ иборат аст", шарҳи лаънатӣ "мо аз ин истифода намекунем" пайравӣ кард. Одамон Ansible-ро барои пул менависанд ва бозиро истифода намебаранд. Онҳо дар асл онро истифода мебаранд, аммо намедонанд, ки он чӣ аст.

Пас биёед бо як чизи оддӣ оғоз кунем: он чӣ ном дорад. Шояд шумо инро медонед, ё шояд намедонед, зеро ҳангоми хондани ҳуҷҷатҳо аҳамият надодаед.

ansible-playbook китоби бозиро иҷро мекунад. Китоби бозӣ ин файлест бо тамдиди yml/yaml, ки дар дохили он чизе монанди ин мавҷуд аст:

---
- hosts: group1
  roles:
    - role1

- hosts: group2,group3
  tasks:
    - debug:

Мо аллакай фаҳмидем, ки тамоми ин файл як китоби бозӣ аст. Мо метавонем нишон диҳем, ки нақшҳо дар куҷоянд ва вазифаҳо дар куҷоянд. Аммо бозӣ дар куҷост? Ва фарқи байни бозӣ ва нақш ё китоби бозӣ чӣ гуна аст?

Ҳамааш дар ҳуҷҷатҳост. Ва онҳо пазмон мешаванд. Шурӯъкунандагон - зеро он ҷо аз ҳад зиёд аст ва шумо ҳама чизро якбора ба ёд намеоред. Ботаҷриба - зеро "чизҳои ночиз". Агар шумо ботаҷриба бошед, ҳадди аққал як маротиба дар шаш моҳ ин саҳифаҳоро дубора хонед ва рамзи шумо дар синф пешсаф мешавад.

Пас, дар хотир доред: Китоби бозӣ рӯйхатест, ки аз бозӣ ва import_playbook.
Ин як бозӣ аст:

- hosts: group1
  roles:
    - role1

ва ин боз як бозии дигар аст:

- hosts: group2,group3
  tasks:
    - debug:

Бозӣ чист? Чаро вай?

Бозӣ як ҷузъи калидии китоби бозӣ аст, зеро бозӣ ва танҳо бозӣ рӯйхати нақшҳо ва/ё вазифаҳоро бо рӯйхати мизбонҳое, ки дар онҳо бояд иҷро шаванд, алоқаманд мекунад. Дар умқи амиқи ҳуҷҷатҳо шумо метавонед ёдовар шавед delegate_to, плагинҳои ҷустуҷӯи маҳаллӣ, танзимоти мушаххаси шабака, ҳостҳои ҷаҳиш ва ғайра. Онҳо ба шумо имкон медиҳанд, ки ҷойеро, ки вазифаҳо иҷро мешаванд, каме тағир диҳед. Аммо, инро фаромӯш кунед. Ҳар яке аз ин имконоти оқилона дорои истифодаи хеле мушаххас мебошанд ва онҳо бешубҳа универсалӣ нестанд. Ва мо дар бораи чизҳои асосӣ гап мезанем, ки ҳама бояд донанд ва истифода баранд.

Агар шумо хоҳед, ки "чизе" -ро "ҷое" иҷро кунед, шумо бозӣ менависед. Нақш нест. На нақш бо модулҳо ва вакилон. Шумо онро гиред ва бозӣ нависед. Дар он, дар майдони ҳостҳо шумо дар куҷо иҷро карданро номбар мекунед ва дар нақшҳо/вазифаҳо - чӣ бояд иҷро шавад.

Содда, дуруст? Чӣ тавр дар акси ҳол метавонист?

Яке аз лаҳзаҳои хосе, ки одамон хоҳиши ин корро на тавассути бозӣ кардан доранд, ин "нақше, ки ҳама чизро муқаррар мекунад" мебошад. Ман мехоҳам нақше дошта бошам, ки ҳам серверҳои навъи якум ва ҳам серверҳои навъи дуюмро танзим кунад.

Намунаи архетипӣ мониторинг аст. Ман мехоҳам нақши мониторинг дошта бошам, ки мониторингро танзим кунад. Нақши мониторинг ба ҳостҳои мониторинг таъин карда мешавад (мувофиқи бозӣ). Аммо маълум мешавад, ки барои назорат мо бояд бастаҳоро ба ҳостҳое расонем, ки мо назорат мекунем. Чаро вакилро истифода набаред? Шумо инчунин бояд iptables -ро танзим кунед. вакил? Шумо инчунин бояд конфигуратсияро барои DBMS нависед / ислоҳ кунед, то мониторингро фаъол созед. вакил! Ва агар эҷодкорӣ намерасад, пас шумо метавонед як ҳайати намояндагӣ кунед include_role дар як ҳалқаи лона истифода филтри назарфиреб дар рӯйхати гурӯҳҳо, ва дар дохили include_role шумо метавонед бештар кор кунед delegate_to боз. Ва мо меравем...

Хоҳиши нек - доштани як нақши ягонаи мониторинг, ки "ҳама чизро иҷро мекунад" - моро ба дӯзахи комил мебарад, ки аксар вақт танҳо як роҳи халосӣ вуҷуд дорад: ҳама чизро аз сифр аз нав навиштан.

Дар куҷо хатогӣ дар ин ҷо рӯй дод? Лаҳзае, ки шумо фаҳмидед, ки барои иҷрои вазифаи "x" дар мизбони X шумо бояд ба мизбони Y равед ва дар он ҷо "y" -ро иҷро кунед, шумо бояд як машқи оддӣ иҷро кунед: биравед ва бозӣ нависед, ки онро дар мизбони Y иҷро мекунад. Ба "x" чизе илова накунед, балки онро аз сифр нависед. Ҳатто бо тағирёбандаҳои сахт кодшуда.

Чунин ба назар мерасад, ки ҳама чиз дар бандҳои боло дуруст гуфта шудааст. Аммо ин парвандаи шумо нест! Зеро шумо мехоҳед рамзи такрористифодашавандаро нависед, ки ХУШК ва ба китобхона монанд аст ва шумо бояд усули иҷрои онро ҷустуҷӯ кунед.

Дар ин чо боз як хатои чиддй нихон аст. Хатогие, ки бисёр лоиҳаҳоро аз тоқатфарсо навишташуда (ин метавонист беҳтар бошад, аммо ҳама кор мекунад ва анҷомаш осон аст) ба даҳшати комил табдил дод, ки ҳатто муаллиф онро фаҳмида наметавонад. Ин кор мекунад, аммо Худо шуморо ҳеҷ чизро тағир надиҳад.

Хатогӣ ин аст: нақш вазифаи китобхона аст. Ин қиёс бисёр ибтидоҳои хубро хароб кардааст, ки тамошо кардан аламовар аст. Нақш вазифаи китобхона нест. Вай ҳисоб карда наметавонад ва қарорҳои сатҳи бозӣ қабул карда наметавонад. Ба ман хотиррасон кунед, ки бозӣ кадом қарорҳоро қабул мекунад?

Ташаккур, шумо дуруст мегӯед. Бозӣ қарор қабул мекунад (аниқтараш он маълумотро дар бар мегирад) дар бораи иҷрои кадом вазифаҳо ва нақшҳо дар кадом ҳостҳо.

Агар шумо ин тасмимро ба нақш вогузор кунед ва ҳатто бо ҳисобҳо, шумо худро (ва он касе, ки коди шуморо таҳлил мекунад) ба мавҷудияти бадбахтона маҳкум мекунед. Нақш муайян намекунад, ки он дар куҷо иҷро карда мешавад. Ин тасмим тавассути бозӣ қабул карда мешавад. Нақш он чизеро, ки гуфта шудааст, дар куҷо иҷро мекунад.

Чаро барномасозӣ дар Ansible хатарнок аст ва чаро COBOL беҳтар аз Ansible аст, мо дар боб дар бораи тағирёбандаҳо ва ҷинжа сӯҳбат хоҳем кард. Ҳоло, биёед як чизро бигӯем - ҳар як ҳисобҳои шумо дар паси тағироти тағирёбандаҳои глобалӣ изи фаромӯшнашаванда мегузорад ва шумо дар ин бора коре карда наметавонед. Хамин ки ин ду «из»-ро буриданд, хама чиз аз байн рафт.

Эзоҳ барои ғамгин: нақш албатта метавонад ба ҷараёни назорат таъсир расонад. Бихӯред delegate_to ва истифодаи оқилона дорад. Бихӯред meta: end host/play. Аммо! Дар хотир доред, ки мо асосҳоро таълим медиҳем? Фаромӯш кард delegate_to. Мо дар бораи соддатарин ва зеботарин рамзи Ansible сухан меронем. Ки хондан осон, навиштан осон, ислоҳ кардан осон, санҷиш осон ва анҷом додан осон аст. Пас, бори дигар:

бозӣ ва танҳо бозӣ қарор мекунад, ки кадом мизбон чӣ иҷро карда мешавад.

Дар ин бахш мо мухолифати байни бозӣ ва нақшро баррасӣ кардем. Акнун биёед дар бораи вазифаҳо ва муносибати нақш сӯҳбат кунем.

Вазифаҳо ва нақшҳо

Бозиро баррасӣ кунед:

- hosts: somegroup
  pre_tasks:
    - some_tasks1:
  roles:
     - role1
     - role2
  post_tasks:
     - some_task2:
     - some_task3:

Биёед бигӯем, ки шумо бояд foo кунед. Ва чунин ба назар мерасад foo: name=foobar state=present. Инро дар куҷо бояд нависам? дар пеш? пост? Нақш эҷод кунед?

...Ва вазифахо ба кучо рафтанд?

Мо боз бо асосҳо - дастгоҳи бозӣ оғоз мекунем. Агар шумо дар ин масъала шино кунед, шумо наметавонед бозиро ҳамчун асоси ҳама чизи дигар истифода баред ва натиҷаи шумо "ларзон" хоҳад шуд.

Дастгоҳи бозӣ: дастури мизбонҳо, танзимот барои худи бозӣ ва пеш_вазифаҳо, вазифаҳо, нақшҳо, бахшҳои post_tasks. Параметрҳои боқимондаи бозӣ ҳоло барои мо муҳим нестанд.

Тартиби бахшҳои онҳо бо вазифаҳо ва нақшҳо: pre_tasks, roles, tasks, post_tasks. Азбаски аз ҷиҳати маъноӣ тартиби иҷро дар байни tasks и roles равшан нест, пас тачрибаи пешцадам мегуянд, ки мо фаслро илова карда истодаем tasks, танҳо агар не roles... Агар вуҷуд дорад roles, пас тамоми вазифаҳои замимашуда дар қисмҳо ҷойгир карда мешаванд pre_tasks/post_tasks.

Ҳама чиз боқӣ мемонад, ки ҳама чиз аз ҷиҳати маъно равшан аст: аввал pre_tasks, он гоҳ roles, он гоҳ post_tasks.

Аммо мо то ҳол ба савол ҷавоб надодаем: занги модул дар куҷост? foo нависед? Оё мо бояд барои ҳар як модул як нақш нависем? Ё барои ҳама нақши ғафс доштан беҳтар аст? Ва агар нақш набошад, пас дар куҷо бояд нависам - дар пеш ё баъд?

Агар ба ин саволҳо ҷавоби асоснок надошта бошад, пас ин нишонаи набудани ҳиссиёт, яъне ҳамон «пояҳои ларзон» аст. Биёед инро фаҳмем. Якум, як саволи амниятӣ: Агар бозӣ дошта бошад pre_tasks и post_tasks (ва ягон вазифа ё нақш вуҷуд надорад), он гоҳ метавонад чизе вайрон шавад, агар ман вазифаи аввалро иҷро кунам post_tasks Ман онро то охир интиқол медиҳам pre_tasks?

Албатта, матни савол ишора мекунад, ки он мешиканад. Аммо маҳз чӣ?

... Корфармоён. Хондани асосҳо як далели муҳимро ошкор мекунад: ҳамаи коркардкунандагон пас аз ҳар як бахш ба таври худкор тоза карда мешаванд. Онхое. хамаи вазифахо аз pre_tasks, он гоҳ ҳамаи коркардкунандагони, ки огоҳ карда шуданд. Пас аз он ҳама нақшҳо ва ҳамаи коркардкунандагоне, ки дар нақшҳо огоҳ карда шудаанд, иҷро мешаванд. Баъди post_tasks ва сарварони онҳо.

Ҳамин тариқ, агар шумо як вазифаро аз post_tasks в pre_tasks, пас эҳтимолан шумо онро пеш аз иҷро шудани коркардкунанда иҷро мекунед. масалан, агар дар pre_tasks сервери веб насб ва танзим карда мешавад, ва post_tasks ба он чизе фиристода мешавад, пас ин вазифаро ба секция гузаронед pre_tasks ба он оварда мерасонад, ки дар вақти «фиристодан» сервер ҳанӯз кор намекунад ва ҳама чиз вайрон мешавад.

Акнун биёед бори дигар фикр кунем, ки чаро ба мо лозим аст pre_tasks и post_tasks? Масалан, барои анҷом додани ҳама чизи зарурӣ (аз ҷумла коркардкунандагон) пеш аз иҷрои нақш. А post_tasks ба мо имкон медиҳад, ки бо натиҷаҳои иҷрои нақшҳо (аз ҷумла коркардкунандагон) кор кунем.

Коршиноси ботаҷрибаи Ansible ба мо мегӯяд, ки ин чист. meta: flush_handlers, аммо чаро ба мо flush_handlers лозим аст, агар мо метавонем ба тартиби иҷрои қисмҳои бозӣ такя кунем? Ғайр аз он, истифодаи meta: flush_handlers метавонад ба мо чизҳои ғайричашмдоштро бо коркардкунандагони такрорӣ диҳад ва ҳангоми истифода ба мо огоҳиҳои аҷибе диҳад. when у block ва гайра. Чӣ қадаре ки шумо фаҳмишро хубтар донед, ҳамон қадар нозукиҳои бештарро барои ҳалли "хеле душвор" номбар карда метавонед. Ва ҳалли оддӣ - истифодаи тақсимоти табиӣ байни пеш/нақш/пост - нозукиҳоро ба вуҷуд намеорад.

Ва баргардем ба 'foo' мо. Дар куҷо бояд гузорам? Дар пеш, пост ё нақшҳо? Аён аст, ки ин аз он вобаста аст, ки оё мо ба натиҷаҳои коркардкунанда барои foo ниёз дорем. Агар онҳо дар он ҷо набошанд, пас foo лозим нест, ки дар пеш ва баъд ҷойгир карда шавад - ин бахшҳо маънои махсус доранд - иҷрои вазифаҳо пеш аз ва баъд аз қисми асосии код.

Акнун ҷавоб ба саволи "нақш ё вазифа" ба он чизе, ки аллакай дар бозӣ аст, меояд - агар дар он ҷо вазифаҳо вуҷуд дошта бошанд, пас шумо бояд онҳоро ба вазифаҳо илова кунед. Агар нақшҳо вуҷуд дошта бошанд, шумо бояд нақш эҷод кунед (ҳатто аз як вазифа). Хотиррасон мекунам, ки вазифахо ва рольхо дар як вакт истифода намешаванд.

Фаҳмидани асосҳои Ansible ба саволҳои ба назар ҷолиб ҷавобҳои оқилона медиҳад.

Вазифаҳо ва нақшҳо (қисми дуюм)

Акнун биёед вазъиятро муҳокима кунем, вақте ки шумо ба навиштани китоби бозӣ шурӯъ мекунед. Шумо бояд фу, бар ва баз созед. Оё ин се вазифа, як нақш ё се нақш? Барои ҷамъбасти савол: аз кадом лаҳза шумо бояд ба навиштани нақшҳо шурӯъ кунед? Вақте ки шумо метавонед супориш нависед, нақшҳо чӣ маъно дорад?... Нақш чист?

Яке аз хатогиҳои калонтарин (ман аллакай дар ин бора гуфта будам) ин фикр кардан аст, ки нақш мисли функсия дар китобхонаи барнома аст. Тавсифи функсияи умумӣ чӣ гуна аст? Он далелҳои воридшударо қабул мекунад, бо сабабҳои тарафӣ ҳамкорӣ мекунад, таъсири тараф мерасонад ва арзишро бармегардонад.

Акнун, диққат. Аз ин дар роль чй кор кардан мумкин аст? Шумо ҳамеша хуш омадед, ки таъсири тарафро даъват кунед, ин моҳияти тамоми Ansible аст - эҷод кардани таъсири тараф. Сабабҳои тарафҳо доранд? ибтидоӣ. Аммо бо "арзиш гузаронед ва онро баргардонед" - дар он ҷо кор намекунад. Аввалан, шумо наметавонед арзишро ба нақш интиқол диҳед. Шумо метавонед як тағирёбандаи глобалиро бо андозаи умри бозӣ дар бахши vars барои нақш таъин кунед. Шумо метавонед як тағирёбандаи глобалиро бо як умр дар дохили нақш таъин кунед. Ё ҳатто бо умри китобҳои бозӣ (set_fact/register). Аммо шумо наметавонед "тағйирёбандаҳои маҳаллӣ" дошта бошед. Шумо наметавонед "арзиш бигиред" ва "баргардонед".

Чизи асосӣ аз ин бармеояд: шумо наметавонед дар Ansible чизе нависед, бе таъсири тараф. Тағир додани тағирёбандаҳои глобалӣ ҳамеша як таъсири тараф барои функсия аст. Дар Rust, масалан, тағир додани тағирёбандаи глобалӣ аст unsafe. Ва дар Ansible ин ягона усули таъсиррасонӣ ба арзишҳои нақш аст. Калимаҳои истифодашударо қайд кунед: на "ба нақш арзиш гузаронед", балки "арзишҳоеро, ки нақш истифода мебарад, тағир диҳед". Дар байни нақшҳо ҷудогона вуҷуд надорад. Дар байни вазифаҳо ва нақшҳо ҷудогона вуҷуд надорад.

Њамагї: нақш функсия нест.

Дар нақш чӣ хуб аст? Аввалан, нақш дорои арзишҳои пешфарз аст (/default/main.yaml), дуюм, нақш дорои директорияҳои иловагӣ барои нигоҳ доштани файлҳо.

Бартариҳои арзишҳои пешфарз чӣ гунаанд? Азбаски дар пирамидаи Маслоу, ҷадвали хеле таҳрифшудаи афзалиятҳои тағирёбандаи Ansible, пешфарзҳои нақш авлавияти пасттарин мебошанд (тарҳи параметрҳои сатри фармони Ansible). Ин маънои онро дорад, ки агар ба шумо лозим аст, ки арзишҳои пешфарзро пешниҳод кунед ва дар бораи барҳам додани арзишҳо аз инвентаризатсия ё тағирёбандаҳои гурӯҳ хавотир нашавед, пас пешфарзҳои нақш ягона ҷои мувофиқ барои шумо мебошанд. (Ман каме дуруғ мегӯям - бештар ҳастанд |d(your_default_here), аммо агар мо дар бораи ҷойҳои статсионарӣ сухан ронем, пас танҳо пешфарзҳои нақш).

Дар бораи нақшҳо боз чӣ хуб аст? Зеро онҳо каталогҳои худро доранд. Инҳо директорияҳо барои тағирёбандаҳо мебошанд, ҳам доимӣ (яъне барои нақш ҳисоб карда мешаванд) ва динамикӣ (ё намуна ё намунаи зидди намуна вуҷуд дорад - include_vars якҷоя бо {{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml.). Инҳо директорияҳо барои files/, templates/. Инчунин, он ба шумо имкон медиҳад, ки модулҳо ва плагинҳои худро дошта бошед (library/). Аммо, дар муқоиса бо супоришҳо дар китоби бозӣ (ки метавонад ҳамаи инҳоро дошта бошад) дар ин ҷо ягона фоида дар он аст, ки файлҳо на ба як чӯб, балки якчанд паллаи алоҳида партофта мешаванд.

Боз як тафсилоти дигар: шумо метавонед кӯшиш кунед, ки нақшҳоеро эҷод кунед, ки барои истифодаи дубора дастрас бошанд (тавассути галактика). Бо пайдоиши коллексияҳо тақсимоти нақшро қариб фаромӯшшуда ҳисоб кардан мумкин аст.

Ҳамин тариқ, нақшҳо ду хусусияти муҳим доранд: онҳо пешфарзҳо доранд (хусусияти беназир) ва онҳо ба шумо имкон медиҳанд, ки коди худро созед.

Бозгашт ба саволи аслӣ: кай бояд вазифаҳоро иҷро кард ва кай нақшҳоро иҷро кард? Вазифаҳо дар китоби бозӣ аксар вақт ҳамчун "ширеше" пеш аз нақшҳо ё баъд аз нақшҳо ё ҳамчун унсури мустақили сохтмон истифода мешаванд (пас дар код набояд нақш мавҷуд бошад). Як тӯдаи вазифаҳои муқаррарӣ бо нақшҳо бесарусомонии якранг аст. Шумо бояд услуби мушаххасро риоя кунед - вазифа ё нақш. Нақшҳо ҷудокунии объектҳо ва пешфарзҳоро таъмин мекунанд, вазифаҳо ба шумо имкон медиҳанд, ки кодро зудтар хонед. Одатан, ба нақшҳо рамзи бештари "стационарӣ" (муҳим ва мураккаб) гузошта мешавад ва скриптҳои ёрирасон бо услуби супориш навишта мешаванд.

Импорт_ролро ҳамчун вазифа иҷро кардан мумкин аст, аммо агар шумо инро нависед, пас омода бошед, ки ба ҳисси зебоии худ фаҳмонед, ки чаро ин корро кардан мехоҳед.

Хонандаи зирак метавонад бигӯяд, ки нақшҳо метавонанд нақшҳоро ворид кунанд, нақшҳо метавонанд тавассути galaxy.yml вобастагӣ дошта бошанд ва инчунин даҳшатнок ва даҳшатнок вуҷуд дорад. include_role — Хотиррасон мекунам, ки мо махоратро на дар гимнастикам ракамй, балки дар асоси Ансибле такмил медихем.

Мутахассисон ва вазифаҳо

Биёед боз як чизи равшанро муҳокима кунем: коркардкунандагон. Донистани истифодаи дурусти онҳо қариб як санъат аст. Фарқи байни коркардкунанда ва кашолакунӣ чист?

Азбаски мо асосҳоро дар хотир дорем, ин ҷо як мисол:

- hosts: group1
  tasks:
    - foo:
      notify: handler1
  handlers:
     - name: handler1
       bar:

Корбарони нақш дар rolename/handlers/main.yaml ҷойгир шудаанд. Корфармоҳо байни ҳамаи иштирокчиёни бозӣ сару садо мекунанд: pre/post_tasks метавонад иҷрокунандагони нақшҳоро кашад ва нақш метавонад корбаронро аз бозӣ кашад. Бо вуҷуди ин, зангҳои "кросс-нақшҳо" ба коркардкунандагон нисбат ба такрори коркарди ночиз боиси wtf бештар мегардад. (Дигар унсури таҷрибаҳои беҳтарин ин аст, ки кӯшиш накунед, ки номҳои коркардкунанда такрор нашавед).

Тафовути асосӣ дар он аст, ки супориш ҳамеша иҷро карда мешавад (идемпотентӣ) (тегҳои плюс/минус ва when), ва коркардкунанда - бо тағирёбии ҳолати (танҳо дар сурати тағир додани он оташро огоҳ кунед). Ин чӣ маъно дорад? Масалан, он аст, ки вақте ки шумо аз нав оғоз мекунед, агар тағирот вуҷуд надошта бошад, пас коркардкунанда нахоҳад буд. Чаро мо бояд коркардкунандаро иҷро кунем, вақте ки дар вазифаи тавлидкунанда тағирот вуҷуд надошт? Масалан, аз он сабаб, ки чизе шикаста ва тағир ёфт, аммо иҷроиш ба коркардкунанда нарасид. Масалан, аз сабаби он ки шабака муваққатан қатъ шуд. Конфигуратсия тағир ёфт, хидмат аз нав оғоз нашудааст. Вақте ки шумо онро оғоз мекунед, конфигуратсия дигар тағир намеёбад ва хидмат бо версияи кӯҳнаи конфигуратсия боқӣ мемонад.

Вазъияти конфигуратсияро ҳал кардан ғайриимкон аст (аниқтараш, шумо метавонед як протоколи махсуси бозоғозро барои худ бо парчамҳои файл ва ғайра ихтироъ кунед, аммо ин дигар дар ҳама шакл "асоси асосӣ" нест). Аммо боз як ҳикояи умумӣ вуҷуд дорад: мо барномаро насб кардем, сабт кардем .service-файл, ва ҳоло мо онро мехоҳем daemon_reload и state=started. Ва ҷои табиии ин кор ба назар мерасад. Аммо агар шумо онро на коркардкунанда, балки вазифае дар охири рӯйхат ё нақш созед, он гоҳ он ҳар дафъа беэътиноӣ иҷро карда мешавад. Ҳатто агар китоби бозӣ дар миёна шикаста бошад. Ин мушкили аз нав оғозшударо тамоман ҳал намекунад (шумо бо атрибути аз нав оғозшуда кореро иҷро карда наметавонед, зеро беэътиноӣ гум мешавад), аммо ин бешубҳа меарзад state=started, устувории умумии китобҳои бозӣ зиёд мешавад, зеро шумораи пайвастҳо ва ҳолати динамикӣ кам мешавад.

Хусусияти дигари мусбии коркардкунанда дар он аст, ки он баромадро банд намекунад. Ҳеҷ гуна тағирот вуҷуд надошт - дар баромади иловагӣ гузариш ё хуб нест - хондан осонтар аст. Он инчунин як хосияти манфӣ аст - агар шумо дар як вазифаи ба таври хаттӣ иҷрошуда хатогиро пайдо кунед, пас коркардкунандагон танҳо ҳангоми тағир додан иҷро карда мешаванд, яъне. дар баъзе шароит - хеле кам. Масалан, бори аввал дар хаёти ман баъди панч сол. Ва, албатта, дар ном хатои хаттӣ мешавад ва ҳама чиз мешиканад. Ва агар шумо онҳоро бори дуюм иҷро накунед, тағир намеёбад.

Алоҳида, мо бояд дар бораи мавҷудияти тағирёбандаҳо сӯҳбат кунем. Масалан, агар шумо супоришро бо ҳалқа огоҳ кунед, дар тағирёбандаҳо чӣ хоҳад буд? Шумо метавонед ба таври аналитикӣ тахмин кунед, аммо ин на ҳамеша ночиз аст, хусусан агар тағирёбандаҳо аз ҷойҳои гуногун меоянд.

... Аз ин рӯ, корбарон назар ба он ки ба назар мерасанд, хеле камтар муфид ва мушкилтаранд. Агар шумо метавонед чизеро зебо (бе парда) бидуни коркардкунанда нависед, беҳтар аст, ки онро бе онҳо иҷро кунед. Агар он ба таври зебо кор накунад, бо онҳо беҳтар аст.

Хонандаи зангзан дуруст қайд мекунад, ки мо баҳс накардаем listenки коркардкунанда метавонад барои коркарди дигар огоҳ кунад, ки коркардкунанда метавонад import_tasks-ро дар бар гирад (ки метавонад бо with_items дохил_рол кунад), системаи коркардкунанда дар Ansible Turing-complete аст, ки коркардкунандагони аз include_role ба таври аҷиб бо коркардкунандагони бозӣ бурида мешаванд, ва гайра .д. - ҳамаи ин бешубҳа "асосҳо" нест).

Гарчанде ки як WTF мушаххас вуҷуд дорад, ки воқеан хусусиятест, ки шумо бояд дар хотир нигоҳ доред. Агар вазифаи шумо бо иҷро шавад delegate_to ва он огоҳ кардааст, он гоҳ коркардкунанда мувофиқ бе иҷро мешавад delegate_to, яъне. дар мизбон, ки бозӣ таъин шудааст. (Гарчанде ки коркардкунанда, албатта, метавонад дошта бошад delegate_to Ҳамин).

Алоҳида, ман мехоҳам чанд сухан дар бораи нақшҳои дубора истифодашаванда бигӯям. Пеш аз пайдо шудани коллексияҳо идеяе вуҷуд дошт, ки шумо метавонед нақшҳои универсалӣ созед, ки метавонанд бошанд ansible-galaxy install ва рафт. Дар ҳама ОС-и ҳама вариантҳо дар ҳама ҳолатҳо кор мекунад. Ҳамин тавр, фикри ман: он кор намекунад. Ҳама гуна нақш бо омма include_vars, ки 100500 парвандаро дастгирӣ мекунад, ба вартаи хатогиҳои парвандаи кунҷӣ маҳкум шудааст. Онҳо метавонанд бо санҷиши васеъ фаро гирифта шаванд, аммо мисли ҳама гуна санҷишҳо, ё шумо маҳсулоти декартии арзишҳои воридотӣ ва функсияи умумӣ доред ё шумо "сенарияҳои инфиродӣ фаро гирифта шудаанд". Фикри ман ин аст, ки агар нақш хаттӣ бошад (мураккабии сикломатӣ 1) беҳтар аст.

Агар камтар бошад (возеҳ ё декларативӣ - дар шакл when ё шакл include_vars аз рӯи маҷмӯи тағирёбандаҳо), нақш ҳамон қадар беҳтар аст. Баъзан шумо бояд шохаҳо созед, аммо, такрор мекунам, ҳар қадар камтар бошад, ҳамон қадар беҳтар аст. Ҳамин тавр, он мисли як нақши хуб бо галактика (он кор мекунад!) бо як хӯшаи when метавонад аз панҷ вазифа назар ба нақши "худ" камтар бартарӣ дошта бошад. Лаҳзае, ки нақш бо галактика беҳтар аст, вақте ки шумо ба навиштани чизе шурӯъ мекунед. Лаҳзае, ки вазъ бадтар мешавад, вақте чизе мешиканад ва шумо гумон мекунед, ки ин аз сабаби "нақш бо галактика" аст. Шумо онро мекушоед ва панҷ дохилкунӣ, ҳашт варақаи вазифаҳо ва стек мавҷуданд when'ov... Ва мо бояд инро фахмем. Ба ҷои 5 вазифа, як рӯйхати хатӣ, ки дар он ҳеҷ чиз вайрон карда намешавад.

Дар қисмҳои зерин

  • Каме дар бораи инвентаризатсия, тағирёбандаҳои гурӯҳӣ, плагини host_group_vars, hostvars. Чӣ тавр гиреҳи Гордианро бо спагетти пайваст кардан мумкин аст. Тағйирёбандаҳои миқёс ва афзалият, Модели хотираи Ansible. "Пас, мо номи корбариро барои пойгоҳи додаҳо дар куҷо нигоҳ дорем?"
  • jinja: {{ jinja }} — nosql notype nosense пластилини нарм. Он дар ҳама ҷо аст, ҳатто дар ҷое, ки шумо онро интизор нестед. Каме дар бораи !!unsafe ва ямли болаззат.

Манбаъ: will.com

Илова Эзоҳ