ʻO nā kumu maʻamau, me ka ʻole o kāu mau puke pāʻani e lilo i puʻupuʻu o ka pasta sticky

Hana wau i nā loiloi he nui o nā code Ansible o nā poʻe ʻē aʻe a kākau nui wau iaʻu iho. I ka wā o ka nānā ʻana i nā hewa (ʻo nā poʻe ʻē aʻe a me kaʻu iho), a me ka nui o nā nīnauele, ʻike wau i ka hewa nui a nā mea hoʻohana Ansible e hana ai - komo lākou i nā mea paʻakikī me ka ʻole o ka haku ʻana i nā mea kumu.

No ka hoʻoponopono ʻana i kēia hewa ʻole āpau, ua hoʻoholo wau e kākau i kahi hoʻolauna iā Ansible no ka poʻe i ʻike mua. Ke aʻo aku nei au iā ʻoe, ʻaʻole kēia he haʻi hou ʻana o nā kāne, he heluhelu lōʻihi kēia me nā leka he nui a ʻaʻohe kiʻi.

ʻO ka pae i manaʻo ʻia o ka mea heluhelu, ua kākau mua ʻia he mau kaukani laina yamla, aia kekahi mea i hana ʻia, akā "he kekee nā mea a pau."

Nā inoa

ʻO ka hewa nui a ka mea hoʻohana Ansible ʻaʻole ʻike i ka mea i kapa ʻia. Inā ʻaʻole ʻoe maopopo i nā inoa, ʻaʻole hiki iā ʻoe ke hoʻomaopopo i ka ʻōlelo a ka palapala. ʻO kahi hiʻohiʻona ola: i ka wā o kahi ninaninau, ʻaʻole hiki i kahi kanaka i ʻōlelo he nui kāna kākau ʻana ma Ansible ʻaʻole hiki ke pane i ka nīnau "he aha nā mea e pili ana i kahi puke pāʻani?" A i koʻu manaʻo ʻana "ua manaʻo ʻia ka pane e pili ana ka pāʻani i ka pāʻani," ʻo ka ʻōlelo hōʻino "ʻaʻole mākou e hoʻohana i kēlā". Kākau nā kānaka iā Ansible no ke kālā a ʻaʻole hoʻohana i ka pāʻani. Hoʻohana maoli lākou, akā ʻaʻole ʻike i ke ʻano.

No laila e hoʻomaka kākou me kahi mea maʻalahi: he aha ka mea i kapa ʻia? Malia paha ua ʻike ʻoe i kēia, a ʻaʻole paha ʻoe, no ka mea ʻaʻole ʻoe i hoʻolohe i kāu heluhelu ʻana i ka palapala.

ansible-playbook executes the playbook. ʻO kahi puke pāʻani he faila me ka hoʻonui yml/yaml, aia i loko kahi mea e like me kēia:

---
- hosts: group1
  roles:
    - role1

- hosts: group2,group3
  tasks:
    - debug:

Ua ʻike mua mākou he puke pāʻani kēia faila holoʻokoʻa. Hiki iā mākou ke hōʻike i kahi o nā kuleana a i hea nā hana. Akā ma hea kahi pāʻani? A he aha ka ʻokoʻa ma waena o ka pāʻani a me ke kuleana a i ʻole ka puke pāʻani?

Aia i loko o ka palapala. A hala lākou. Nā mea hoʻomaka - no ka mea he nui loa a ʻaʻole ʻoe e hoʻomanaʻo i nā mea āpau i ka manawa hoʻokahi. ʻIke - no ka mea, "nā mea liʻiliʻi". Inā ʻike ʻoe, e heluhelu hou i kēia mau ʻaoʻao ma ka liʻiliʻi i hoʻokahi manawa i kēlā me kēia ʻeono mahina, a e lilo kāu code i alakaʻi alakaʻi.

No laila, e hoʻomanaʻo: ʻO Playbook kahi papa inoa o ka pāʻani a me import_playbook.
ʻO kēia kahi pāʻani:

- hosts: group1
  roles:
    - role1

a he paani hou keia.

- hosts: group2,group3
  tasks:
    - debug:

He aha ka pāʻani? No ke aha ʻo ia?

