Elfennau sylfaenol synhwyrol, hebddynt bydd eich llyfrau chwarae yn lwmp o basta gludiog

Rwy'n gwneud llawer o adolygiadau o god Ansible pobl eraill ac yn ysgrifennu llawer fy hun. Wrth ddadansoddi camgymeriadau (rhai pobl eraill a rhai fy hun), yn ogystal â nifer o gyfweliadau, sylweddolais y prif gamgymeriad y mae defnyddwyr Ansible yn ei wneud - maen nhw'n mynd i mewn i bethau cymhleth heb feistroli'r rhai sylfaenol.

I gywiro'r anghyfiawnder cyffredinol hwn, penderfynais ysgrifennu cyflwyniad i Ansible ar gyfer y rhai sydd eisoes yn ei wybod. Rwy'n eich rhybuddio, nid yw hwn yn ailadroddiad o ddyn, mae hwn yn ddarlleniad hir gyda llawer o lythyrau a dim lluniau.

Lefel ddisgwyliedig y darllenydd yw bod miloedd o linellau yamla eisoes wedi’u hysgrifennu, mae rhywbeth eisoes yn cael ei gynhyrchu, ond “rhywsut mae popeth yn gam.”

Enwau

Y prif gamgymeriad y mae defnyddiwr Ansible yn ei wneud yw peidio â gwybod beth yw enw rhywbeth. Os nad ydych chi'n gwybod yr enwau, ni allwch ddeall beth mae'r ddogfennaeth yn ei ddweud. Enghraifft fyw: yn ystod cyfweliad, ni allai person a oedd fel pe bai’n dweud ei fod wedi ysgrifennu llawer yn Ansible ateb y cwestiwn “pa elfennau mae llyfr chwarae yn eu cynnwys?” A phan awgrymais mai “yr ateb oedd disgwyl mai chwarae yw’r ateb,” fe ddilynodd y sylw damniol “dydyn ni ddim yn defnyddio hwnna”. Mae pobl yn ysgrifennu Ansible for money a dydyn nhw ddim yn defnyddio chwarae. Maent yn ei ddefnyddio mewn gwirionedd, ond nid ydynt yn gwybod beth ydyw.

Felly gadewch i ni ddechrau gyda rhywbeth syml: beth yw ei enw. Efallai eich bod chi'n gwybod hyn, neu efallai nad ydych chi, oherwydd ni wnaethoch chi dalu sylw wrth ddarllen y ddogfennaeth.

mae ansible-playbook yn gweithredu'r llyfr chwarae. Mae llyfr chwarae yn ffeil gyda'r estyniad yml/yaml, y tu mewn iddo mae rhywbeth fel hyn:

---
- hosts: group1
  roles:
    - role1

- hosts: group2,group3
  tasks:
    - debug:

Sylweddolon ni eisoes mai llyfr chwarae yw'r ffeil gyfan hon. Gallwn ddangos ble mae'r rolau a ble mae'r tasgau. Ond ble mae chwarae? A beth yw'r gwahaniaeth rhwng chwarae a rôl neu lyfr chwarae?

Mae'r cyfan yn y ddogfennaeth. Ac maen nhw'n ei golli. Dechreuwyr - oherwydd mae gormod ac ni fyddwch yn cofio popeth ar unwaith. Profiadol – oherwydd “pethau dibwys”. Os ydych chi'n brofiadol, ailddarllenwch y tudalennau hyn o leiaf unwaith bob chwe mis, a bydd eich cod yn dod yn arweinydd dosbarth.

Felly, cofiwch: Mae Playbook yn rhestr sy'n cynnwys chwarae a import_playbook.
Dyma un ddrama:

- hosts: group1
  roles:
    - role1

a dyma ddrama arall hefyd:

- hosts: group2,group3
  tasks:
    - debug:

Beth yw chwarae? Pam mae hi?

