Mahinungdanon nga mga sukaranan, kung wala ang imong mga playbook mahimong usa ka lump sa sticky pasta

Daghan kog mga pagrepaso sa Ansible code sa ubang tawo ug daghan kog nasulat. Sa dagan sa pag-analisar sa mga kasaypanan (sa ubang mga tawo ug sa akong kaugalingon), ingon man usab sa daghang mga interbyu, akong naamgohan ang nag-unang sayop nga gihimo sa mga tiggamit sa Ansible - nakasulod sila sa mga komplikadong butang nga wala'y pag-master sa mga sukaranan.

Aron matul-id kini nga unibersal nga inhustisya, nakahukom ako nga magsulat usa ka pasiuna sa Ansible para sa mga nakahibalo na niini. Gipasidan-an ko ikaw, dili kini usa ka pagsaysay pag-usab sa mga tawo, kini usa ka taas nga pagbasa nga adunay daghang mga letra ug wala’y mga litrato.

Ang gipaabot nga lebel sa magbabasa mao nga pila ka libo nga linya sa yamla ang nasulat na, adunay naa na sa produksiyon, apan "sa usa ka paagi ang tanan hiwi."

Ngalan

Ang panguna nga sayup nga gihimo sa usa ka Ansible nga tiggamit mao ang wala pagkahibalo kung unsa ang tawag sa usa ka butang. Kung wala ka kahibalo sa mga ngalan, dili nimo masabtan kung unsa ang giingon sa dokumentasyon. Usa ka buhi nga pananglitan: sa panahon sa usa ka interbyu, ang usa ka tawo nga ingon og nag-ingon nga daghan siya nga nagsulat sa Ansible dili makatubag sa pangutana nga "unsa nga mga elemento naglangkob sa usa ka playbook?" Ug sa dihang misugyot ko nga "ang tubag gipaabut nga ang playbook naglangkob sa dula," ang makadaut nga komentaryo nga "wala namo gigamit kana" misunod. Nagsulat ang mga tawo nga Ansible para sa kuwarta ug dili mogamit og dula. Gigamit nila kini, apan wala mahibal-an kung unsa kini.

Busa magsugod kita sa usa ka yano nga butang: unsa ang tawag niini. Tingali nahibal-an nimo kini, o tingali wala ka, tungod kay wala ka magtagad sa imong pagbasa sa dokumentasyon.

ansible-playbook nagpatuman sa playbook. Ang playbook usa ka file nga adunay extension nga yml/yaml, sa sulod niini adunay usa ka butang nga sama niini:

---
- hosts: group1
  roles:
    - role1

- hosts: group2,group3
  tasks:
    - debug:

Nakaamgo na kami nga kining tibuok nga file usa ka playbook. Mahimo natong ipakita kung asa ang mga tahas ug asa ang mga buluhaton. Apan asa ang dula? Ug unsa ang kalainan tali sa dula ug papel o playbook?

Anaa kini tanan sa dokumentasyon. Ug gimingaw sila niini. Mga nagsugod - tungod kay daghan kaayo ug dili nimo mahinumduman ang tanan sa usa ka higayon. Nasinati - tungod kay "mga butang nga walay hinungdan". Kung eksperyensiyado ka, basaha pag-usab kini nga mga panid labing menos kausa matag unom ka bulan, ug ang imong code mahimong nanguna sa klase.

Busa, hinumdumi: Ang Playbook usa ka lista nga gilangkuban sa dula ug import_playbook.
Kini usa ka dula:

- hosts: group1
  roles:
    - role1

ug kini usab laing dula:

- hosts: group2,group3
  tasks:
    - debug:

Unsa ang dula? Ngano siya?