He mea nui ka pāʻani no ka puke pāʻani, no ka mea, pili ka pāʻani a pāʻani wale i ka papa inoa o nā kuleana a/a i ʻole nā ​​hana me kahi papa inoa o nā pūʻali e pono ai ke hoʻokō ʻia. Ma ka hohonu hohonu o ka palapala hiki iā ʻoe ke ʻike i ka ʻōlelo delegate_to, nā plugins nānā kūloko, nā hoʻonohonoho kikoʻī pūnaewele-cli-specific, jump host, etc. Hāʻawi lākou iā ʻoe e hoʻololi iki i kahi e hana ʻia ai nā hana. Akā, poina iā ia. Loaʻa i kēlā me kēia o kēia mau koho akamai nā hoʻohana kikoʻī loa, a ʻaʻole maoli lākou. A ke kamaʻilio nei mākou e pili ana i nā mea maʻamau e ʻike a hoʻohana ai nā mea a pau.

Inā makemake ʻoe e hana "kekahi mea" "kahi", kākau ʻoe i ka pāʻani. ʻAʻole he kuleana. ʻAʻole kuleana me nā modula a me nā ʻelele. Lawe ʻoe a kākau pāʻani. I loko o ke kahua hoʻokipa āu e helu ai i kahi e hoʻokō ai, a ma nā kuleana / hana - ka mea e hoʻokō ai.

Maʻalahi, pololei? Pehea e ʻokoʻa ai?

ʻO kekahi o nā manawa ʻano i makemake ai ka poʻe e hana i kēia ʻaʻole ma o ka pāʻani ʻana ʻo ia ka "hana e hoʻonohonoho i nā mea āpau." Makemake wau e loaʻa kahi kuleana e hoʻonohonoho i nā kikowaena ʻelua o ka ʻano mua a me nā kikowaena o ka ʻano ʻelua.

ʻO kahi laʻana archetypal ka nānā ʻana. Makemake wau e loaʻa kahi hana nānā e hoʻonohonoho i ka nānā ʻana. Hāʻawi ʻia ka hana kiaʻi i ka nānā ʻana i nā pūʻali (e like me ka pāʻani). Akā ʻo ia ka mea no ka nānā ʻana pono mākou e hāʻawi i nā pūʻulu i nā mea hoʻokipa a mākou e nānā nei. No ke aha e hoʻohana ʻole ai i ka ʻelele? Pono ʻoe e hoʻonohonoho i nā iptables. ʻelele? Pono ʻoe e kākau/hoʻoponopono i kahi hoʻonohonoho no ka DBMS e hiki ai ke nānā. ʻelele! A inā nele ka noʻonoʻo, a laila hiki iā ʻoe ke hana i ʻelele include_role i loko o ka pūnana pūnana e hoʻohana ana i kahi kānana paʻakikī ma ka papa inoa o nā hui, a i loko include_role hiki iā ʻoe ke hana hou aku delegate_to hou. A hele mākou ...

ʻO kahi makemake maikaʻi - e loaʻa i hoʻokahi kuleana kiaʻi hoʻokahi, "hana i nā mea āpau" - alakaʻi iā mākou i loko o Gehena piha kahi i hoʻokahi wale nō ala i waho: e kākau hou i nā mea āpau mai ka ʻōpala.

Ma hea i hiki mai ai ka hewa ma ʻaneʻi? ʻO ka manawa āu i ʻike ai e hana i ka hana "x" ma ka host X pono ʻoe e hele e hoʻokipa iā Y a hana "y" ma laila, pono ʻoe e hana i kahi hoʻomaʻamaʻa maʻalahi: hele a kākau i ka pāʻani, aia ma ka host Y e hana y. Mai hoʻohui i kekahi mea i ka "x", akā e kākau iā ia mai ka ʻōpala. ʻOiai me nā mea hoʻololi paʻakikī.

Me he mea lā ua ʻōlelo pololei ʻia nā mea a pau o nā paukū ma luna. Akā ʻaʻole kēia kāu hihia! No ka mea makemake ʻoe e kākau i ka code reusable e like me DRY a me ka waihona, a pono ʻoe e ʻimi i kahi ala e hana ai.

ʻO kēia kahi e hūnā ai kekahi hewa koʻikoʻi. ʻO kahi hewa i hoʻohuli i nā papahana he nui mai ke kākau ʻia (hiki ke ʻoi aku ka maikaʻi, akā hana nā mea āpau a maʻalahi hoʻi e hoʻopau) i mea weliweli loa ʻaʻole hiki i ka mea kākau ke ʻike. He hana ia, aka, papa mai ke Akua ia oe e hoololi i kekahi mea.

ʻO ka hewa: he hana waihona ke kuleana. Ua hoʻopau kēia hoʻohālikelike i nā hoʻomaka maikaʻi he nui wale ke kaumaha ke nānā aku. ʻAʻole ia he hana waihona. ʻAʻole hiki iā ia ke hana i ka helu ʻana a ʻaʻole hiki iā ia ke hoʻoholo i ka pae pāʻani. E hoʻomanaʻo mai iaʻu i ka hoʻoholo ʻana o ka pāʻani?