Mae chwarae yn elfen allweddol ar gyfer llyfr chwarae, oherwydd mae chwarae a chwarae yn unig yn cysylltu rhestr o rolau a/neu dasgau â rhestr o westeion y mae'n rhaid eu gweithredu arnynt. Yn nyfnder dwfn y ddogfennaeth gallwch chi ddod o hyd i sôn amdanynt delegate_to, ategion chwilio lleol, gosodiadau rhwydwaith-cli-benodol, gwesteiwyr neidio, ac ati. Maent yn caniatáu ichi newid ychydig ar y man lle cyflawnir tasgau. Ond, anghofio amdano. Mae gan bob un o'r opsiynau clyfar hyn ddefnyddiau penodol iawn, ac yn bendant nid ydynt yn gyffredinol. Ac rydym yn sôn am bethau sylfaenol y dylai pawb eu gwybod a'u defnyddio.

Os ydych chi eisiau perfformio “rhywbeth” “yn rhywle”, rydych chi'n ysgrifennu chwarae. Ddim yn rôl. Nid rôl gyda modiwlau a chynrychiolwyr. Rydych chi'n ei gymryd ac yn ysgrifennu chwarae. Yn y maes gwesteiwr rydych chi'n rhestru ble i weithredu, ac mewn rolau / tasgau - beth i'w weithredu.

Syml, iawn? Sut gallai fod fel arall?

Un o’r adegau nodweddiadol pan fo gan bobl awydd i wneud hyn nid trwy chwarae yw’r “rôl sy’n gosod popeth i fyny.” Hoffwn gael rôl sy'n ffurfweddu gweinyddwyr o'r math cyntaf a gweinyddwyr o'r ail fath.

Enghraifft archeteip yw monitro. Hoffwn gael rôl fonitro a fydd yn ffurfweddu monitro. Neilltuir y rôl fonitro i'r gwesteiwyr monitro (yn ôl chwarae). Ond ar gyfer monitro mae'n ymddangos bod angen i ni ddosbarthu pecynnau i'r gwesteiwyr yr ydym yn eu monitro. Beth am ddefnyddio cynadleddwr? Mae angen i chi hefyd ffurfweddu iptables. dirprwy? Mae angen i chi hefyd ysgrifennu/cywiro ffurfwedd ar gyfer y DBMS i alluogi monitro. dirprwy! Ac os oes diffyg creadigrwydd, yna gallwch chi wneud dirprwyaeth include_role mewn dolen nythu gan ddefnyddio hidlydd dyrys ar restr o grwpiau, a thu mewn include_role gallwch chi wneud mwy delegate_to eto. Ac i ffwrdd a ni ...

Dymuniad da – cael un rôl fonitro sengl, sy’n “gwneud popeth” – sy’n ein harwain i uffern llwyr, a dim ond un ffordd allan sydd gan amlaf: ailysgrifennu popeth o’r dechrau.

Ble digwyddodd y camgymeriad yma? Y foment y gwnaethoch chi ddarganfod bod yn rhaid i chi fynd i westeiwr Y a gwneud "y" yno i wneud tasg "x" ar gwesteiwr X, roedd yn rhaid i chi wneud ymarfer syml: ewch i ysgrifennu chwarae, sydd ar westeiwr Y yn gwneud y. Peidiwch ag ychwanegu rhywbeth at "x", ond ysgrifennwch ef o'r dechrau. Hyd yn oed gyda newidynnau cod caled.

Mae'n ymddangos bod popeth yn y paragraffau uchod yn cael ei ddweud yn gywir. Ond nid dyma'ch achos chi! Oherwydd eich bod chi eisiau ysgrifennu cod y gellir ei ailddefnyddio sy'n SYCH ac yn debyg i lyfrgell, ac mae angen i chi chwilio am ddull ar sut i'w wneud.

Dyma lle mae camgymeriad difrifol arall yn llechu. Gwall a drodd llawer o brosiectau o'u hysgrifennu'n oddefol (gallai fod yn well, ond mae popeth yn gweithio ac yn hawdd ei orffen) yn arswyd llwyr na all hyd yn oed yr awdur ei ddarganfod. Mae'n gweithio, ond mae Duw yn gwahardd i chi newid unrhyw beth.

