Bażi Ansible, li mingħajrhom il-playbooks tiegħek ikunu biċċa għaġin li jwaħħal

Nagħmel ħafna reviżjonijiet tal-kodiċi Ansible ta 'nies oħra u nikteb ħafna jien. Fil-kors tal-analiżi tal-iżbalji (kemm ta 'nies oħra kif ukoll tiegħi), kif ukoll għadd ta' intervisti, indunajt l-iżball ewlieni li jagħmlu l-utenti ta 'Ansible - jidħlu f'affarijiet kumplessi mingħajr ma jaħkmu dawk bażiċi.

Biex nikkoreġi din l-inġustizzja universali, iddeċidejt li nikteb introduzzjoni għal Ansible għal dawk li diġà jafuha. Inwissik, dan mhux rakkont tal-mans, dan huwa qari twil b'ħafna ittri u mingħajr stampi.

Il-livell mistenni tal-qarrej huwa li diġà nkitbu diversi eluf ta’ linji ta’ yamla, xi ħaġa diġà qiegħda fil-produzzjoni, iżda “b’xi mod kollox huwa mgħawweġ.”

Ismijiet

L-iżball ewlieni li jagħmel utent Ansible huwa li ma jkunx jaf x'jissejjaħ xi ħaġa. Jekk ma tafx l-ismijiet, ma tistax tifhem dak li tgħid id-dokumentazzjoni. Eżempju ħaj: waqt intervista, persuna li donnha tgħid li kitbet ħafna f’Ansible ma setgħetx twieġeb il-mistoqsija “f’liema elementi tikkonsisti playbook?” U meta ssuġġerejt li "it-tweġiba kienet mistennija li l-playbook jikkonsisti f'logħob," segwa l-kumment damning "aħna ma nużawx dak". In-nies jiktbu Ansible għall-flus u ma jużawx il-logħob. Fil-fatt jużawha, iżda ma jafux x'inhu.

Mela ejja nibdew b'xi ħaġa sempliċi: kif tissejjaħ? Forsi taf dan, jew forsi le, għax ma tajtx kas meta qrajt id-dokumentazzjoni.

ansible-playbook tesegwixxi l-playbook. Playbook huwa fajl bl-estensjoni yml/yaml, li fih hemm xi ħaġa bħal din:

---
- hosts: group1
  roles:
    - role1

- hosts: group2,group3
  tasks:
    - debug:

Aħna diġà induna li dan il-fajl kollu huwa playbook. Nistgħu nuru fejn huma r-rwoli u fejn huma l-kompiti. Imma fejn hu l-logħob? U x'inhi d-differenza bejn play u rwol jew playbook?

Dan kollu fid-dokumentazzjoni. U jitilfuha. Jibdew - għax hemm wisq u ma tiftakarx kollox f'daqqa. Esperjenza - minħabba "affarijiet trivjali". Jekk għandek esperjenza, aqra mill-ġdid dawn il-paġni mill-inqas darba kull sitt xhur, u l-kodiċi tiegħek se jsir l-aqwa fil-klassi.

Allura, ftakar: Playbook hija lista li tikkonsisti minn play u import_playbook.
Din hija dramm wieħed:

- hosts: group1
  roles:
    - role1

u dan huwa wkoll dramm ieħor:

- hosts: group2,group3
  tasks:
    - debug:

X'inhu play? Għaliex hi?

Il-logħob huwa element ewlieni għal playbook, għaliex play and only play jassoċja lista ta 'rwoli u/jew kompiti ma' lista ta 'hosts li fuqhom għandhom jiġu eżegwiti. Fil-fond fil-fond tad-dokumentazzjoni tista 'ssib tissemma delegate_to, plugins ta' tfittxija lokali, settings speċifiċi għan-netwerk cli, jump hosts, eċċ. Huma jippermettulek tibdel ftit il-post fejn isiru l-kompiti. Iżda, tinsa dwarha. Kull waħda minn dawn l-għażliet għaqlija għandha użi speċifiċi ħafna, u żgur li mhumiex universali. U qed nitkellmu dwar affarijiet bażiċi li kulħadd għandu jkun jaf u juża.