Mahalo, pololei ʻoe. Hoʻoholo ka pāʻani (ʻoi aku ka pololei, aia ka ʻike) e pili ana i nā hana a me nā kuleana e hoʻokō ai i nā mea hoʻokipa.

Inā hāʻawi ʻoe i kēia hoʻoholo i kahi kuleana, a me ka helu ʻana, hoʻopaʻi ʻoe iā ʻoe iho (a ʻo ka mea e hoʻāʻo e hoʻopau i kāu code) i kahi ola pōʻino. ʻAʻole hoʻoholo ka hana i kahi e hana ʻia ai. Hana ʻia kēia hoʻoholo ma ka pāʻani. Hana ka hana i ka mea i haʻi ʻia, kahi i haʻi ʻia ai.

No ke aha e pilikia ai ka polokalamu ma Ansible a no ke aha i ʻoi aku ka maikaʻi o COBOL ma mua o Ansible e kamaʻilio mākou ma ka mokuna e pili ana i nā ʻano a me nā jinja. I kēia manawa, e ʻōlelo kākou i hoʻokahi mea - e waiho ana kēlā me kēia helu helu ʻana i kahi hiʻohiʻona hiki ʻole ke hoʻololi i nā loli honua, a ʻaʻole hiki iā ʻoe ke hana i kekahi mea e pili ana iā ia. I ka wā i hui ai nā "ʻano" ʻelua, ua pau nā mea a pau.

E hoʻomaopopo no ka squeamish: hiki i ke kuleana ke hoʻololi i ke kahe mana. ʻAi delegate_to a he mau hoohana kupono. ʻAi meta: end host/play. Akā! Hoʻomanaʻo mākou i ke aʻo ʻana i nā kumu? Poina e pili ana delegate_to. Ke kamaʻilio nei mākou e pili ana i ka code Ansible maʻalahi a nani loa. He mea maʻalahi ke heluhelu, maʻalahi e kākau, maʻalahi e hoʻopau, maʻalahi e hoʻāʻo a maʻalahi e hoʻopau. No laila, eia hou:

ʻO ka pāʻani a me ka pāʻani wale nō e hoʻoholo i ka mea hoʻokipa i ka mea i hoʻokō ʻia.

Ma kēia ʻāpana, ua hana mākou i ke kū'ē ma waena o ka pāʻani a me ke kuleana. I kēia manawa e kamaʻilio e pili ana i nā hana vs pili pili.

Nā hana a me nā kuleana

E noʻonoʻo i ka pāʻani:

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

E ʻōlelo kākou pono ʻoe e hana foo. A me he mea la foo: name=foobar state=present. Ma hea wau e kākau ai i kēia? ma mua? pou? E hana i kahi kuleana?

...A ma hea i hele ai nā hana?

Ke hoʻomaka hou nei mākou me nā kumu kumu - ka mea pāʻani. Inā lana ʻoe i kēia pilikia, ʻaʻole hiki iā ʻoe ke hoʻohana i ka pāʻani i kumu no nā mea ʻē aʻe a pau, a ʻo kāu hopena e "hoʻoluliluli".

Mea pāʻani: hoʻonohonoho i nā kuhikuhi, nā hoʻonohonoho no ka pāʻani ponoʻī a me nā pre_tasks, nā hana, nā kuleana, nā ʻāpana post_tasks. ʻAʻole koʻikoʻi nā ʻāpana i koe no ka pāʻani iā ​​​​mākou i kēia manawa.

ʻO ka hoʻonohonoho o kā lākou mau māhele me nā hana a me nā kuleana: pre_tasks, roles, tasks, post_tasks. No ka mea, aia ma waena o ke kauoha o ka hoʻokō tasks и roles ʻaʻole maopopo, a laila ʻōlelo nā hana maikaʻi e hoʻohui nei mākou i kahi ʻāpana tasks, ina aole roles... Inā loaʻa roles, a laila waiho ʻia nā hana i hoʻopili ʻia ma nā ʻāpana pre_tasks/post_tasks.

ʻO nā mea a pau i koe, ua maopopo nā mea a pau: mua pre_tasks, laila roles, laila post_tasks.

Akā ʻaʻole mākou i pane i ka nīnau: aia i hea ke kelepona module? foo kākau? Pono mākou e kākau i kahi kuleana holoʻokoʻa no kēlā me kēia module? A i ʻole ʻoi aku ka maikaʻi o ka loaʻa ʻana o kahi kuleana mānoanoa no nā mea āpau? A inā ʻaʻole he kuleana, a laila ma hea wau e kākau ai - ma mua a ma hope paha?