Y gwall yw: swyddogaeth llyfrgell yw rôl. Mae'r gyfatebiaeth hon wedi difetha cymaint o ddechreuadau da fel ei bod hi'n drist ei gwylio. Nid swyddogaeth llyfrgell yw'r rôl. Ni all wneud cyfrifiadau ac ni all wneud penderfyniadau lefel chwarae. Atgoffwch fi pa benderfyniadau mae chwarae yn eu gwneud?

Diolch, rydych chi'n iawn. Mae chwarae yn gwneud penderfyniad (yn fwy manwl gywir, mae'n cynnwys gwybodaeth) ynghylch pa dasgau a rolau i'w cyflawni ar ba westeion.

Os byddwch chi'n dirprwyo'r penderfyniad hwn i rôl, a hyd yn oed gyda chyfrifiadau, rydych chi'n doom eich hun (a'r un a fydd yn ceisio dosrannu'ch cod) i fodolaeth ddiflas. Nid yw'r rôl yn penderfynu ble mae'n cael ei chyflawni. Gwneir y penderfyniad hwn trwy chwarae. Mae'r rôl yn gwneud yr hyn a ddywedir, lle mae'n cael ei ddweud.

Pam ei bod hi'n beryglus rhaglennu yn Ansible a pham mae COBOL yn well nag Ansible byddwn yn siarad yn y bennod am newidynnau a jinja. Am y tro, gadewch i ni ddweud un peth - mae pob un o'ch cyfrifiadau yn gadael ar ôl olion annileadwy o newidiadau mewn newidynnau byd-eang, ac ni allwch wneud unrhyw beth yn ei gylch. Cyn gynted ag yr oedd y ddau “olrheiniad” yn croestorri, roedd popeth wedi diflannu.

Nodyn ar gyfer y squeamish: gall y rôl yn sicr ddylanwadu ar y llif rheoli. Bwyta delegate_to ac mae ganddo ddefnyddiau rhesymol. Bwyta meta: end host/play. Ond! Cofiwch ein bod ni'n dysgu'r pethau sylfaenol? Wedi anghofio am delegate_to. Yr ydym yn sôn am y cod Ansible symlaf a harddaf. Sy'n hawdd ei ddarllen, yn hawdd ei ysgrifennu, yn hawdd ei ddadfygio, yn hawdd ei brofi ac yn hawdd ei gwblhau. Felly, unwaith eto:

chwarae a chwarae yn unig sy'n penderfynu pa westeiwr sy'n cynnal yr hyn a gyflawnir.

Yn yr adran hon, buom yn ymdrin â’r gwrthwynebiad rhwng chwarae a rôl. Nawr, gadewch i ni siarad am y tasgau yn erbyn y berthynas rôl.

Tasgau a Rolau

Ystyriwch chwarae:

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

Gadewch i ni ddweud bod angen i chi wneud foo. Ac mae'n edrych fel foo: name=foobar state=present. Ble dylwn i ysgrifennu hwn? mewn cyn? post? Creu rôl?

...A ble aeth y tasgau?

Rydyn ni'n dechrau gyda'r pethau sylfaenol eto - y ddyfais chwarae. Os byddwch chi'n arnofio ar y mater hwn, ni allwch ddefnyddio chwarae fel sail i bopeth arall, a bydd eich canlyniad yn "sigledig".

Dyfais chwarae: yn cynnal cyfarwyddeb, gosodiadau ar gyfer chwarae ei hun a rhag_tasgau, tasgau, rolau, adrannau post_tasks. Nid yw'r paramedrau sy'n weddill ar gyfer chwarae yn bwysig i ni nawr.