Jekk trid twettaq "xi ħaġa" "x'imkien", tikteb play. Mhux rwol. Mhux rwol b'moduli u delegati. Teħodha u tikteb play. F'liema, fil-qasam hosts inti telenka fejn tesegwixxi, u fir-rwoli/kompiti - x'għandek tesegwixxi.

Sempliċi, hux? Kif jista’ jkun mod ieħor?

Wieħed mill-mumenti karatteristiċi meta n-nies ikollhom ix-xewqa li jagħmlu dan mhux permezz tal-logħob huwa r-"rwol li jwaqqaf kollox." Nixtieq li jkolli rwol li jikkonfigura kemm servers tal-ewwel tip kif ukoll servers tat-tieni tip.

Eżempju arketipiku huwa l-monitoraġġ. Nixtieq li jkolli rwol ta 'monitoraġġ li se jikkonfigura l-monitoraġġ. Ir-rwol ta 'monitoraġġ huwa assenjat lill-hosts ta' monitoraġġ (skond il-logħob). Iżda jirriżulta li għall-monitoraġġ irridu nwasslu pakketti lill-hosts li qed nissorveljaw. Għaliex ma tużax delegat? Għandek bżonn ukoll tikkonfigura iptables. delegat? Għandek bżonn ukoll tikteb/tikkoreġi konfigurazzjoni għad-DBMS biex tippermetti l-monitoraġġ. delegat! U jekk il-kreattività hija nieqsa, allura tista 'tagħmel delegazzjoni include_role f'linja nested bl-użu ta 'filtru delikat fuq lista ta' gruppi, u ġewwa include_role tista' tagħmel aktar delegate_to mill-ġdid. U 'l bogħod immorru...

Xewqa tajba - li jkollna rwol wieħed ta 'monitoraġġ, li "jagħmel kollox" - twassalna f'infern sħiħ li ħafna drabi jkun hemm triq waħda biss: li nikteb kollox mill-bidu.

Fejn seħħ l-iżball hawn? Fil-mument li skoprejt li biex tagħmel il-kompitu "x" fuq host X kellek tmur għall-host Y u tagħmel "y" hemmhekk, kellek tagħmel eżerċizzju sempliċi: mur u ikteb play, li fuq host Y tagħmel y. Iżżidx xi ħaġa ma' "x", imma iktebha mill-bidu. Anke b'varjabbli hardcoded.

Jidher li kollox fil-paragrafi hawn fuq jingħad b'mod korrett. Imma dan mhux il-każ tiegħek! Minħabba li trid tikteb kodiċi li tista 'terġa' tintuża li hija XOTTA u bħal librerija, u trid tfittex metodu dwar kif tagħmel dan.

Dan huwa fejn lurks żball serju ieħor. Żball li biddel ħafna proġetti minn miktuba b’mod tollerabbli (jista’ jkun aħjar, imma kollox jaħdem u faċli biex jintemm) f’orrur sħiħ li lanqas l-awtur ma jistax jifhem. Taħdem, imma Alla ħares li tibdel xi ħaġa.

L-iżball huwa: ir-rwol huwa funzjoni tal-librerija. Din l-analoġija tant ħarbtet bidu tajjeb li huwa sempliċement imdejjaq li tara. Ir-rwol mhuwiex funzjoni tal-librerija. Ma tistax tagħmel kalkoli u ma tistax tieħu deċiżjonijiet fil-livell tal-logħob. Fakkarni x'deċiżjonijiet jieħu play?