Ang pagdula maoy usa ka mahinungdanong elemento alang sa usa ka playbook, tungod kay ang pagdula ug dula lamang nag-uban sa usa ka lista sa mga tahas ug/o mga buluhaton uban sa usa ka lista sa mga host diin sila kinahanglan nga ipatuman. Sa lawom nga kahiladman sa dokumentasyon makit-an nimo ang paghisgot delegate_to, local lookup plugins, network-cli-specific settings, jump hosts, etc. Gitugotan ka nila nga gamay nga usbon ang lugar diin gihimo ang mga buluhaton. Pero, kalimti na. Ang matag usa niining maalamon nga mga kapilian adunay piho nga mga gamit, ug siguradong dili kini unibersal. Ug naghisgot kami bahin sa sukaranang mga butang nga kinahanglan mahibal-an ug magamit sa tanan.

Kung gusto nimo nga himuon ang "usa ka butang" "sa usa ka lugar", isulat nimo ang dula. Dili papel. Dili usa ka tahas sa mga module ug mga delegado. Kuhaa kini ug isulat ang dula. Diin, sa field sa mga host imong gilista kung asa ipatuman, ug sa mga tahas/mga buluhaton - kung unsa ang ipatuman.

Simple, dili ba? Sa unsang paagi kini mahimo nga lain?

Usa sa mga kinaiya nga mga higayon nga ang mga tawo adunay tinguha sa pagbuhat niini dili pinaagi sa pagdula mao ang "papel nga nagtakda sa tanan." Gusto ko nga adunay usa ka tahas nga nag-configure sa duha nga mga server sa una nga tipo ug mga server sa ikaduha nga tipo.

Usa ka pananglitan sa archetypal mao ang pagmonitor. Gusto ko nga adunay usa ka papel sa pagmonitor nga mag-configure sa pagmonitor. Ang papel sa pagmonitor gi-assign sa pagmonitor sa mga host (sumala sa pagdula). Apan kini nahimo nga alang sa pagmonitor kinahanglan namon nga maghatud sa mga pakete sa mga host nga among gibantayan. Nganong dili gamiton ang delegado? Kinahanglan mo usab nga i-configure ang mga iptables. delegado? Kinahanglan ka usab nga magsulat / magtul-id sa usa ka config para sa DBMS aron mahimo ang pag-monitor. delegado! Ug kung kulang ang pagkamamugnaon, mahimo ka maghimo usa ka delegasyon include_role sa usa ka nested loop gamit ang usa ka tricky filter sa usa ka lista sa mga grupo, ug sa sulod include_role mas daghan pa imong mahimo delegate_to pag-usab. Ug lakaw na mi...

Usa ka maayong pangandoy - nga adunay usa ka papel sa pag-monitor, nga "nagbuhat sa tanan" - modala kanato ngadto sa hingpit nga impyerno diin kasagaran adunay usa lamang ka paagi sa paggawas: ang pagsulat pag-usab sa tanan gikan sa wala.

Diin nahitabo ang sayop dinhi? Sa higayon nga imong nahibal-an nga aron mahimo ang buluhaton nga "x" sa host X kinahanglan nimo nga moadto sa host Y ug buhaton ang "y" didto, kinahanglan nimo nga buhaton ang usa ka yano nga ehersisyo: lakaw ug isulat ang dula, nga sa host Y ang y. Ayaw idugang ang usa ka butang sa "x", apan isulat kini gikan sa wala. Bisan sa hardcoded variables.

Morag husto ang gisulti sa tanan sa mga parapo sa itaas. Apan dili kini ang imong kaso! Tungod kay gusto nimong isulat ang magamit nga code nga DRY ug sama sa librarya, ug kinahanglan nimo pangitaon ang pamaagi kung giunsa kini buhaton.

Dinhi nagtago ang laing seryoso nga sayop. Usa ka kasaypanan nga nakapahimo sa daghang mga proyekto gikan sa matugoton nga pagsulat (mahimo nga mas maayo, apan ang tanan molihok ug dali nga mahuman) nga usa ka hingpit nga kalisang nga bisan ang tagsulat dili mahibal-an. Kini molihok, apan gidid-an sa Diyos nga usbon nimo ang bisan unsang butang.