Trefn eu hadrannau gyda thasgau a rolau: pre_tasks, roles, tasks, post_tasks. Ers yn semantig mae'r drefn gweithredu rhwng tasks и roles Nid yw'n glir, yna mae arferion gorau yn dweud ein bod yn ychwanegu adran tasks, dim ond os na roles... Os oes roles, yna mae'r holl dasgau atodedig yn cael eu gosod mewn adrannau pre_tasks/post_tasks.

Y cyfan sydd ar ôl yw bod popeth yn semantig glir: yn gyntaf pre_tasksyna rolesyna post_tasks.

Ond nid ydym wedi ateb y cwestiwn o hyd: ble mae galwad y modiwl? foo ysgrifennu? A oes angen i ni ysgrifennu rôl gyfan ar gyfer pob modiwl? Neu a yw'n well cael rôl drwchus i bopeth? Ac os nad rôl, yna ble ddylwn i ysgrifennu - yn y cyn neu'r post?

Os nad oes ateb rhesymegol i’r cwestiynau hyn, yna mae hyn yn arwydd o ddiffyg greddf, hynny yw, yr un “sylfeini sigledig.” Gadewch i ni chyfrif i maes. Yn gyntaf, cwestiwn diogelwch: Os oes gan chwarae pre_tasks и post_tasks (ac nid oes unrhyw dasgau na rolau), yna gall rhywbeth dorri os byddaf yn perfformio'r dasg gyntaf o post_tasks Fe'i symudaf i'r diwedd pre_tasks?

Wrth gwrs, mae geiriad y cwestiwn yn awgrymu y bydd yn torri. Ond beth yn union?

... Trinwyr. Mae darllen y pethau sylfaenol yn datgelu ffaith bwysig: mae pob triniwr yn cael ei fflysio'n awtomatig ar ôl pob adran. Y rhai. pob gorchwyl o pre_tasks, yna yr holl drinwyr a hysbyswyd. Yna mae'r holl rolau a'r holl drinwyr a hysbyswyd yn y rolau yn cael eu gweithredu. Wedi post_tasks a'u trinwyr.

Felly, os ydych yn llusgo tasg o post_tasks в pre_tasks, yna mae'n bosibl y byddwch yn ei weithredu cyn i'r triniwr gael ei weithredu. er enghraifft, os mewn pre_tasks mae'r gweinydd gwe wedi'i osod a'i ffurfweddu, a post_tasks anfonir rhywbeth ato, yna trosglwyddwch y dasg hon i'r adran pre_tasks yn arwain at y ffaith na fydd y gweinydd yn rhedeg eto ar adeg “anfon” a bydd popeth yn torri.

Nawr gadewch i ni feddwl eto, pam mae angen pre_tasks и post_tasks? Er enghraifft, er mwyn cwblhau popeth sy'n angenrheidiol (gan gynnwys trinwyr) cyn cyflawni'r rôl. A post_tasks yn ein galluogi i weithio gyda chanlyniadau cyflawni rolau (gan gynnwys trinwyr).

Bydd arbenigwr craff Ansible yn dweud wrthym beth ydyw. meta: flush_handlers, ond pam fod angen flush_handlers arnom os gallwn ddibynnu ar drefn gweithredu adrannau mewn chwarae? Ar ben hynny, gall defnyddio meta: flush_handlers roi pethau annisgwyl i ni gyda thrinwyr dyblyg, gan roi rhybuddion rhyfedd i ni pan gaiff ei ddefnyddio when у block etc. Gorau po fwyaf y gwyddoch yr angall, y mwyaf o arlliwiau y gallwch eu henwi ar gyfer ateb “anodd”. Ac nid yw ateb syml - defnyddio rhaniad naturiol rhwng cyn / rolau / post - yn achosi naws.

Ac, yn ôl at ein 'foo'. Ble ddylwn i ei roi? Mewn cyn, swydd neu rolau? Yn amlwg, mae hyn yn dibynnu a oes angen canlyniadau'r triniwr ar gyfer foo. Os nad ydynt yno, yna nid oes angen gosod foo naill ai cyn neu ar ôl - mae gan yr adrannau hyn ystyr arbennig - cyflawni tasgau cyn ac ar ôl prif gorff y cod.