Grazzi, għandek raġun. Play jieħu deċiżjoni (b'mod aktar preċiż, fih informazzjoni) dwar liema kompiti u rwoli għandu jwettaq fuq liema hosts.

Jekk tiddelega din id-deċiżjoni għal rwol, u anke b'kalkoli, doom lilek innifsek (u lil dak li se jipprova jparsa l-kodiċi tiegħek) għal eżistenza miserable. Ir-rwol ma jiddeċiedix fejn jitwettaq. Din id-deċiżjoni tittieħed bil-logħob. Ir-rwol jagħmel dak li jingħad, fejn jingħad.

Għaliex huwa perikoluż li tipprogramma f'Ansible u għaliex COBOL huwa aħjar minn Ansible se nitkellmu fil-kapitolu dwar varjabbli u jinja. Għalissa, ejja ngħidu ħaġa waħda - kull wieħed mill-kalkoli tiegħek iħalli warajh traċċa li ma titħassarx ta 'bidliet fil-varjabbli globali, u ma tista' tagħmel xejn dwarha. Hekk kif iż-żewġ "traċċi" qasmu, kollox spiċċa.

Nota għall-squeamish: ir-rwol jista 'ċertament jinfluwenza l-fluss tal-kontroll. Kul delegate_to u għandu użi raġonevoli. Kul meta: end host/play. Imma! Ftakar li ngħallmu l-affarijiet bażiċi? Insejt delegate_to. Qed nitkellmu dwar l-aktar kodiċi Ansible sempliċi u sabiħ. Li huwa faċli biex jinqara, faċli biex tikteb, faċli biex tiddibaggja, faċli biex tittestja u faċli biex titlesta. Allura, għal darb'oħra:

play u play biss jiddeċiedi fuq liema jospita x'inhu esegwit.

F'din it-taqsima, ittrattajna l-oppożizzjoni bejn il-logħob u r-rwol. Issa ejja nitkellmu dwar ir-relazzjoni kompiti vs rwol.

Kompiti u Rwoli

Ikkunsidra l-logħob:

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

Ejja ngħidu li għandek bżonn tagħmel foo. U qisu foo: name=foobar state=present. Fejn għandi nikteb dan? fil-pre? post? Oħloq rwol?

...U fejn marru l-kompiti?

Qed nibdew mill-ġdid bl-affarijiet bażiċi - l-apparat tal-logħob. Jekk float fuq din il-kwistjoni, ma tistax tuża l-logħob bħala bażi għal kull ħaġa oħra, u r-riżultat tiegħek ikun "mgħax".

Apparat tal-logħob: direttiva hosts, settings għal-logħob innifsu u pre_tasks, kompiti, rwoli, sezzjonijiet post_tasks. Il-parametri li fadal għal-logħob mhumiex importanti għalina issa.

L-ordni tat-taqsimiet tagħhom bil-kompiti u r-rwoli: pre_tasks, roles, tasks, post_tasks. Peress li semantikament l-ordni ta 'eżekuzzjoni hija bejn tasks и roles mhix ċara, allura l-aħjar prattiki jgħidu li qed inżidu taqsima tasks, biss jekk le roles... Jekk ikun hemm roles, imbagħad il-kompiti mehmuża kollha jitqiegħdu f'sezzjonijiet pre_tasks/post_tasks.

Jibdal biss li kollox huwa semantikament ċar: l-ewwel pre_tasks, allura roles, allura post_tasks.

Imma għadna ma weġibniex il-mistoqsija: fejn hi s-sejħa tal-modulu? foo tikteb? Għandna bżonn niktbu rwol sħiħ għal kull modulu? Jew huwa aħjar li jkollok rwol oħxon għal kollox? U jekk mhux rwol, allura fejn għandi nikteb - fil-pre jew post?

Jekk ma jkun hemm l-ebda tweġiba raġunata għal dawn il-mistoqsijiet, allura dan huwa sinjal ta 'nuqqas ta' intuwizzjoni, jiġifieri, dawk l-istess "pedamenti mgħaġġla." Ejja insemmu. L-ewwel, mistoqsija ta 'sigurtà: Jekk play għandha pre_tasks и post_tasks (u m'hemm l-ebda kompiti jew rwoli), allura xi ħaġa tista 'tkisser jekk nwettaq l-ewwel biċċa xogħol minn post_tasks Jiena nimxiha sal-aħħar pre_tasks?

Naturalment, il-kliem tal-mistoqsija jagħti ħjiel li se jinkiser. Imma x'inhi eżattament?

... Handlers. Il-qari tal-punti bażiċi jiżvela fatt importanti: il-handlers kollha jitlaħlaħ awtomatikament wara kull taqsima. Dawk. il-kompiti kollha minn pre_tasks, imbagħad il-handlers kollha li ġew notifikati. Imbagħad ir-rwoli kollha u l-handlers kollha li ġew notifikati fir-rwoli jiġu eżegwiti. Wara post_tasks u dawk li jieħdu ħsiebhom.