Ang sayup mao ang: ang papel usa ka function sa librarya. Kini nga analohiya nakaguba sa daghang maayong mga sinugdanan nga makapasubo nga tan-awon. Ang tahas dili function sa librarya. Dili siya makahimo sa mga kalkulasyon ug dili siya makahimo sa mga desisyon sa lebel sa dula. Pahinumdumi ko kung unsa nga mga desisyon ang gihimo sa pagdula?

Salamat, husto ka. Naghimo og desisyon ang Play (mas tukma, kini adunay impormasyon) mahitungod sa unsa nga mga buluhaton ug mga tahas ang buhaton sa mga host.

Kung imong gitugyan kini nga desisyon sa usa ka tahas, ug bisan sa mga kalkulasyon, imong gihukman ang imong kaugalingon (ug ang usa nga mosulay sa pag-parse sa imong code) sa usa ka miserable nga kinabuhi. Ang papel wala magdesisyon kung diin kini gihimo. Kini nga desisyon gihimo pinaagi sa pagdula. Gibuhat sa papel kung unsa ang gisulti niini, kung diin gisulti kini.

Ngano nga delikado ang pagprograma sa Ansible ug ngano nga ang COBOL mas maayo kaysa Ansible maghisgot kita sa kapitulo bahin sa mga variable ug jinja. Sa pagkakaron, isulti nato ang usa ka butang - ang matag usa sa imong mga kalkulasyon nagbilin sa usa ka dili mapapas nga pagsubay sa mga pagbag-o sa global nga mga variable, ug wala ka'y ​​mahimo mahitungod niini. Sa dihang nag-intersect ang duha ka “traces”, wala na ang tanan.

Matikdi alang sa squeamish: ang papel siguradong makaimpluwensya sa kontrol nga dagan. Kaon delegate_to ug kini adunay makatarunganon nga mga gamit. Kaon meta: end host/play. Apan! Hinumdumi nga atong gitudlo ang mga sukaranan? Nakalimot sa delegate_to. Naghisgot kami bahin sa labing yano ug labing matahum nga Ansible code. Nga sayon ​​basahon, sayon ​​isulat, sayon ​​i-debug, sayon ​​sulayan ug sayon ​​kompletohon. Busa, sa makausa pa:

play ug play lang ang magbuot kung kinsa nga host ang ipatuman.

Niini nga seksyon, among giatubang ang pagsupak tali sa dula ug papel. Karon atong hisgutan ang mga buluhaton batok sa relasyon sa papel.

Mga Buluhaton ug Mga Papel

Hunahunaa ang pagdula:

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

Ingnon ta nga kinahanglan nimo buhaton foo. Ug murag foo: name=foobar state=present. Asa nako isulat kini? sa pre? post? Paghimo og papel?

...Ug diin napunta ang mga buluhaton?

Nagsugod na usab kami sa mga sukaranan - ang aparato sa pagdula. Kung naglutaw ka sa kini nga isyu, dili nimo magamit ang pagdula ingon usa ka sukaranan sa tanan nga butang, ug ang imong resulta mahimong "kurog".

Play device: nag-host sa direktiba, mga setting sa pagdula sa iyang kaugalingon ug pre_tasks, mga buluhaton, mga tahas, post_tasks nga mga seksyon. Ang nahabilin nga mga parameter alang sa pagdula dili hinungdanon kanamo karon.

Ang han-ay sa ilang mga seksyon nga adunay mga buluhaton ug tahas: pre_tasks, roles, tasks, post_tasks. Tungod kay ang semantically ang han-ay sa pagpatay anaa sa taliwala tasks и roles dili klaro, unya ang labing maayo nga mga gawi nag-ingon nga kami nagdugang usa ka seksyon tasks, kung dili lang roles... Kung naa roles, unya ang tanan nga gilakip nga mga buluhaton gibutang sa mga seksyon pre_tasks/post_tasks.

Ang nahabilin mao nga ang tanan klaro sa semantiko: una pre_tasksunya rolesunya post_tasks.

Apan wala gihapon namo matubag ang pangutana: asa ang module call? foo pagsulat? Kinahanglan ba natong isulat ang tibuok nga papel alang sa matag module? O mas maayo nga adunay baga nga papel alang sa tanan? Ug kung dili usa ka tahas, nan asa ko isulat - sa pre o post?

Kung wala’y makatarunganon nga tubag sa kini nga mga pangutana, nan kini usa ka timaan sa kakulang sa intuwisyon, nga mao, kadtong parehas nga "nagkurog nga mga pundasyon." Atong hisgotan kini. Una, usa ka pangutana sa seguridad: Kung adunay dula pre_tasks и post_tasks (ug walay mga buluhaton o mga tahas), unya ang usa ka butang nga maguba kon ako sa pagbuhat sa unang buluhaton gikan sa post_tasks Ibalhin ko kini hangtod sa katapusan pre_tasks?

Siyempre, ang mga pulong sa pangutana nagpaila nga kini mabungkag. Apan unsa man gyud?

... Mga tigdumala. Ang pagbasa sa mga sukaranan nagpadayag sa usa ka hinungdanon nga kamatuoran: ang tanan nga mga tigdumala awtomatik nga ma-flush pagkahuman sa matag seksyon. Mga. tanang buluhaton gikan sa pre_tasks, unya ang tanan nga mga tigdumala nga gipahibalo. Unya ang tanan nga mga tahas ug ang tanan nga mga tigdumala nga gipahibalo sa mga tahas gipatuman. Pagkahuman post_tasks ug ang ilang mga tigdumala.

Sa ingon, kung imong gi-drag ang usa ka buluhaton gikan sa post_tasks в pre_tasks, unya posible nga imong ipatuman kini sa dili pa ipatuman ang handler. pananglitan, kung sa pre_tasks ang web server gi-install ug gi-configure, ug post_tasks adunay gipadala niini, unya ibalhin kini nga buluhaton sa seksyon pre_tasks modala ngadto sa kamatuoran nga sa panahon sa "pagpadala" ang server dili pa modagan ug ang tanan maguba.

Karon atong huna-hunaon pag-usab, nganong kinahanglan man nato pre_tasks и post_tasks? Pananglitan, aron makompleto ang tanan nga gikinahanglan (lakip ang mga tigdumala) sa dili pa matuman ang tahas. A post_tasks magtugot kanato sa pagtrabaho uban sa mga resulta sa pagpatuman sa mga tahas (lakip ang mga tigdumala).

Ang usa ka batid nga eksperto sa Ansible mosulti kanamo kung unsa kini. meta: flush_handlers, apan ngano nga kinahanglan naton ang mga flush_handler kung makasalig kita sa han-ay sa pagpatuman sa mga seksyon sa dula? Dugang pa, ang paggamit sa meta: flush_handlers makahatag kanato sa wala damha nga mga butang nga adunay mga duplicate nga mga tigdumala, nga naghatag kanato og katingad-an nga mga pasidaan kung gigamit. when у block ug uban pa. Ang mas maayo nga nahibal-an nimo ang ansible, mas daghang mga nuances nga imong mahimo nga hinganlan alang sa usa ka "makalilisang" nga solusyon. Ug ang usa ka yano nga solusyon - gamit ang usa ka natural nga dibisyon tali sa pre/role/post - dili hinungdan sa mga nuances.

Ug, balik sa among 'foo'. Asa nako ibutang? Sa pre, post or roles? Dayag nga, kini nagdepende kung kinahanglan naton ang mga resulta sa handler para sa foo. Kung wala sila, nan dili kinahanglan nga ibutang ang foo sa pre o post - kini nga mga seksyon adunay espesyal nga kahulugan - pagpatuman sa mga buluhaton sa wala pa ug pagkahuman sa punoan nga lawas sa code.

Karon ang tubag sa pangutana nga "papel o tahas" moabut sa kung unsa ang naa na - kung adunay mga buluhaton didto, nan kinahanglan nimo nga idugang kini sa mga buluhaton. Kung adunay mga tahas, kinahanglan nimo nga maghimo usa ka tahas (bisan gikan sa usa ka buluhaton). Pahinumdumi ko nimo nga ang mga buluhaton ug mga tahas wala gigamit sa parehas nga oras.

Ang pagsabut sa mga sukaranan sa Ansible naghatag makatarunganon nga mga tubag sa daw mga pangutana sa lami.

Mga buluhaton ug tahas (ikaduha nga bahin)

Karon atong hisgotan ang sitwasyon sa dihang nagsugod ka pa sa pagsulat ug playbook. Kinahanglan ka maghimo foo, bar ug baz. Kining tulo ka tahas, usa ka tahas o tulo ka tahas? Sa pag-summarize sa pangutana: sa unsa nga punto kinahanglan ka magsugod sa pagsulat sa mga tahas? Unsa man ang punto sa pagsulat sa mga tahas kung makasulat ka sa mga buluhaton?... Unsa ang usa ka tahas?

Usa sa pinakadako nga mga sayop (ako na naghisgot mahitungod niini) mao ang paghunahuna nga ang usa ka papel sama sa usa ka function sa librarya sa usa ka programa. Unsa ang hitsura sa usa ka generic function description? Gidawat niini ang mga argumento sa input, nakig-uban sa mga hinungdan sa kilid, naghimo sa mga epekto, ug nagbalik usa ka kantidad.

Karon, atensyon. Unsa ang mahimo gikan niini sa papel? Kanunay ka nga giabiabi sa pagtawag sa mga epekto, kini ang diwa sa tibuuk nga Ansible - aron makamugna ang mga epekto. Naa kay side cause? elementarya. Apan sa "ipasa ang usa ka kantidad ug ibalik kini" - kana kung diin kini dili molihok. Una, dili nimo mapasa ang usa ka bili sa usa ka papel. Mahimo nimong itakda ang usa ka global variable nga adunay tibuok kinabuhi nga gidak-on sa pagdula sa seksyon sa vars para sa papel. Mahimo nimong itakda ang usa ka global variable nga adunay tibuok kinabuhi nga dula sa sulod sa papel. O bisan sa tibuok kinabuhi sa mga playbook (set_fact/register). Apan dili ka makabaton og "lokal nga mga variable". Dili nimo mahimo ang "pagkuha usa ka kantidad" ug "ibalik kini".

Ang panguna nga butang nagsunod gikan niini: dili ka makasulat sa usa ka butang sa Ansible nga wala’y hinungdan nga mga epekto. Ang pagbag-o sa mga global variable kanunay usa ka side effect sa usa ka function. Sa Rust, pananglitan, ang pagbag-o sa usa ka global variable mao ang unsafe. Ug sa Ansible kini ra ang paagi aron maimpluwensyahan ang mga kantidad alang sa usa ka papel. Matikdi ang mga pulong nga gigamit: dili "ipasa ang usa ka bili sa papel", apan "ilisan ang mga mithi nga gigamit sa papel". Walay paglainlain tali sa mga tahas. Walay paglainlain tali sa mga buluhaton ug mga tahas.

Total: ang usa ka papel dili usa ka katungdanan.

Unsay maayo sa role? Una, ang papel adunay mga default nga kantidad (/default/main.yaml), ikaduha, ang papel adunay dugang nga mga direktoryo alang sa pagtipig sa mga file.