Nawr mae'r ateb i'r cwestiwn "rôl neu dasg" yn dibynnu ar yr hyn sydd eisoes ar waith - os oes yna dasgau yno, yna mae angen i chi eu hychwanegu at dasgau. Os oes rolau, mae angen i chi greu rôl (hyd yn oed o un dasg). Gadewch imi eich atgoffa nad yw tasgau a rolau yn cael eu defnyddio ar yr un pryd.

Mae deall hanfodion Ansible yn rhoi atebion rhesymol i gwestiynau ymddangosiadol o chwaeth.

Tasgau a rolau (rhan dau)

Nawr, gadewch i ni drafod y sefyllfa pan rydych chi newydd ddechrau ysgrifennu llyfr chwarae. Mae angen i chi wneud foo, bar a baz. Ai tair tasg, un rôl neu dair rôl yw'r rhain? I grynhoi'r cwestiwn: ar ba bwynt y dylech chi ddechrau ysgrifennu rolau? Beth yw pwynt ysgrifennu rolau pan fyddwch chi'n gallu ysgrifennu tasgau?... Beth yw rôl?

Un o'r camgymeriadau mwyaf (siaradais am hyn eisoes) yw meddwl bod rôl fel swyddogaeth yn llyfrgell rhaglen. Sut olwg sydd ar ddisgrifiad swyddogaeth generig? Mae'n derbyn dadleuon mewnbwn, yn rhyngweithio â sgîl-achosion, yn gwneud sgîl-effeithiau, ac yn dychwelyd gwerth.

Yn awr, sylw. Beth ellir ei wneud o hyn yn y rôl? Mae croeso i chi bob amser alw sgîl-effeithiau, dyma hanfod yr Ansible cyfan - i greu sgîl-effeithiau. Oes achosion ochr? Elfennol. Ond gyda “pasio gwerth a'i ddychwelyd” - dyna lle nad yw'n gweithio. Yn gyntaf, ni allwch drosglwyddo gwerth i rôl. Gallwch osod newidyn byd-eang gyda maint oes o chwarae yn yr adran vars ar gyfer y rôl. Gallwch chi osod newidyn byd-eang gydag oes ar waith yn y rôl. Neu hyd yn oed gydag oes llyfrau chwarae (set_fact/register). Ond ni allwch gael "newidynnau lleol". Ni allwch "gymryd gwerth" a "ei ddychwelyd".

Mae'r prif beth yn dilyn o hyn: ni allwch ysgrifennu rhywbeth yn Ansible heb achosi sgîl-effeithiau. Mae newid newidynnau byd-eang bob amser yn sgîl-effaith ar gyfer swyddogaeth. Yn Rust, er enghraifft, mae newid newidyn byd-eang yn unsafe. Ac yn Ansible dyma'r unig ddull i ddylanwadu ar y gwerthoedd ar gyfer rôl. Sylwch ar y geiriau a ddefnyddir: nid "pasio gwerth i'r rôl", ond "newid y gwerthoedd y mae'r rôl yn eu defnyddio". Nid oes unrhyw arwahanrwydd rhwng rolau. Nid oes unrhyw arwahanrwydd rhwng tasgau a rolau.

Cyfanswm: nid swyddogaeth yw rôl.

Beth sy'n dda am y rôl? Yn gyntaf, mae gan y rôl werthoedd rhagosodedig (/default/main.yaml), yn ail, mae gan y rôl gyfeiriaduron ychwanegol ar gyfer storio ffeiliau.

Beth yw manteision gwerthoedd rhagosodedig? Oherwydd ym mhyramid Maslow, tabl braidd gwyrgam Ansible o flaenoriaethau amrywiol, rhagosodiadau rôl yw'r rhai â'r flaenoriaeth fwyaf isel (llai paramedrau llinell orchymyn Ansible). Mae hyn yn golygu, os oes angen i chi ddarparu gwerthoedd rhagosodedig a pheidio â phoeni amdanynt yn diystyru'r gwerthoedd o stocrestr neu newidynnau grŵp, yna rhagosodiadau rôl yw'r unig le iawn i chi. (Rwy'n dweud celwydd ychydig - mae mwy |d(your_default_here), ond os ydym yn siarad am leoedd llonydd, yna dim ond diffyg rôl).

Beth arall sy'n wych am y rolau? Oherwydd bod ganddyn nhw eu catalogau eu hunain. Cyfeiriaduron ar gyfer newidynnau yw’r rhain, cyson (h.y. wedi’u cyfrifo ar gyfer y rôl) a deinamig (mae naill ai patrwm neu wrth-batrwm - include_vars ynghyd â {{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml.). Dyma'r cyfeiriaduron ar gyfer files/, templates/. Hefyd, mae'n caniatáu ichi gael eich modiwlau a'ch ategion eich hun (library/). Ond, o gymharu â thasgau mewn llyfr chwarae (a all hefyd gael hyn i gyd), yr unig fantais yma yw nad yw'r ffeiliau'n cael eu dympio i un pentwr, ond yn hytrach sawl pentwr ar wahân.

Un manylyn arall: gallwch geisio creu rolau a fydd ar gael i'w hailddefnyddio (trwy alaeth). Gyda dyfodiad casgliadau, gellir ystyried dosbarthiad rôl bron yn angof.

Felly, mae gan rolau ddwy nodwedd bwysig: mae ganddyn nhw ddiffygion (nodwedd unigryw) ac maen nhw'n caniatáu ichi strwythuro'ch cod.

Dychwelyd at y cwestiwn gwreiddiol: pryd i wneud tasgau a phryd i wneud rolau? Mae tasgau mewn llyfr chwarae yn cael eu defnyddio amlaf naill ai fel “glud” rolau cyn/ar ôl, neu fel elfen adeiladu annibynnol (yna ni ddylai fod unrhyw rolau yn y cod). Mae pentwr o dasgau arferol wedi'u cymysgu â rolau yn llechwraidd diamwys. Dylech gadw at arddull benodol - naill ai tasg neu rôl. Mae rolau yn darparu gwahanu endidau a rhagosodiadau, mae tasgau'n caniatáu ichi ddarllen cod yn gyflymach. Fel arfer, mae cod mwy “sefydlog” (pwysig a chymhleth) yn cael ei roi mewn rolau, ac mae sgriptiau ategol yn cael eu hysgrifennu mewn arddull tasg.

Mae'n bosibl gwneud import_role fel tasg, ond os ydych chi'n ysgrifennu hwn, yna byddwch yn barod i esbonio i'ch synnwyr o harddwch pam rydych chi eisiau gwneud hyn.

Efallai y bydd darllenydd craff yn dweud y gall rolau fewnforio rolau, gall rolau fod â dibyniaethau trwy galaxy.yml, ac mae yna hefyd ddychryn ac ofnadwy include_role — Yr wyf yn eich atgoffa ein bod yn gwella sgiliau mewn Ansible sylfaenol, ac nid mewn gymnasteg ffigwr.

Trinwyr a thasgau

Gadewch i ni drafod peth amlwg arall: trinwyr. Mae gwybod sut i'w defnyddio'n gywir bron yn gelfyddyd. Beth yw'r gwahaniaeth rhwng triniwr a llusgo?

Gan ein bod yn cofio'r pethau sylfaenol, dyma enghraifft:

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

Mae trinwyr y rôl wedi'u lleoli yn rolename/handlers/main.yaml. Mae trinwyr yn twrio rhwng pawb sy'n cymryd rhan yn y chwarae: gall tasgau_cyn/post_dynnu trinwyr rôl, a gall rôl dynnu trinwyr o'r ddrama. Fodd bynnag, mae galwadau "traws-rôl" i drinwyr yn achosi llawer mwy o wtf nag ailadrodd triniwr dibwys. (Elfen arall o arferion gorau yw ceisio peidio ag ailadrodd enwau trinwyr).

Y prif wahaniaeth yw bod y dasg bob amser yn cael ei chyflawni (yn analluog) (tagiau plws/minws a when), a'r triniwr - trwy newid cyflwr (rhowch wybod i danau dim ond os yw wedi'i newid). Beth mae hyn yn ei olygu? Er enghraifft, y ffaith, pan fyddwch chi'n ailgychwyn, os nad oedd unrhyw newid, yna ni fydd unrhyw driniwr. Pam efallai bod angen i ni weithredu triniwr pan nad oedd unrhyw newid yn y dasg cynhyrchu? Er enghraifft, oherwydd bod rhywbeth wedi torri a newid, ond ni chyrhaeddodd y gweithredu y triniwr. Er enghraifft, oherwydd bod y rhwydwaith i lawr dros dro. Mae'r ffurfwedd wedi newid, nid yw'r gwasanaeth wedi'i ailgychwyn. Y tro nesaf y byddwch chi'n ei gychwyn, nid yw'r ffurfwedd yn newid mwyach, ac mae'r gwasanaeth yn aros gyda'r hen fersiwn o'r ffurfwedd.

Ni ellir datrys y sefyllfa gyda'r config (yn fwy manwl gywir, gallwch ddyfeisio protocol ailgychwyn arbennig i chi'ch hun gyda baneri ffeil, ac ati, ond nid yw hyn bellach yn 'ansible sylfaenol' mewn unrhyw ffurf). Ond mae stori gyffredin arall: fe wnaethom osod y cais, ei recordio .service-ffeil, ac yn awr rydym ei eisiau daemon_reload и state=started. Ac mae'n ymddangos mai'r lle naturiol i hyn yw'r triniwr. Ond os byddwch chi'n ei gwneud hi'n dasg nad yw'n driniwr ond yn hytrach ar ddiwedd rhestr dasgau neu rôl, yna bydd yn cael ei chyflawni'n ddiamwys bob tro. Hyd yn oed os torrodd y llyfr chwarae yn y canol. Nid yw hyn yn datrys y broblem wedi'i hailddechrau o gwbl (ni allwch wneud tasg gyda'r briodwedd wedi'i hailddechrau, oherwydd bod analluedd yn cael ei golli), ond yn bendant mae'n werth gwneud cyflwr = dechrau, mae sefydlogrwydd cyffredinol llyfrau chwarae yn cynyddu, oherwydd mae nifer y cysylltiadau a chyflwr deinamig yn lleihau.

Nodwedd gadarnhaol arall y triniwr yw nad yw'n tagu'r allbwn. Nid oedd unrhyw newidiadau - dim rhywbeth ychwanegol wedi'i hepgor neu'n iawn yn yr allbwn - haws i'w ddarllen. Mae hefyd yn briodwedd negyddol - os byddwch chi'n dod o hyd i deip mewn tasg a gyflawnir yn llinol yn y rhediad cyntaf un, yna dim ond pan fydd y trinwyr yn cael eu newid, h.y. dan rai amodau - anaml iawn. Er enghraifft, am y tro cyntaf yn fy mywyd bum mlynedd yn ddiweddarach. Ac, wrth gwrs, bydd teipio yn yr enw a bydd popeth yn torri. Ac os na fyddwch chi'n eu rhedeg yr eildro, does dim newid.

Ar wahân, mae angen inni siarad am argaeledd newidynnau. Er enghraifft, os byddwch yn hysbysu tasg gyda dolen, beth fydd yn y newidynnau? Gallwch chi ddyfalu'n ddadansoddol, ond nid yw bob amser yn ddibwys, yn enwedig os yw'r newidynnau'n dod o wahanol leoedd.