Inā ʻaʻohe pane kūpono i kēia mau nīnau, a laila he hōʻailona kēia o ka nele o ka ʻike, ʻo ia hoʻi, kēlā mau "kumu haʻalulu." E noʻonoʻo kākou. ʻO ka mea mua, he nīnau palekana: Inā loaʻa ka pāʻani pre_tasks и post_tasks (a ʻaʻohe hana a kuleana paha), a laila hiki ke haki kekahi mea inā hana wau i ka hana mua mai post_tasks E hoʻoneʻe au i ka hopena pre_tasks?

ʻOiaʻiʻo, ʻo ka huaʻōlelo o ka nīnau e hōʻike ana e haki. Akā, he aha lā?

... Nā mea lawelawe. ʻO ka heluhelu ʻana i nā kumu kumu e hōʻike ana i kahi ʻoiaʻiʻo koʻikoʻi: e holoi ʻia nā mea lawelawe āpau ma hope o kēlā me kēia ʻāpana. ʻO kēlā mau mea. nā hana a pau mai pre_tasks, a laila nā mea lawelawe a pau i hoʻolaha ʻia. A laila hoʻokō ʻia nā kuleana āpau a me nā mea lawelawe āpau i hōʻike ʻia ma nā kuleana. Ma hope post_tasks a me kā lākou mau mea lawelawe.

No laila, inā ʻoe e huki i kahi hana mai post_tasks в pre_tasks, a laila hiki iā ʻoe ke hoʻokō ma mua o ka hoʻokō ʻia ʻana o ka mea lawelawe. no ka laʻana, inā ma pre_tasks ua hoʻokomo a hoʻonohonoho ʻia ke kikowaena pūnaewele, a post_tasks Hoʻouna ʻia kekahi mea iā ia, a laila e hoʻololi i kēia hana i ka ʻāpana pre_tasks e alakaʻi i ka ʻoiaʻiʻo i ka manawa o ka "hoʻouna" ʻaʻole e holo ana ke kikowaena a e haki nā mea āpau.

I kēia manawa e noʻonoʻo hou kāua, no ke aha mākou e pono ai pre_tasks и post_tasks? No ka laʻana, i mea e hoʻopau ai i nā mea a pau e pono ai (me nā mea lawelawe) ma mua o ka hoʻokō ʻana i ke kuleana. A post_tasks e ʻae iā mākou e hana me nā hopena o ka hoʻokō ʻana i nā kuleana (me nā mea lawelawe).

E haʻi mai ka mea akamai ʻo Ansible iā mākou he aha ia. meta: flush_handlers, akā, no ke aha mākou e pono ai i nā flush_handlers inā hiki iā mākou ke hilinaʻi i ke kauoha o ka hoʻokō ʻana i nā ʻāpana i ka pāʻani? Eia kekahi, hiki i ka hoʻohana ʻana i ka meta: flush_handlers ke hāʻawi iā mākou i nā mea i manaʻo ʻole ʻia me nā mea hoʻohana kope, e hāʻawi ana iā mākou i nā ʻōlelo aʻo ʻē aʻe ke hoʻohana ʻia. when у block etc. ʻOi aku ka maikaʻi o kou ʻike i ka ansible, ʻoi aku ka nui o nā nuances hiki iā ʻoe ke inoa no kahi hopena "tricy". A ʻo kahi hoʻonā maʻalahi - me ka hoʻohana ʻana i ka māhele kūlohelohe ma waena o nā pre/role/post - ʻaʻole ia e kumu i nā nuances.

A, hoʻi i kā mākou 'foo'. Ma hea au e waiho ai? Ma mua, pou a i ʻole nā ​​kuleana? ʻIke loa, pili kēia inā pono mākou i nā hopena o ka mea lawelawe no foo. Inā ʻaʻole lākou ma laila, ʻaʻole pono e hoʻokomo ʻia ka foo ma mua a ma hope paha - he manaʻo kūikawā kēia mau ʻāpana - hoʻokō i nā hana ma mua a ma hope o ke kino nui o ke code.

I kēia manawa ʻo ka pane i ka nīnau "ʻoihana a i ʻole hana" e iho mai i ka mea e pāʻani nei - inā aia nā hana ma laila, pono ʻoe e hoʻohui iā lākou i nā hana. Inā loaʻa nā kuleana, pono ʻoe e hana i kahi kuleana (ʻoiai mai hoʻokahi hana). E hoʻomanaʻo wau ʻaʻole hoʻohana ʻia nā hana a me nā kuleana i ka manawa like.