Għalhekk, jekk inti drag kompitu minn post_tasks в pre_tasks, imbagħad potenzjalment tesegwixxiha qabel ma jiġi esegwit il-handler. per eżempju, jekk fi pre_tasks is-server tal-web huwa installat u kkonfigurat, u post_tasks xi ħaġa tintbagħat lilha, imbagħad ittrasferixxi dan il-kompitu lis-sezzjoni pre_tasks se jwassal għall-fatt li fil-ħin li "tibgħat" is-server għadu mhux se jkun qed jaħdem u kollox jinkiser.

Issa ejja naħsbu mill-ġdid, għaliex għandna bżonn pre_tasks и post_tasks? Pereżempju, sabiex tlesti dak kollu meħtieġ (inklużi l-handlers) qabel ma twettaq ir-rwol. A post_tasks se jippermettilna naħdmu bir-riżultati ta 'l-eżekuzzjoni ta' rwoli (inklużi handlers).

Espert astut ta' Ansible jgħidilna x'inhu. meta: flush_handlers, imma għaliex għandna bżonn flush_handlers jekk nistgħu nistrieħu fuq l-ordni tal-eżekuzzjoni tas-sezzjonijiet fil-logħob? Barra minn hekk, l-użu ta 'meta: flush_handlers jista' jagħtina affarijiet mhux mistennija b'handlers duplikati, u jagħtina twissijiet strambi meta jintużaw when у block eċċ. L-aħjar tkun taf l-ansible, aktar sfumaturi tista 'ssemmi għal soluzzjoni "delikata". U soluzzjoni sempliċi – bl-użu ta’ diviżjoni naturali bejn pre/rwoli/post – ma tikkawżax sfumaturi.

U, lura għall-‘foo’ tagħna. Fejn għandi npoġġiha? Fil-pre, post jew rwoli? Ovvjament, dan jiddependi fuq jekk hemmx bżonn ir-riżultati tal-handler għal foo. Jekk ma jkunux hemm, allura foo m'għandux għalfejn jitqiegħed la qabel jew wara - dawn it-taqsimiet għandhom tifsira speċjali - l-eżekuzzjoni tal-kompiti qabel u wara l-korp ewlieni tal-kodiċi.

Issa t-tweġiba għall-mistoqsija "rwol jew kompitu" taqa 'għal dak li diġà qed jilgħab - jekk hemm kompiti hemmhekk, allura trid iżżidhom mal-kompiti. Jekk ikun hemm rwoli, trid toħloq rwol (anke minn kompitu wieħed). Ħa nfakkarkom li l-kompiti u r-rwoli ma jintużawx fl-istess ħin.

Il-fehim tal-baŜi ta 'Ansible jipprovdi tweġibiet raġonevoli għal mistoqsijiet apparentement ta' togħma.

Kompiti u rwoli (it-tieni parti)

Issa ejja niddiskutu s-sitwazzjoni meta tkun qed tibda tikteb playbook. Għandek bżonn tagħmel foo, bar u baz. Dawn it-tliet kompiti huma rwol wieħed jew tliet rwoli? Biex tqassar il-mistoqsija: f'liema punt għandek tibda tikteb ir-rwoli? X'inhu l-għan li tikteb rwoli meta tista' tikteb kompiti?... X'inhu rwol?

Wieħed mill-akbar żbalji (diġà tkellimt dwar dan) huwa li taħseb li rwol huwa bħal funzjoni fil-librerija ta 'programm. Kif tidher deskrizzjoni ġenerika tal-funzjoni? Jaċċetta argumenti input, jinteraġixxi ma 'kawżi sekondarji, jagħmel effetti sekondarji, u jirritorna valur.

Issa, attenzjoni. X'jista' jsir minn dan fir-rwol? Dejjem int merħba li ssejjaħ effetti sekondarji, din hija l-essenza tal-Ansible kollu - biex toħloq effetti sekondarji. Għandek kawżi sekondarji? Elementari. Iżda ma '"għaddi valur u rritornah" - dak huwa fejn ma taħdimx. L-ewwel, ma tistax tgħaddi valur lil rwol. Tista 'tissettja varjabbli globali b'daqs ta' logħob tul il-ħajja fit-taqsima vars għar-rwol. Tista 'tissettja varjabbli globali b'tul ta' ħajja fil-logħob ġewwa r-rwol. Jew anke bil-ħajja tal-playbooks (set_fact/register). Imma ma jistax ikollok "varjabbli lokali". Ma tistax "tieħu valur" u "terġa' lura".

Il-ħaġa prinċipali ġejja minn dan: ma tistax tikteb xi ħaġa f'Ansible mingħajr ma tikkawża effetti sekondarji. It-tibdil tal-varjabbli globali huwa dejjem effett sekondarju għal funzjoni. Fil Rust, per eżempju, tibdil ta 'varjabbli globali huwa unsafe. U f'Ansible huwa l-uniku metodu biex tinfluwenza l-valuri għal rwol. Innota l-kliem użat: mhux "tgħaddi valur għar-rwol", iżda "ibiddel il-valuri li juża r-rwol". M'hemm l-ebda iżolament bejn ir-rwoli. M'hemm l-ebda iżolament bejn il-kompiti u r-rwoli.

Total: rwol mhuwiex funzjoni.

X'hemm tajjeb dwar ir-rwol? L-ewwel, ir-rwol għandu valuri awtomatiċi (/default/main.yaml), it-tieni, ir-rwol għandu direttorji addizzjonali għall-ħażna ta 'fajls.

X'inhuma l-benefiċċji tal-valuri awtomatiċi? Minħabba li fil-piramida ta 'Maslow, it-tabella pjuttost distorta ta' prijoritajiet varjabbli ta 'Ansible, l-inadempjenzi tar-rwoli huma l-aktar prijorità baxxa (nieqes il-parametri tal-linja tal-kmand ta' Ansible). Dan ifisser li jekk għandek bżonn tipprovdi valuri awtomatiċi u ma tinkwetax dwarhom jissuperaw il-valuri mill-inventarju jew mill-varjabbli tal-grupp, allura l-inadempjenzi tar-rwoli huma l-uniku post tajjeb għalik. (Qed nigdeb ftit - hemm aktar |d(your_default_here), imma jekk nitkellmu dwar postijiet stazzjonarji, allura r-rwoli nuqqasijiet biss).

X'iktar huwa kbir dwar ir-rwoli? Għax għandhom il-katalgi tagħhom. Dawn huma direttorji għal varjabbli, kemm kostanti (jiġifieri kkalkulati għar-rwol) kif ukoll dinamiċi (hemm jew mudell jew anti-mudell - include_vars flimkien ma ' {{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml.). Dawn huma d-direttorji għal files/, templates/. Ukoll, jippermettilek li jkollok il-moduli u l-plugins tiegħek stess (library/). Iżda, meta mqabbla mal-kompiti f'playbook (li jista 'jkollu wkoll dan kollu), l-uniku benefiċċju hawnhekk huwa li l-fajls ma jintremewx f'munzell wieħed, iżda diversi munzelli separati.

Dettall ieħor: tista' tipprova toħloq rwoli li jkunu disponibbli għall-użu mill-ġdid (permezz tal-galaxie). Bil-miġja tal-kollezzjonijiet, id-distribuzzjoni tar-rwoli tista 'titqies kważi minsija.

Għalhekk, ir-rwoli għandhom żewġ karatteristiċi importanti: għandhom nuqqasijiet (karatteristika unika) u jippermettulek tistruttura l-kodiċi tiegħek.

Nirritornaw għall-mistoqsija oriġinali: meta tagħmel il-kompiti u meta tagħmel ir-rwoli? Kompiti fi playbook huma l-aktar spiss użati jew bħala "kolla" qabel/wara rwoli, jew bħala element indipendenti tal-bini (imbagħad m'għandux ikun hemm rwoli fil-kodiċi). Munzell ta 'kompiti normali mħallta ma' rwoli huwa sloppiness mhux ambigwu. Għandek taderixxi ma 'stil speċifiku - jew kompitu jew rwol. Ir-rwoli jipprovdu separazzjoni ta 'entitajiet u nuqqasijiet, il-kompiti jippermettu li taqra l-kodiċi aktar malajr. Normalment, aktar kodiċi "stazzjonarju" (importanti u kumpless) jitqiegħed fi rwoli, u skripts awżiljarji jinkitbu fl-istil tal-kompitu.

Huwa possibbli li tagħmel import_role bħala kompitu, imma jekk tikteb dan, imbagħad kun ippreparat li tispjega lis-sens tas-sbuħija tiegħek għaliex trid tagħmel dan.

Qarrej astut jista 'jgħid li r-rwoli jistgħu jimportaw rwoli, ir-rwoli jista' jkollhom dipendenzi permezz ta 'galaxy.yml, u hemm ukoll terribbli u terribbli. include_role — Infakkarkom li qed intejbu l-ħiliet fl-Ansible bażiku, u mhux fil-ġinnastika tal-figura.

Handlers u kompiti

Ejja niddiskutu ħaġa oħra ovvja: handlers. Li tkun taf kif tużahom b'mod korrett hija kważi arti. X'inhi d-differenza bejn handler u drag?

Peress li qed niftakru l-affarijiet bażiċi, hawn eżempju:

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

Il-handlers tar-rwol jinsabu f'rolename/handlers/main.yaml. Handlers jħarbtu bejn il-parteċipanti kollha tal-logħob: pre/post_tasks jistgħu jiġbdu role handlers, u rwol jista 'jiġbed handlers mid-dramm. Madankollu, sejħiet "cross-role" lil handlers jikkawżaw ħafna aktar wtf milli jirrepetu handler trivjali. (Element ieħor tal-aħjar prattiki huwa li tipprova ma tirrepetix l-ismijiet tal-handler).

Id-differenza ewlenija hija li l-kompitu huwa dejjem eżegwit (idempotently) (plus/minus tags u when), u l-handler - mill-istat bidla (jinnotifika nirien biss jekk ikun ġie mibdul). Xi jfisser dan? Per eżempju, il-fatt li meta terġa 'tibda, jekk ma kienx hemm mibdul, allura ma jkun hemm ebda handler. Għaliex jista 'jkun li għandna bżonn tesegwixxi handler meta ma kien hemm l-ebda bidla fil-kompitu ta' ġenerazzjoni? Per eżempju, minħabba li xi ħaġa kissret u nbidlet, iżda l-eżekuzzjoni ma laħqitx il-handler. Per eżempju, minħabba li n-netwerk kien temporanjament waqa '. Il-konfigurazzjoni nbidlet, is-servizz ma reġax inbeda. Il-ħin li jmiss li tibda, il-konfigurazzjoni ma tibqax tinbidel, u s-servizz jibqa' bil-verżjoni l-qadima tal-konfigurazzjoni.

Is-sitwazzjoni bil-konfigurazzjoni ma tistax tiġi solvuta (b'mod aktar preċiż, tista' tivvinta protokoll speċjali ta 'startjar lilek innifsek b'bnadar tal-fajls, eċċ., iżda dan m'għadux "ansible bażiku" fi kwalunkwe forma). Iżda hemm storja komuni oħra: installajna l-applikazzjoni, irreġistrajna .service-file, u issa rriduha daemon_reload и state=started. U l-post naturali għal dan jidher li huwa l-handler. Imma jekk tagħmilha mhux handler iżda kompitu fl-aħħar ta 'tasklist jew rwol, allura se tiġi eżegwita idempotently kull darba. Anke jekk il-playbook kisser fin-nofs. Dan ma jsolvix il-problema restarted għal kollox (ma tistax tagħmel biċċa xogħol bl-attribut restarted, minħabba li l-idempotenza tintilef), iżda definittivament ta 'min jagħmel state=started, l-istabbiltà ġenerali tal-playbooks tiżdied, minħabba li in-numru ta 'konnessjonijiet u l-istat dinamiku jonqos.

Proprjetà oħra pożittiva tal-handler hija li ma tinstaddx l-output. Ma kien hemm l-ebda tibdil - ebda żejjed maqbuż jew ok fl-output - aktar faċli biex jinqara. Hija wkoll proprjetà negattiva - jekk issib typo f'kompitu eżegwit b'mod lineari fl-ewwel ġirja, allura l-handlers jiġu eżegwiti biss meta jinbidlu, i.e. taħt xi kundizzjonijiet - rari ħafna. Pereżempju, għall-ewwel darba f’ħajti ħames snin wara. U, ovvjament, se jkun hemm typo fl-isem u kollox jinkiser. U jekk ma tmexxihomx it-tieni darba, m'hemm l-ebda mibdul.

Separatament, għandna bżonn nitkellmu dwar id-disponibbiltà tal-varjabbli. Pereżempju, jekk tinnotifika kompitu b'linja, x'se jkun fil-varjabbli? Tista' taqta' b'mod analitiku, iżda mhux dejjem tkun trivjali, speċjalment jekk il-varjabbli jiġu minn postijiet differenti.

... Allura l-handlers huma ħafna inqas utli u ħafna aktar problematiċi milli jidhru. Jekk tista 'tikteb xi ħaġa sabiħa (mingħajr frills) mingħajr handlers, huwa aħjar li tagħmel dan mingħajrhom. Jekk ma taħdimx sabiħ, huwa aħjar magħhom.

Il-qarrej korrużiv bir-raġun jindika li ma ddiskutejniex listenli handler jista' jċempel notify għal handler ieħor, li handler jista' jinkludi import_tasks (li jista' jagħmel include_role ma' with_items), li s-sistema tal-handler f'Ansible hija Turing-completa, li handlers minn include_role jiltaqgħu b'mod kurjuż ma' handlers mil-logħob, eċċ .d. - dan kollu huwa ċar li mhux il-"baŜi").

Għalkemm hemm WTF waħda speċifika li fil-fatt hija karatteristika li trid iżżomm f'moħħok. Jekk il-kompitu tiegħek jiġi esegwit bi delegate_to u għandu jinnotifika, allura l-handler korrispondenti jiġi esegwit mingħajr delegate_to, i.e. fuq l-ospitanti fejn il-logħob huwa assenjat. (Għalkemm il-handler, ovvjament, jista’ jkollu delegate_to L-istess).

Separatament, irrid ngħid ftit kliem dwar rwoli li jistgħu jerġgħu jintużaw. Qabel ma dehru kollezzjonijiet, kien hemm idea li tista 'tagħmel rwoli universali li jistgħu jkunu ansible-galaxy install u marru. Jaħdem fuq l-OS kollha tal-varjanti kollha fis-sitwazzjonijiet kollha. Allura, l-opinjoni tiegħi: ma taħdimx. Kull rwol mal-quddiesa include_vars, li jappoġġja 100500 każ, huwa ddestinat għall-abyss ta 'bugs każ kantuniera. Jistgħu jiġu koperti b'ittestjar massiv, iżda bħal kull ittestjar, jew għandek prodott Kartesjan ta 'valuri ta' input u funzjoni totali, jew għandek "xenarji individwali koperti." L-opinjoni tiegħi hija li huwa ħafna aħjar jekk ir-rwol ikun lineari (kumplessità ċiklomatika 1).

L-inqas ifs (espliċiti jew dikjarattivi - fil-forma when jew forma include_vars skond sett ta 'varjabbli), l-aħjar ir-rwol. Xi drabi trid tagħmel fergħat, imma, nerġa’ nirrepeti, inqas ma jkun hemm, aħjar. Allura jidher li huwa rwol tajjeb mal-galaxie (jaħdem!) Ma 'mazz ta' when jista’ jkun inqas preferibbli mir-rwol “ta’ wieħed” minn ħames kompiti. Il-mument meta r-rwol mal-galaxie huwa aħjar huwa meta tibda tikteb xi ħaġa. Il-mument meta tmur għall-agħar huwa meta xi ħaġa tinkiser u jkollok suspett li huwa minħabba r-"rwol mal-galaxie". Tiftaħha, u hemm ħames inklużjonijiet, tmien folji tal-kompiti u munzell when'ov... U għandna bżonn insemmu dan. Minflok 5 kompiti, lista lineari li fiha m'hemm xejn x'tkisser.

Fil-partijiet li ġejjin

  • Ftit dwar inventarju, varjabbli tal-grupp, plugin host_group_vars, hostvars. Kif torbot għoqda Gordian bi spagetti. Skop u varjabbli ta' preċedenza, Mudell ta' memorja Ansible. "Allura fejn naħżnu l-isem tal-utent għad-database?"
  • jinja: {{ jinja }} — nosql notype nosense plastilina artab. Huwa kullimkien, anke fejn ma tistenniex. Ftit dwar !!unsafe u yaml Delicious.

Sors: www.habr.com

Żid kumment