... Felly mae trinwyr yn llawer llai defnyddiol ac yn llawer mwy problemus nag y maent yn ymddangos. Os gallwch chi ysgrifennu rhywbeth hardd (heb ffrils) heb drinwyr, mae'n well ei wneud hebddynt. Os nad yw'n gweithio'n hyfryd, mae'n well gyda nhw.

Mae'r darllenydd cyrydol yn gywir yn nodi nad ydym wedi trafod listeny gall triniwr ffonio hysbysu am driniwr arall, y gall triniwr gynnwys import_tasks (a all gynnwys_role gyda with_items), bod y system triniwr yn Ansible yn Turing-complete, bod trinwyr o include_role yn croestorri mewn ffordd chwilfrydig â thrinwyr o chwarae, etc .d. - mae'n amlwg nad dyma'r “sylfaenol”).

Er bod un WTF penodol sydd mewn gwirionedd yn nodwedd y mae angen i chi ei chadw mewn cof. Os cyflawnir eich tasg gyda delegate_to ac mae wedi hysbysu, yna gweithredir y triniwr cyfatebol heb delegate_to, h.y. ar y gwesteiwr lle mae chwarae wedi'i neilltuo. (Er y gall y triniwr, wrth gwrs, wedi delegate_to Yr un peth).

Ar wahân, rwyf am ddweud ychydig eiriau am rolau y gellir eu hailddefnyddio. Cyn i gasgliadau ymddangos, roedd yna syniad y gallech chi wneud rolau cyffredinol a allai fod ansible-galaxy install ac a aeth. Yn gweithio ar bob OS o bob amrywiad ym mhob sefyllfa. Felly, fy marn i: nid yw'n gweithio. Unrhyw rôl gyda màs include_vars, yn cefnogi 100500 o achosion, yn cael ei doomed i affwysol o bygiau cas cornel. Gellir eu gorchuddio â phrofion enfawr, ond fel gydag unrhyw brofion, naill ai mae gennych gynnyrch Cartesaidd o werthoedd mewnbwn a chyfanswm swyddogaeth, neu mae gennych “senarios unigol dan sylw.” Fy marn i yw ei bod hi'n llawer gwell os yw'r rôl yn llinol (cymhlethdod seiclomatig 1).

Y lleiaf o ifs (penodol neu ddatganiadol - yn y ffurf when neu ffurf include_vars yn ôl set o newidynnau), y gorau yw'r rôl. Weithiau mae'n rhaid i chi wneud canghennau, ond, rwy'n ailadrodd, y lleiaf sydd, y gorau. Felly mae'n ymddangos fel rôl dda gyda galaeth (mae'n gweithio!) gyda chriw o when gall fod yn llai ffafriol na rôl “eich hun” o bum tasg. Y foment pan fydd y rôl gyda galaeth yn well yw pan fyddwch chi'n dechrau ysgrifennu rhywbeth. Y foment pan mae'n gwaethygu yw pan fydd rhywbeth yn torri ac mae gennych chi amheuaeth ei fod oherwydd y “rôl gydag alaeth”. Rydych chi'n ei agor, ac mae yna bum cynnwys, wyth taflen dasg a phentwr when'Of... Ac mae angen i ni ddarganfod hyn. Yn lle 5 tasg, rhestr linol lle nad oes dim i'w dorri.

Yn y rhanau canlynol

  • Ychydig am y rhestr eiddo, newidynnau grŵp, ategyn host_group_vars, hostvars. Sut i glymu cwlwm Gordian gyda sbageti. Newidynnau cwmpas a blaenoriaeth, Model cof asible. “Felly ble rydyn ni'n storio'r enw defnyddiwr ar gyfer y gronfa ddata?”
  • jinja: {{ jinja }} — plastisin meddal trwyn notype nosql. Mae ym mhobman, hyd yn oed lle nad ydych chi'n ei ddisgwyl. Ychydig am !!unsafe a blasus iaml.

Ffynhonnell: hab.com

Ychwanegu sylw