ʻO ka hoʻomaopopo ʻana i nā kumu o Ansible e hāʻawi i nā pane kūpono i nā nīnau like ʻole o ka ʻono.

Nā hana a me nā kuleana (mahele ʻelua)

I kēia manawa, e kūkākūkā kākou i ke kūlana ke hoʻomaka nei ʻoe e kākau i kahi puke pāʻani. Pono ʻoe e hana i ka foo, bar a me ka baz. ʻO kēia mau hana ʻekolu, hoʻokahi kuleana a ʻekolu paha kuleana? No ka hōʻuluʻulu ʻana i ka nīnau: i ka manawa hea ʻoe e hoʻomaka ai e kākau i nā kuleana? He aha ke kumu o ke kākau ʻana i nā kuleana ke hiki iā ʻoe ke kākau i nā hana?... He aha ke kuleana?

ʻO kekahi o nā hewa nui loa (ua kamaʻilio wau e pili ana i kēia) ʻo ka noʻonoʻo ʻana e like ke kuleana me kahi hana i loko o ka waihona o kahi papahana. He aha ke ʻano o kahi wehewehe hana maʻamau? ʻAe ʻo ia i nā hoʻopaʻapaʻa hoʻokomo, pili me nā kumu ʻaoʻao, hana i nā hopena ʻaoʻao, a hoʻihoʻi i kahi waiwai.

Ano, noonoo. He aha ka mea e hiki ke hana mai kēia ma ka hana? Hoʻokipa mau ʻia ʻoe e kāhea i nā hopena ʻaoʻao, ʻo ia ke kumu o ka Ansible holoʻokoʻa - e hana i nā hopena ʻaoʻao. Loaʻa nā kumu ʻaoʻao? kula haʻahaʻa. Akā me ka "paʻi i kahi waiwai a hoʻihoʻi" - ʻo ia kahi e hana ʻole ai. ʻO ka mea mua, ʻaʻole hiki iā ʻoe ke hāʻawi i kahi waiwai i kahi kuleana. Hiki iā ʻoe ke hoʻonohonoho i kahi hoʻololi honua me ka nui o ke ola o ka pāʻani ma ka ʻāpana vars no ka hana. Hiki iā ʻoe ke hoʻonohonoho i kahi hoʻololi honua me ka pāʻani o ke ola i loko o ka hana. A i ʻole me ke ola o nā puke pāʻani (set_fact/register). Akā ʻaʻole hiki iā ʻoe ke loaʻa "nā ʻano hoʻololi kūloko". ʻAʻole hiki iā ʻoe ke "lawe i kahi waiwai" a "hoʻihoʻi".

ʻO ka mea nui ma hope o kēia: ʻaʻole hiki iā ʻoe ke kākau i kekahi mea ma Ansible me ka ʻole o ka hopena ʻaoʻao. ʻO ka hoʻololi ʻana i nā mea hoʻololi honua he hopena mau ia no kahi hana. Ma Rust, no ka laʻana, hoʻololi i kahi hoʻololi honua unsafe. A ma Ansible ʻo ia wale nō ke ala e hoʻohuli ai i nā waiwai no kahi kuleana. E hoʻomaopopo i nā huaʻōlelo i hoʻohana ʻia: ʻaʻole "e hoʻolilo i kahi waiwai i ka hana", akā "hoʻololi i nā waiwai i hoʻohana ʻia e ke kuleana". ʻAʻohe kaʻawale ma waena o nā kuleana. ʻAʻohe kaʻawale ma waena o nā hana a me nā kuleana.

Hōʻuluʻulu: ʻaʻole he hana ke kuleana.

He aha ka maikaʻi o ke kuleana? ʻO ka mea mua, loaʻa nā waiwai paʻamau (/default/main.yaml), ʻo ka lua, aia nā papa kuhikuhi hou no ka mālama ʻana i nā faila.

He aha nā pōmaikaʻi o nā waiwai paʻamau? No ka mea i loko o ka pyramid o Maslow, ʻo ka papa ʻaina ʻino a Ansible o nā mea nui i hoʻololi ʻia, ʻo nā hana paʻa ka mea haʻahaʻa haʻahaʻa loa (e hoʻemi i nā palena laina kauoha Ansible). ʻO ia ke ʻano inā pono ʻoe e hāʻawi i nā waiwai paʻamau a ʻaʻole hopohopo e pili ana iā lākou e hoʻopau i nā waiwai mai ka waihona waiwai a i ʻole nā ​​​​hui pūʻulu, a laila ʻo nā hana paʻa wale nō ka wahi kūpono no ʻoe. (Hoʻopunipuni liʻiliʻi wau - nui aʻe |d(your_default_here), akā inā mākou e kamaʻilio e pili ana i nā wahi paʻa, a laila ʻaʻohe kuleana wale nō).