Unsa ang mga kaayohan sa default nga mga kantidad? Tungod kay sa Maslow's pyramid, ang Ansible nga medyo gituis nga lamesa sa variable nga mga prayoridad, ang mga default sa papel mao ang labing ubos nga prayoridad (minus Ansible command line parameters). Kini nagpasabut nga kung kinahanglan nimo nga maghatag mga default nga kantidad ug dili mabalaka bahin sa ilang pag-override sa mga kantidad gikan sa imbentaryo o mga variable sa grupo, nan ang mga default sa papel mao ra ang angay nga lugar alang kanimo. (Nagbakak ko gamay - daghan pa |d(your_default_here), apan kung maghisgot kita bahin sa mga lugar nga wala’y hunong, nan ang mga default nga papel lamang).

Unsa pa ang maayo sa mga papel? Tungod kay sila adunay ilang kaugalingon nga mga katalogo. Kini ang mga direktoryo alang sa mga baryable, pareho nga makanunayon (ie kalkulado alang sa papel) ug dinamiko (adunay usa ka pattern o usa ka anti-pattern - include_vars kuyog ang {{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml.). Kini ang mga direktoryo alang sa files/, templates/. Usab, kini nagtugot kanimo nga makabaton sa imong kaugalingon nga mga module ug mga plugins (library/). Apan, kung itandi sa mga buluhaton sa usa ka playbook (nga mahimo usab nga adunay tanan niini), ang bugtong kaayohan dinhi mao nga ang mga file dili ihulog sa usa ka pundok, apan daghang mga bulag nga pundok.

Usa pa ka detalye: mahimo nimong sulayan ang paghimo og mga tahas nga magamit pag-usab (pinaagi sa galaxy). Sa pag-abut sa mga koleksyon, ang pag-apod-apod sa papel mahimong isipon nga hapit nakalimtan.

Busa, ang mga tahas adunay duha ka importante nga mga bahin: sila adunay mga default (usa ka talagsaon nga bahin) ug kini nagtugot kanimo sa pagtukod sa imong code.

Pagbalik sa orihinal nga pangutana: kanus-a buhaton ang mga buluhaton ug kanus-a buhaton ang mga tahas? Ang mga buluhaton sa usa ka playbook kasagarang gigamit ingon nga "glue" sa wala pa / pagkahuman sa mga tahas, o ingon usa ka independente nga elemento sa pagtukod (dayon kinahanglan nga wala’y mga tahas sa code). Ang usa ka pundok sa normal nga mga buluhaton nga gisagol sa mga tahas mao ang dili klaro nga kabuang. Kinahanglan nga imong sundon ang usa ka piho nga istilo - bisan usa ka buluhaton o usa ka tahas. Ang mga tahas naghatag pagbulag sa mga entidad ug mga default, ang mga buluhaton nagtugot kanimo sa pagbasa sa code nga mas paspas. Kasagaran, mas daghang "stationary" (importante ug komplikado) nga code ang gibutang sa mga tahas, ug ang mga auxiliary nga script gisulat sa istilo sa buluhaton.

Posible nga buhaton ang import_role isip usa ka buluhaton, apan kung imong isulat kini, nan pag-andam sa pagpatin-aw sa imong kaugalingon nga pagbati sa katahum ngano nga gusto nimo buhaton kini.

Ang usa ka batid nga magbabasa mahimong moingon nga ang mga tahas maka-import sa mga tahas, ang mga tahas mahimong adunay mga dependency pinaagi sa galaxy.yml, ug adunay usa usab ka makalilisang ug makalilisang. include_role — Gipahinumdoman ko ikaw nga among gipauswag ang mga kahanas sa sukaranan nga Ansible, ug dili sa figure gymnastics.

Mga tigdumala ug mga buluhaton

Atong hisgotan ang laing klaro nga butang: mga tigdumala. Ang pagkahibalo kon unsaon paggamit kini sa husto halos usa ka arte. Unsa ang kalainan tali sa usa ka handler ug usa ka drag?

Tungod kay atong gihinumduman ang mga sukaranan, ania ang usa ka pananglitan:

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

Ang mga tigdumala sa papel nahimutang sa rolename/handlers/main.yaml. Ang mga tigdumala mag-ukay-ukay tali sa tanang partisipante sa dula: ang pre/post_tasks makabira sa mga tigdumala sa papel, ug ang usa ka papel makabira sa mga tigdumala gikan sa dula. Bisan pa, ang "cross-role" nga mga tawag sa mga handler hinungdan nga labi pa nga wtf kaysa pag-usab sa usa ka wala’y hinungdan nga handler. (Laing elemento sa labing maayo nga mga gawi mao ang pagsulay nga dili balikon ang mga ngalan sa tigdumala).

Ang nag-unang kalainan mao nga ang buluhaton kanunay nga gipatuman (idempotently) (plus/minus tags ug when), ug ang tigdumala - pinaagi sa pagbag-o sa estado (ipahibalo lamang ang mga sunog kung kini nausab). Unsay buot ipasabot niini? Pananglitan, ang kamatuoran nga kung mag-restart ka, kung wala’y pagbag-o, wala’y tigdumala. Ngano kaha nga kinahanglan naton nga ipatuman ang handler kung wala’y pagbag-o sa buluhaton sa paghimo? Pananglitan, tungod kay adunay nabuak ug nausab, apan ang pagpatay wala makaabot sa handler. Pananglitan, tungod kay ang network temporaryo nga nawala. Ang config nausab, ang serbisyo wala pa ma-restart. Sa sunod nga pagsugod nimo niini, ang config dili na mausab, ug ang serbisyo magpabilin sa daan nga bersyon sa config.

Ang sitwasyon sa config dili masulbad (mas tukma, mahimo nimong imbento ang usa ka espesyal nga restart protocol alang sa imong kaugalingon nga adunay mga bandila sa file, ug uban pa, apan dili na kini 'basic ansible' sa bisan unsang porma). Apan adunay laing komon nga istorya: among gi-install ang aplikasyon, girekord kini .service-file, ug karon gusto namo kini daemon_reload и state=started. Ug ang natural nga lugar alang niini daw ang handler. Apan kung gihimo nimo kini nga dili usa ka handler apan usa ka buluhaton sa katapusan sa usa ka lista sa buluhaton o tahas, nan kini ipatuman nga wala’y mahimo sa matag higayon. Bisan kung ang playbook nabuak sa tunga. Kini dili makasulbad sa gi-restart nga problema sa tanan (dili ka makahimo sa usa ka buluhaton uban sa gi-restart nga hiyas, tungod kay ang idempotency nawala), apan kini siguradong takus sa pagbuhat sa estado = nagsugod, ang kinatibuk-ang kalig-on sa mga playbook nagdugang, tungod kay ang gidaghanon sa mga koneksyon ug dinamikong kahimtang mikunhod.

Ang laing positibo nga kabtangan sa handler mao nga dili kini makabara sa output. Walay mga pagbag-o - walay dugang nga gilaktawan o ok sa output - mas sayon ​​​​basahon. Kini usab usa ka negatibo nga kabtangan - kung makit-an nimo ang usa ka typo sa usa ka linearly nga gipatuman nga buluhaton sa una nga pagdagan, nan ang mga tigdumala ipatuman lamang kung mabag-o, i.e. ubos sa pipila ka mga kondisyon - panagsa ra. Pananglitan, sa unang higayon sa akong kinabuhi paglabay sa lima ka tuig. Ug, siyempre, adunay usa ka typo sa ngalan ug ang tanan maguba. Ug kung dili nimo kini ipadagan sa ikaduhang higayon, wala’y pagbag-o.

Gilain, kinahanglan naton hisgutan ang pagkaanaa sa mga variable. Pananglitan, kung gipahibalo nimo ang usa ka buluhaton nga adunay usa ka loop, unsa ang naa sa mga variable? Makatag-an ka nga analitiko, apan dili kini kanunay nga hinungdanon, labi na kung ang mga variable gikan sa lainlaing mga lugar.

... Busa ang mga tigdumala dili kaayo mapuslanon ug mas problemado kay sa ilang tan-awon. Kung makasulat ka og usa ka butang nga nindot (nga walay mga frills) nga walay mga tigdumala, mas maayo nga buhaton kini nga wala sila. Kung dili kini nindot tan-awon, mas maayo kini uban kanila.

Ang makadaut nga magbabasa husto nga nagpunting nga wala namo gihisgutan listennga ang usa ka handler makatawag og notify alang sa laing handler, nga ang usa ka handler mahimong maglakip sa import_tasks (nga mahimo maglakip sa_role with_items), nga ang handler system sa Ansible kay Turing-kompleto, nga ang mga handler gikan sa include_role intersect sa usa ka talagsaon nga paagi sa mga handler gikan sa pagdula, ug uban pa..d. - kining tanan klaro nga dili "mga sukaranan").

Bisan kung adunay usa ka piho nga WTF nga sa tinuud usa ka bahin nga kinahanglan nimong hinumdoman. Kung ang imong buluhaton gipatuman sa delegate_to ug kini nagpahibalo, unya ang katugbang nga handler gipatuman nga wala delegate_to, i.e. sa host diin ang dula gi-assign. (Bisan tuod ang handler, siyempre, mahimong adunay delegate_to Parehas).

Gilain, gusto nakong isulti ang pipila ka mga pulong bahin sa magamit nga mga tahas. Sa wala pa makita ang mga koleksyon, adunay usa ka ideya nga mahimo nimo ang mga unibersal nga tahas nga mahimo ansible-galaxy install ug miadto. Nagtrabaho sa tanan nga OS sa tanan nga mga variant sa tanan nga mga sitwasyon. Busa, ang akong opinyon: dili kini molihok. Bisan unsa nga papel nga adunay masa include_vars, nga nagsuporta sa 100500 ka mga kaso, gitakdang mahulog sa bung-aw sa mga bug sa suok nga kaso. Mahimo silang matabonan sa daghang pagsulay, apan sama sa bisan unsang pagsulay, mahimo ka adunay usa ka produkto nga Cartesian nga adunay mga kantidad sa pag-input ug usa ka kinatibuk-ang function, o ikaw adunay "tinagsa nga mga senaryo nga nasakup." Ang akong opinyon mao nga kini mas maayo kung ang papel linear (cyclomatic complexity 1).

Ang mas gamay nga ifs (klaro o deklaratibo - sa porma when o porma include_vars pinaagi sa set sa mga variable), mas maayo ang papel. Usahay kinahanglan ka nga maghimo mga sanga, apan, gisubli ko, ang labi ka gamay, labi ka maayo. Busa kini daw usa ka maayo nga papel sa galaxy (kini nagtrabaho!) Uban sa usa ka hugpong sa when mahimong dili kaayo gusto kaysa sa "kaugalingon" nga tahas gikan sa lima ka mga buluhaton. Ang higayon nga ang papel sa galaxy mas maayo kung magsugod ka sa pagsulat sa usa ka butang. Ang higayon nga kini mograbe mao ang usa ka butang nga maguba ug ikaw adunay pagduda nga kini tungod sa "role with galaxy". Imong ablihan kini, ug adunay lima ka mga inklusyon, walo ka mga task sheet ug usa ka stack when'ov... Ug kinahanglan naton kini mahibal-an. Imbis sa 5 nga mga buluhaton, usa ka linear nga lista diin wala’y mabuak.

Sa mosunod nga mga bahin

  • Usa ka gamay bahin sa imbentaryo, mga variable sa grupo, host_group_vars plugin, hostvars. Unsaon paghigot ang Gordian knot gamit ang spaghetti. Sakop ug nag-una nga mga baryable, Ansible memory model. "Busa asa nato ibutang ang username alang sa database?"
  • jinja: {{ jinja }} - nosql notype nosense humok nga plasticine. Anaa kini bisan asa, bisan asa nga wala nimo damha. Usa ka gamay bahin sa !!unsafe ug lamian yaml.

Source: www.habr.com

Idugang sa usa ka comment