He aha hou aʻe e pili ana i nā kuleana? No ka mea, loaʻa iā lākou kā lākou papa inoa. ʻO kēia nā papa kuhikuhi no nā mea hoʻololi, ʻelua mau (ʻo ia hoʻi, helu ʻia no ka hana) a me ka dynamic (aia kekahi ʻano a i ʻole kahi anti-pattern - include_vars pū me {{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml.). ʻO kēia nā papa kuhikuhi no files/, templates/. Eia kekahi, hiki iā ʻoe ke loaʻa i kāu mau modula a me nā plugins (library/). Akā, i ka hoʻohālikelike ʻana me nā hana i loko o kahi puke pāʻani (hiki ke loaʻa i kēia mau mea āpau), ʻo ka pōmaikaʻi wale nō ma ʻaneʻi ʻaʻole i hoʻolei ʻia nā faila i hoʻokahi puʻu, akā he mau puʻu kaʻawale.

Hoʻokahi kikoʻī hou aʻe: hiki iā ʻoe ke hoʻāʻo e hana i nā kuleana i loaʻa no ka hoʻohana hou ʻana (ma ka galaxy). Me ka hiki ʻana mai o nā hōʻiliʻili, hiki ke noʻonoʻo ʻia ka hoʻokaʻawale ʻana i ke kuleana kokoke i poina.

No laila, ʻelua mau hiʻohiʻona koʻikoʻi nā kuleana: loaʻa iā lākou nā paʻamau (kahi hiʻohiʻona kūʻokoʻa) a ʻae lākou iā ʻoe e kūkulu i kāu code.

Ke hoʻi nei i ka nīnau kumu: i ka manawa hea e hana ai i nā hana a me ka wā e hana ai i nā kuleana? Hoʻohana pinepine ʻia nā hana i loko o kahi puke pāʻani ma ke ʻano he "glue" ma mua a ma hope o nā hana, a i ʻole he mea hale kūʻokoʻa (a laila ʻaʻohe kuleana ma ke code). ʻO kahi puʻupuʻu o nā hana maʻamau i hui pū ʻia me nā kuleana he sloppiness unambiguous. Pono ʻoe e pili i kahi ʻano kikoʻī - he hana a i ʻole he kuleana. Hāʻawi nā kuleana i ka hoʻokaʻawale ʻana o nā hui a me nā paʻamau, ʻae nā hana iā ʻoe e heluhelu wikiwiki i ka code. ʻO ka maʻamau, hoʻokomo ʻia nā code "kūʻokoʻa" (koʻikoʻi a paʻakikī) i nā kuleana, a kākau ʻia nā palapala kōkua ma ke ʻano hana.

Hiki ke hana i ka import_role ma ke ʻano he hana, akā inā ʻoe e kākau i kēia, a laila e mākaukau e wehewehe i kou ʻano nani i ke kumu āu e makemake ai e hana i kēia.

Hiki i ka mea heluhelu akamai ke ʻōlelo e hiki i nā kuleana ke hoʻokomo i nā kuleana, hiki i nā kuleana ke loaʻa nā hilinaʻi ma o galaxy.yml, a he mea weliweli a weliweli hoʻi. include_role — Ke hoʻomanaʻo nei au iā ʻoe ke hoʻomaikaʻi nei mākou i nā mākau ma ka Ansible kumu, ʻaʻole i ka haʻuki kiʻi.

Nā mea lawelawe a me nā hana

E kūkākūkā kākou i kekahi mea maopopo: nā mea lawelawe. ʻO ka ʻike ʻana i ka hoʻohana pono ʻana ia mau mea kokoke i kahi kiʻi. He aha ka ʻokoʻa ma waena o ka mea lawe lima a me ka huki?

No ka mea ke hoʻomanaʻo nei mākou i nā kumu, eia kekahi laʻana:

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

Aia nā mea lawelawe i ka rolename/handlers/main.yaml. Huli nā lima lima ma waena o nā mea pāʻani a pau: hiki i nā pre/post_tasks ke huki i nā mea lawelawe, a hiki i kahi hana ke huki i nā mea lima mai ka pāʻani. Eia nō naʻe, ʻoi aku ka nui o nā kelepona "cross-role" i nā mea lawelawe ma mua o ka hana hou ʻana i kahi mea lawe lima ʻole. (ʻO kekahi mea ʻē aʻe o nā hana maikaʻi loa, ʻo ia ka hoʻāʻo ʻaʻole e hana hou i nā inoa mea lawelawe).

ʻO ka ʻokoʻa nui ʻo ia ka hoʻokō mau ʻana o ka hana (idempotently) (plus/minus tags a when), a me ka mea hoʻokele - e ka hoʻololi mokuʻāina (e hoʻolaha i nā ahi inā ua hoʻololi ʻia). He aha ke ʻano o kēia? No ka laʻana, ʻo ka ʻoiaʻiʻo i ka wā e hoʻomaka hou ai ʻoe, inā ʻaʻole i hoʻololi ʻia, a laila ʻaʻohe mea lawelawe. No ke aha paha e pono ai mākou e hoʻokō i ka mea lawelawe inā ʻaʻohe loli i ka hana hana? No ka laʻana, no ka mea ua haki kekahi mea a hoʻololi, akā ʻaʻole i hiki i ka mea hoʻokō. No ka laʻana, no ka mea, ua emi iki ka pūnaewele. Ua loli ka config, ʻaʻole i hoʻomaka hou ka lawelawe. ʻO ka manawa aʻe e hoʻomaka ai ʻoe, ʻaʻole e loli hou ka config, a noho ka lawelawe me ka mana kahiko o ka config.

ʻAʻole hiki ke hoʻonā ʻia ke kūlana me ka config (ʻoi aku ka pololei, hiki iā ʻoe ke hana i kahi protocol restart kūikawā iā ʻoe iho me nā hae faila, a me nā mea ʻē aʻe, akā ʻaʻole kēia 'ano kumu' i kekahi ʻano). Akā aia kekahi moʻolelo maʻamau: ua hoʻokomo mākou i ka noi, hoʻopaʻa ʻia .service-file, a i kēia manawa makemake mākou daemon_reload и state=started. A ʻo ka wahi kūlohelohe no kēia mea ʻo ia ka mea hoʻokele. Akā inā ʻaʻole ʻoe e hoʻolilo iā ia i mea hoʻokele akā he hana ma ka hopena o kahi papa hana a i ʻole ke kuleana, a laila e hoʻokō ʻia ia i kēlā me kēia manawa. ʻOiai ua haki ka papa pāʻani ma waena. ʻAʻole kēia e hoʻonā i ka pilikia i hoʻomaka hou ʻia (ʻaʻole hiki iā ʻoe ke hana i kahi hana me ka ʻano i hoʻomaka hou ʻia, no ka mea, ua nalowale ka idempotency), akā pono maoli ka hana state = hoʻomaka, piʻi ka paʻa holoʻokoʻa o nā puke pāʻani, no ka mea ke emi nei ka helu o nā pilina a me ke kūlana ikaika.

ʻO kekahi waiwai maikaʻi o ka mea lawelawe ʻo ia ʻaʻole ia e hoʻopaʻa i ka huahana. ʻAʻohe hoʻololi - ʻaʻohe mea ʻē aʻe i hoʻokuʻu ʻia a maikaʻi paha i ka hoʻopuka - maʻalahi ke heluhelu. He waiwai maikaʻi ʻole ia - inā ʻike ʻoe i kahi typo i kahi hana linearly i hoʻokō ʻia ma ka holo mua loa, a laila e hoʻokō ʻia nā mea lawelawe ke hoʻololi wale ʻia, ʻo ia. ma lalo o kekahi mau kūlana - kakaʻikahi loa. No ka laʻana, no ka manawa mua i koʻu ola ʻelima mau makahiki ma hope. A, ʻoiaʻiʻo, e loaʻa kahi typo i ka inoa a haki nā mea a pau. A inā ʻaʻole ʻoe e holo iā lākou i ka lua o ka manawa, ʻaʻohe loli.

Ma kahi kaʻawale, pono mākou e kamaʻilio e pili ana i ka loaʻa o nā mea hoʻololi. No ka laʻana, inā ʻoe e haʻi aku i kahi hana me kahi loop, he aha ka mea i loko o nā mea hoʻololi? Hiki iā ʻoe ke koho i ka analytically, akā ʻaʻole ia he mea maʻamau, ʻoi aku ka nui inā hele mai nā mea hoʻololi mai nā wahi like ʻole.

... No laila ʻoi aku ka liʻiliʻi o nā mea lawelawe a ʻoi aku ka pilikia ma mua o ko lākou ʻike. Inā hiki iā ʻoe ke kākau i kahi mea nani (me ka ʻole o nā frills) me ka ʻole o nā lima lima, ʻoi aku ka maikaʻi o ka hana ʻana me ka ʻole o lākou. Inā maikaʻi ʻole ia, ʻoi aku ka maikaʻi me lākou.

Hōʻike pololei ka mea heluhelu corrosive ʻaʻole mākou i kūkākūkā listenhiki i ka mea lawelawe ke kelepona i ka hoʻomaopopo ʻana no kahi mea lima ʻē aʻe, hiki i kahi mea lima ke hoʻokomo i ka import_tasks (hiki iā ia ke komo_role me with_items), ʻo ka ʻōnaehana handler ma Ansible ʻo Turing-complete, ʻo nā mea lawelawe mai ka include_role e hui pū me nā mea lawelawe mai ka pāʻani, etc. .d. - ʻaʻole maopopo kēia mau mea i ka "kumu").

ʻOiai aia kekahi WTF kikoʻī he hiʻohiʻona pono ʻoe e hoʻomanaʻo. Inā hoʻokō ʻia kāu hana me delegate_to a ua haʻi ʻia, a laila hoʻokō ʻia ka mea hoʻoponopono pili me ka ʻole delegate_to, i.e. ma ka hale hoʻokipa kahi i hoʻonoho ʻia ai ka pāʻani. (ʻOiai ʻo ka mea hoʻokele, ʻoiaʻiʻo, aia paha delegate_to Same).

Ma kahi kaʻawale, makemake wau e ʻōlelo i kekahi mau huaʻōlelo e pili ana i nā kuleana hiki ke hoʻohana hou. Ma mua o ka puka ʻana o nā hōʻiliʻili, aia kahi manaʻo e hiki iā ʻoe ke hana i nā kuleana āpau i hiki ke hana ansible-galaxy install a hele aku la. Hana ma nā OS āpau o nā ʻano like ʻole i nā kūlana āpau. No laila, koʻu manaʻo: ʻaʻole pono. Kekahi kuleana me ka nuipa include_vars, e kākoʻo ana i nā hihia 100500, ua hoʻopaʻi ʻia i ka hohonu o nā pahu hihia kihi. Hiki iā lākou ke uhi ʻia me ka hoʻāʻo nui, akā e like me nā hoʻāʻo ʻana, loaʻa iā ʻoe kahi huahana Cartesian o nā waiwai komo a me kahi hana holoʻokoʻa, a i ʻole ʻoe i uhi ʻia nā hiʻohiʻona pilikino. ʻO koʻu manaʻo he ʻoi aku ka maikaʻi inā he laina laina (cyclomatic complexity 1).

ʻO ka liʻiliʻi o nā ifs (māka a hōʻike paha - ma ke ʻano when a i ʻole ke ʻano include_vars ma ka hoʻonohonoho o nā mea hoʻololi), ʻoi aku ka maikaʻi o ka hana. I kekahi manawa pono ʻoe e hana i nā lālā, akā, ke haʻi hou aku nei au, ʻoi aku ka liʻiliʻi, ʻoi aku ka maikaʻi. No laila me he mea lā he kuleana maikaʻi me ka galaxy (hana!) when ʻoi aku ka maikaʻi ma mua o ka "hana pono'ī" mai nā hana ʻelima. ʻO ka manawa ʻoi aku ka maikaʻi o ka hana me ka galaxy ke hoʻomaka ʻoe e kākau i kekahi mea. ʻO ka manawa iʻoi aku kaʻino i ka wā e haki ai kekahi mea a loaʻa iāʻoe ke kānalua no ka "kūlana me ka galaxy". Wehe ʻoe, a he ʻelima mau hoʻokomo, ʻewalu pepa hana a me kahi waihona when'ov... A pono mākou e noʻonoʻo i kēia. Ma kahi o 5 mau hana, kahi papa inoa laina ʻaʻohe mea e wāwahi.

Ma keia mau mahele

  • He mea liʻiliʻi e pili ana i ka waihona waiwai, nā ʻano hui, host_group_vars plugin, hostvars. Pehea e hoʻopaʻa ai i kahi kaula Gordian me ka spaghetti. Ka laulā a me nā mea hoʻololi i mua, Ansible memory model. "No laila ma hea mākou e mālama ai i ka inoa inoa no ka waihona?"
  • jinja: {{ jinja }} - nosql notype nosense plasticine palupalu. Aia ia ma nā wahi a pau, ʻoiai ma kahi āu i manaʻo ʻole ai. He wahi liʻiliʻi e pili ana !!unsafe a ʻono ka yaml.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka