Dasar ansible, tanpa nu playbooks anjeun bakal lump pasta caket

Kuring ngalakukeun seueur ulasan ngeunaan kode Ansible jalma sanés sareng seueur nyerat nyalira. Dina kursus nganalisa kasalahan (boh batur sareng kuring sorangan), ogé sababaraha wawancara, kuring sadar kasalahan utama anu dilakukeun ku pangguna Ansible - aranjeunna asup kana hal-hal anu rumit tanpa ngawasaan anu dasar.

Pikeun ngabenerkeun ketidakadilan universal ieu, kuring mutuskeun pikeun nulis bubuka Ansible pikeun anu parantos terang. Kuring ngingetkeun anjeun, ieu sanes retelling mans, ieu longread kalawan loba hurup jeung euweuh gambar.

Tingkat anu dipiharep tina pamaca nyaéta sababaraha rébu garis yamla parantos ditulis, aya anu parantos diproduksi, tapi "kumaha waé sadayana bengkok."

Ngaran

Kasalahan utama anu dilakukeun ku pangguna Ansible nyaéta henteu terang naon anu disebut. Upami anjeun henteu terang nami, anjeun moal tiasa ngartos naon anu dicarioskeun ku dokuméntasi. Conto anu hirup: nalika ngawawancara, jalma anu sigana nyarios yén anjeunna seueur nyerat dina Ansible teu tiasa ngajawab patarosan "unsur naon anu diwangun ku playbook?" Jeung nalika kuring ngusulkeun yén "jawaban ieu diperkirakeun yén playbook diwangun ku muter," komentar damning "urang teu make éta" dituturkeun. Jalma nulis Ansible duit jeung teu make muter . Aranjeunna sabenerna make eta, tapi teu nyaho naon éta.

Ku kituna hayu urang mimitian ku hal basajan: naon disebutna. Meureun anjeun terang ieu, atawa meureun anjeun henteu, sabab teu nengetan mun anjeun maca dokuméntasi.

ansible-playbook executes playbook nu. Playbook mangrupikeun file anu nganggo ekstensi yml/yaml, di jerona aya anu sapertos kieu:

---
- hosts: group1
  roles:
    - role1

- hosts: group2,group3
  tasks:
    - debug:

Kami parantos sadar yén sadaya file ieu mangrupikeun playbook. Urang tiasa nunjukkeun dimana peran sareng dimana tugasna. Tapi dimana maén? Sareng naon bédana antara maén sareng peran atanapi buku kaulinan?

Éta sadayana dina dokuméntasi. Sareng aranjeunna sono. Pemula - sabab seueur teuing sareng anjeun moal émut sadayana sakaligus. Ngalaman - sabab "hal trivial". Upami anjeun ngalaman, baca deui halaman ieu sahenteuna sakali unggal genep bulan, sareng kode anjeun bakal janten unggulan kelas.

Janten, émut: Playbook mangrupikeun daptar anu diwangun ku maén sareng import_playbook.
Ieu salah sahiji kaulinan:

- hosts: group1
  roles:
    - role1

sareng ieu ogé kaulinan anu sanés:

- hosts: group2,group3
  tasks:
    - debug:

Naon kaulinan? Naha nya?

Play mangrupa unsur konci pikeun playbook a, sabab play na ngan maén pakait daptar peran jeung / atawa tugas kalawan daptar host on mana maranéhna kudu dieksekusi. Dina jero dokuméntasi anjeun tiasa mendakan disebatkeun delegate_to, plugins lookup lokal, setélan jaringan-cli-spésifik, luncat host, jsb. Aranjeunna ngamungkinkeun anjeun rada ngarobih tempat dimana tugas dilaksanakeun. Tapi, poho deui. Masing-masing pilihan pinter ieu gaduh kagunaan anu khusus, sareng aranjeunna pasti henteu universal. Sareng urang nyarioskeun hal-hal dasar anu sadayana kedah terang sareng dianggo.

Lamun hayang nedunan "hal" "dimana", anjeun nulis muter. Henteu peran. Teu peran jeung modul jeung delegasi. Anjeun nyandak eta jeung nulis maén. Di mana, dina widang host anjeun daptar dimana ngaéksekusi, sareng dina peran / tugas - naon anu kedah dieksekusi.

Basajan, bener? Kumaha bisa jadi sabalikna?

Salah sahiji momen karakteristik nalika jalma gaduh kahayang pikeun ngalakukeun ieu sanés ku maén nyaéta "peran anu ngatur sadayana." Abdi hoyong gaduh peran anu ngonpigurasikeun duanana server tina tipe kahiji jeung server tina tipe kadua.

Conto archetypal nyaéta ngawaskeun. Abdi hoyong gaduh peran ngawaskeun anu bakal ngonpigurasikeun monitoring. Peran ngawaskeun ditugaskeun pikeun ngawaskeun host (nurutkeun maén). Tapi tétéla yén pikeun ngawaskeun urang kedah nganteurkeun bungkusan ka host anu urang pantau. Naha henteu nganggo utusan? Anjeun ogé kedah ngonpigurasikeun iptables. utusan? Anjeun oge kudu nulis / ngabenerkeun config pikeun DBMS sangkan ngawaskeun. utusan! Sareng upami kreativitas kirang, anjeun tiasa ngadamel delegasi include_role dina loop nested maké filter tricky dina daptar grup, sarta jero include_role Anjeun tiasa ngalakukeun leuwih delegate_to deui. Sareng urang angkat ...

Kahayang anu saé - gaduh hiji peran ngawaskeun tunggal, anu "ngalakukeun sadayana" - ngajurung urang kana naraka lengkep anu paling sering ngan ukur aya hiji jalan kaluar: nyerat deui sadayana ti mimiti.

Dimana kasalahan lumangsung di dieu? Nalika anjeun mendakan yén pikeun ngalakukeun tugas "x" dina host X anjeun kedah angkat ka host Y sareng ngalakukeun "y" di dinya, anjeun kedah ngalakukeun latihan anu sederhana: angkat sareng nyerat maén, anu dina host Y ngalakukeun y. Ulah nambahkeun hiji hal kana "x", tapi nulis eta ti scratch. Malah ku variabel hardcoded.

Sigana mah sagalana dina paragraf di luhur ceuk leres. Tapi ieu sanés kasus anjeun! Kusabab anjeun hoyong nyerat kode anu tiasa dianggo deui anu garing sareng sapertos perpustakaan, sareng anjeun kedah milarian metodeu kumaha ngalakukeunana.

Ieu dimana kasalahan serius sejen lurks. Kasalahan anu ngancik seueur proyék tina tulisan anu lumayan (bisa langkung saé, tapi sadayana tiasa dianggo sareng gampang réngsé) janten horor lengkep anu bahkan panulis henteu tiasa terang. Gawéna, tapi Allah nyaram anjeun ngarobah nanaon.

Kasalahanna nyaéta: peran mangrupikeun fungsi perpustakaan. Analogi ieu parantos ngarusak seueur awal anu saé anu ngan saukur hanjelu ningali. Peran sanes fungsi perpustakaan. Anjeunna teu tiasa ngitung sareng teu tiasa nyandak kaputusan tingkat maén. Ngingetkeun kuring naon kaputusan maén?

Hatur nuhun, anjeun leres. Play nyieun kaputusan (leuwih tepatna, ngandung émbaran) ngeunaan nu tugas jeung kalungguhan pikeun ngalakukeun dina nu sarwa.

Lamun utusan kaputusan ieu peran hiji, komo jeung itungan, Anjeun doom diri (jeung hiji anu bakal nyoba parse kode Anjeun) kana ayana nalangsara. Peran henteu mutuskeun dimana éta dilaksanakeun. kaputusan ieu dijieun ku maén. Peran ngalakukeun naon anu dicaritakeun, dimana anu dicaritakeun.

Naha éta bahaya pikeun program di Ansible sareng naha COBOL langkung saé tibatan Ansible kami bakal ngobrol dina bab ngeunaan variabel sareng jinja. Pikeun ayeuna, hayu urang sebutkeun hiji hal - unggal itungan anjeun ninggalkeun renik indelible parobahan variabel global, sarta anjeun teu bisa ngalakukeun nanaon ngeunaan eta. Pas dua "ngambah" intersected, sagalana geus leungit.

Catetan keur squeamish: peran pasti bisa mangaruhan aliran kontrol. Dahar delegate_to sarta mibanda kagunaan lumrah. Dahar meta: end host/play. Tapi! Inget urang ngajarkeun dasar? Poho ngeunaan delegate_to. Urang ngobrol ngeunaan kode Ansible pangbasajanna tur paling geulis. Anu gampang dibaca, gampang ditulis, gampang di-debug, gampang diuji sareng gampang réngsé. Janten, sakali deui:

maén sarta ngan maén mutuskeun on nu sarwa naon dieksekusi.

Dina bagian ieu, urang diurus oposisi antara maén jeung peran. Ayeuna hayu urang ngobrol ngeunaan tugas vs hubungan peran.

Tugas jeung Kalungguhan

Pertimbangkeun maén:

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

Hayu urang nyebutkeun kudu ngalakukeun foo. Sarta eta Sigana mah foo: name=foobar state=present. Dimana kuring kedah nyerat ieu? dina pra? posting? Jieun peran?

...Jeung dimana tugas?

Urang mimitian ku dasar deui - alat muter. Lamun ngambang dina masalah ieu, Anjeun teu bisa make muter salaku dadasar pikeun sagalana sejenna, sarta hasilna anjeun bakal "goyang".

Alat Play: diréktif host, setélan pikeun maén sorangan sareng pre_tasks, tugas, peran, bagian post_tasks. Parameter sésana pikeun maén henteu penting pikeun urang ayeuna.

Urutan bagian maranéhanana jeung tugas jeung kalungguhan: pre_tasks, roles, tasks, post_tasks. Kusabab semantically urutan palaksanaan nyaeta antara tasks и roles teu jelas, lajeng prakték pangalusna nyebutkeun yen urang nambahkeun bagian tasks, ngan lamun henteu roles... Lamun aya roles, teras sadaya tugas napel disimpen dina bagian pre_tasks/post_tasks.

Kabéh anu tetep éta sagalana geus semantically jelas: kahiji pre_taskssaterusna rolessaterusna post_tasks.

Tapi kami masih teu ngajawab patarosan: dimana nelepon modul? foo nulis? Naha urang kedah nyerat sadayana peran pikeun unggal modul? Atawa éta hadé boga peran kandel pikeun sagalana? Sareng upami henteu peran, teras dimana kuring kedah nyerat - sateuacan atanapi posting?

Upami teu aya jawaban anu leres pikeun patarosan ieu, maka ieu mangrupikeun tanda kakurangan intuisi, nyaéta, "dasar anu goyah". Hayu urang angka eta kaluar. Kahiji, patarosan kaamanan: Lamun maén boga pre_tasks и post_tasks (tur euweuh tugas atawa kalungguhan), lajeng bisa hal megatkeun lamun kuring ngalakukeun tugas munggaran ti post_tasks Kuring gé mindahkeun ka tungtungna pre_tasks?

Tangtosna, kecap-kecap tina patarosan nunjukkeun yén éta bakal rusak. Tapi naon kahayang?

... Panangan. Maca dasar ngungkabkeun kanyataan anu penting: sadaya pawang disiram sacara otomatis saatos unggal bagian. Jelema. sagala tugas ti pre_tasks, teras sadayana pawang anu diwartosan. Teras sadayana peran sareng sadaya pawang anu dibéjakeun dina peran éta dilaksanakeun. Sanggeus post_tasks jeung pawang maranéhanana.

Ku kituna, lamun nyered tugas ti post_tasks в pre_tasks, teras berpotensi anjeun bakal ngaéksekusi sateuacan pawang dieksekusi. contona, lamun di pre_tasks web server dipasang na ngonpigurasi, jeung post_tasks hal anu dikirim ka dinya, lajeng mindahkeun tugas ieu bagian pre_tasks bakal ngakibatkeun kanyataan yén dina waktu "ngirim" server moal acan ngajalankeun sarta sagalana bakal megatkeun.

Ayeuna urang pikir deui, naha urang peryogi pre_tasks и post_tasks? Contona, dina raraga ngalengkepan sagalana diperlukeun (kaasup pawang) saméméh minuhan peran. A post_tasks bakal ngidinan urang pikeun digawekeun ku hasil executing peran (kaasup pawang).

Ahli Ansible anu cerdik bakal nyarioskeun ka urang naon éta. meta: flush_handlers, Tapi naha urang kudu flush_handlers lamun urang bisa ngandelkeun urutan palaksanaan bagian dimaénkeun? Sumawona, pamakean meta: flush_handlers tiasa masihan urang hal-hal anu teu kaduga ku panangan duplikat, masihan peringatan aneh nalika dianggo. when у block jsb. Langkung saé anjeun terang ansible, langkung seueur nuansa anu anjeun tiasa namikeun pikeun solusi "tricky". Sareng solusi anu saderhana - ngagunakeun pembagian alami antara pra/peran/pos - henteu ngabalukarkeun nuansa.

Jeung, balik deui ka urang 'foo'. Dimana abdi kedah nempatkeun eta? Dina pre, pos atawa kalungguhan? Jelas, ieu gumantung kana naha urang peryogi hasil Handler pikeun foo. Upami aranjeunna henteu aya, maka foo henteu kedah ditempatkeun dina pre atanapi pos - bagian ieu ngagaduhan hartos khusus - ngalaksanakeun tugas sateuacan sareng saatos kode utama.

Ayeuna jawaban kana patarosan "peran atanapi tugas" turun ka naon anu parantos dimaénkeun - upami aya tugas, maka anjeun kedah nambihanana kana tugas. Upami aya peran, anjeun kedah nyiptakeun peran (sanaos tina hiji tugas). Hayu atuh ngingetkeun yén tugas jeung kalungguhan teu dipaké dina waktos anu sareng.

Ngartos dasar-dasar Ansible nyayogikeun jawaban anu wajar pikeun patarosan rasa.

Tugas jeung kalungguhan (bagian dua)

Ayeuna hayu urang bahas kaayaan nalika anjeun nembé ngamimitian nyerat playbook. Anjeun kedah ngadamel foo, bar sareng baz. Naha tilu tugas ieu, hiji peran atanapi tilu peran? Pikeun nyimpulkeun patarosan: dina titik naon anjeun kedah ngamimitian nyerat peran? Naon gunana nulis peran lamun bisa nulis tugas?... Naon peran?

Salah sahiji kasalahan pangbadagna (Kuring geus dikaitkeun ieu) nyaeta mikir yén peran hiji kawas fungsi dina perpustakaan program urang. Kumaha pedaran fungsi generik kasampak kawas? Éta nampi argumen input, berinteraksi sareng panyabab samping, ngalakukeun efek samping, sareng ngabalikeun nilai.

Ayeuna, perhatian. Naon anu tiasa dilakukeun tina ieu peran? Anjeun salawasna wilujeng sumping ka nelepon efek samping, ieu hakekat sakabéh Ansible - nyieun efek samping. Aya sabab samping? SD. Tapi kalayan "luluskeun nilai sareng mulangkeunana" - éta henteu tiasa dianggo. Kahiji, anjeun teu bisa lulus nilai ka peran hiji. Anjeun tiasa nyetel variabel global kalawan ukuran hirupna maén dina bagian vars pikeun peran. Anjeun tiasa nyetél variabel global kalayan hirupna dina maén dina peran éta. Atawa malah jeung hirupna playbooks (set_fact/register). Tapi anjeun teu tiasa gaduh "variabel lokal". Anjeun teu bisa "nyandak nilai" jeung "ngabalikeun deui".

Hal utama nyaéta kieu: anjeun moal tiasa nyerat hiji hal dina Ansible tanpa ngabalukarkeun efek samping. Ngarobah variabel global sok éfék samping pikeun fungsi hiji. Dina Rust, contona, ngarobah variabel global nyaéta unsafe. Sareng di Ansible éta hiji-hijina cara pikeun mangaruhan nilai-nilai pikeun peran. Catet kecap-kecap anu dianggo: sanés "luluskeun nilai kana peran", tapi "robah nilai anu dianggo peran". Henteu aya isolasi antara peran. Henteu aya pamisahan antara tugas sareng peran.

total: peran teu fungsi.

Naon alus ngeunaan peran? Kahiji, peran boga nilai standar (/default/main.yaml), Bréh, peranna gaduh diréktori tambahan pikeun nyimpen file.

Naon kauntungan tina nilai standar? Kusabab dina piramida Maslow, tabel prioritas variabel Ansible anu rada menyimpang, standar peran mangrupikeun prioritas anu paling rendah (dikurangan parameter garis paréntah Ansible). Ieu ngandung harti yén upami anjeun kedah nyayogikeun nilai standar sareng henteu hariwang ngeunaan aranjeunna ngaleungitkeun nilai tina inventaris atanapi variabel grup, maka standar peran mangrupikeun hiji-hijina tempat anu pas pikeun anjeun. (Kuring bohong saeutik - aya deui |d(your_default_here), Tapi lamun urang ngobrol ngeunaan tempat cicing, teras ngan ingkar peran).

Naon deui anu hébat ngeunaan peran? Kusabab aranjeunna gaduh katalog sorangan. Ieu diréktori pikeun variabel, duanana konstan (nyaéta diitung pikeun peran) sareng dinamis (aya pola atanapi anti pola - include_vars babarengan jeung {{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml.). Di handap ieu mangrupakeun directories pikeun files/, templates/. Ogé, éta ngamungkinkeun anjeun gaduh modul sareng plugins anjeun nyalira (library/). Tapi, dibandingkeun sareng tugas dina playbook (anu ogé tiasa gaduh sadayana ieu), hiji-hijina kauntungan di dieu nyaéta yén file henteu dibuang kana hiji tumpukan, tapi sababaraha tumpukan anu misah.

Hiji deui detil: anjeun tiasa nyobian ngadamel peran anu tiasa dianggo deui (via galaksi). Ku mecenghulna kumpulan, distribusi peran bisa dianggap ampir poho.

Ku kituna, peran boga dua fitur penting: aranjeunna gaduh standar (fitur unik) sarta aranjeunna ngidinan Anjeun pikeun struktur kode Anjeun.

Balik deui ka patarosan aslina: iraha ngalakukeun tugas sareng iraha ngalaksanakeun peran? Tugas dina playbook paling mindeng dipaké boh salaku "lem" saméméh / sanggeus peran, atawa salaku unsur wangunan mandiri (mangka kudu aya euweuh peran dina kode). Tumpukan pancén normal anu dicampurkeun sareng peran nyaéta kalemahan anu teu jelas. Anjeun kedah taat kana gaya khusus - boh tugas atanapi peran. Peran nyayogikeun pamisahan éntitas sareng standar, tugas ngamungkinkeun anjeun maca kode langkung gancang. Biasana, langkung seueur kode "stasioner" (penting sareng kompleks) dilebetkeun kana peran, sareng skrip bantu ditulis dina gaya tugas.

Kasebut nyaéta dimungkinkeun pikeun ngalakukeun import_role salaku tugas, tapi upami anjeun nyerat ieu, teras siap-siap ngajelaskeun kana rasa kaéndahan anjeun sorangan naha anjeun badé ngalakukeun ieu.

Pamaca anu cerdik tiasa nyarios yén peran tiasa ngimpor peran, peran tiasa gaduh katergantungan via galaxy.yml, sareng aya ogé anu dahsyat sareng dahsyat. include_role - Kuring ngingetan yén kami ngaronjatkeun kaahlian dina Ansible dasar, sarta teu di senam inohong.

Pawang jeung tugas

Hayu urang bahas hal anu jelas: pawang. Nyaho kumaha cara ngagunakeunana leres mangrupikeun seni. Naon bedana panangan sareng sered?

Kusabab urang émut dasarna, ieu conto:

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

Pawang peranna aya di rolename/handlers/main.yaml. Pawang rummage antara sakabéh pamilon maén: pre / post_tasks bisa narik pawang peran, sarta peran hiji bisa narik pawang ti maén. Sanajan kitu, "cross-peran" nelepon ka pawang ngabalukarkeun leuwih wtf ti ngulang hiji pawang trivial. (Elemen séjén tina prakték pangsaéna nyaéta nyobian henteu ngulang nami pawang).

Beda utama nyaéta yén tugas sok dieksekusi (idempotently) (tambah / tag dikurangan jeung when), sarta Handler - ku robah kaayaan (ngabéjaan seuneu ngan lamun geus robah). Naon ieu hartosna? Salaku conto, kanyataan yén nalika anjeun ngamimitian deui, upami teu aya anu robih, maka moal aya panangan. Naha urang kedah ngaéksekusi panangan nalika teu aya parobihan dina tugas ngahasilkeun? Contona, sabab hiji hal peupeus sarta robah, tapi palaksanaan teu ngahontal Handler nu. Contona, sabab jaringan samentara turun. Konfigurasi parantos robih, jasana teu acan di-restart. Dina waktos salajengna basa Anjeun ngamimitian, config euweuh robah, sarta jasa tetep mibanda versi heubeul tina config nu.

Kaayaan sareng config teu tiasa direngsekeun (langkung tepatna, anjeun tiasa nyiptakeun protokol restart khusus pikeun diri anjeun kalayan bendera file, jsb., tapi ieu henteu deui 'ansible dasar' dina bentuk naon waé). Tapi aya carita umum anu sanés: kami masang aplikasi, ngarékam éta .service-file, tur ayeuna urang hoyong eta daemon_reload и state=started. Jeung tempat alam pikeun ieu sigana Handler nu. Tapi upami anjeun ngajantenkeun éta sanés panangan tapi tugas dina tungtung daptar tugas atanapi peran, maka éta bakal dilaksanakeun sacara idempotent unggal waktos. Sanajan playbook peupeus di tengah. Ieu teu ngajawab masalah restarted pisan (Anjeun teu bisa ngalakukeun tugas jeung atribut restarted, sabab idempotency leungit), tapi pasti patut ngalakukeun kaayaan = dimimitian, stabilitas sakabéh playbooks naek, sabab. jumlah sambungan jeung kaayaan dinamis nurun.

sipat positif sejen tina Handler nyaeta teu bakiak kaluaran. Teu aya parobihan - teu aya tambahan anu skip atanapi ok dina kaluaran - langkung gampang dibaca. Éta ogé sipat négatip - lamun manggihan typo dina tugas linier dieksekusi dina ngajalankeun pisan munggaran, lajeng pawang bakal dieksekusi ngan lamun robah, i.e. dina sababaraha kaayaan - jarang pisan. Contona, pikeun kahiji kalina dina hirup kuring lima taun engké. Sareng, tangtosna, bakal aya salah ketik dina nami sareng sadayana bakal rusak. Sareng upami anjeun henteu ngajalankeun aranjeunna kadua kalina, henteu aya anu robih.

Kapisah, urang kedah ngobrol ngeunaan kasadiaan variabel. Salaku conto, upami anjeun ngabéjaan tugas kalayan loop, naon anu bakal aya dina variabel? Anjeun tiasa nebak analytically, tapi teu salawasna trivial, utamana lamun variabel datangna ti tempat béda.

... Jadi pawang loba kurang mangpaat tur leuwih masalah ti aranjeunna sigana. Lamun bisa nulis hal beautifully (tanpa frills) tanpa pawang, éta hadé pikeun ngalakukeunana tanpa aranjeunna. Lamun teu dianggo kaluar beautifully, éta hadé jeung aranjeunna.

Pamaca corrosive leres nunjukkeun yén kami henteu acan bahas listenyén Handler a tiasa nelepon ngabéjaan pikeun Handler sejen, yén Handler a bisa ngawengku import_tasks (anu tiasa ngalakukeun include_role kalawan with_items), yén sistem Handler di Ansible nyaeta Turing-lengkep, yén pawang ti include_role intersect dina cara panasaran jeung pawang ti maén, jsb..d. - sadayana ieu jelas sanes "dasar").

Sanaos aya hiji WTF khusus anu saleresna mangrupikeun fitur anu anjeun kedah émut. Lamun tugas anjeun dieksekusi kalawan delegate_to sarta eta geus ngabéjaan, lajeng pawang pakait dieksekusi tanpa delegate_to, i.e. on host mana muter ditugaskeun. (Sanajan pawang, tangtosna, tiasa gaduh delegate_to Sarua).

Kapisah, abdi hoyong nyarios sababaraha kecap ngeunaan peran reusable. Sateuacan koleksi muncul, aya ide yén anjeun tiasa ngadamel peran universal anu tiasa ansible-galaxy install jeung indit. Gawéna dina sadaya OS sadaya varian dina sadaya kaayaan. Janten, pendapat kuring: éta henteu jalan. Peran naon waé kalayan massa include_vars, ngarojong 100500 kasus, geus doomed ka jurang tina bug sudut. Éta tiasa ditutupan ku tés masif, tapi sapertos tés naon waé, boh anjeun gaduh produk Cartesian tina nilai input sareng fungsi total, atanapi anjeun ngagaduhan "skenario individu katutupan." Pamadegan kuring nyaéta yén éta langkung saé upami peranna linier (pajeulitna cyclomatic 1).

Pangsaeutikna upami (eksplisit atanapi déklaratif - dina bentuk when atawa wangun include_vars ku set variabel), langkung saé peranna. Kadang-kadang anjeun kedah ngadamel dahan, tapi, kuring ngulang deui, langkung sakedik aya, langkung saé. Ku kituna sigana kawas peran alus kalawan galaksi (gawéna!) Jeung kebat when bisa jadi kurang leuwih hade tinimbang peran "sorangan" tina lima tugas. Momen nalika peran sareng galaksi langkung saé nyaéta nalika anjeun ngamimitian nyerat hiji hal. Momen nalika éta parah nyaéta nalika aya anu rusak sareng anjeun curiga yén éta kusabab "peran sareng galaksi". Anjeun mukakeunana, sareng aya lima inklusi, dalapan lembar tugas sareng tumpukan when'ov... Sareng urang kedah terang ieu. Gantina 5 tugas, daptar linier nu aya nanaon megatkeun.

Dina bagian handap

  • Sakedik ngeunaan inventaris, variabel grup, host_group_vars plugin, hostvars. Kumaha dasi cangreud Gordian kalawan spaghetti. Wengkuan sarta precedence variabel, modél memori Ansible. "Jadi dimana urang nyimpen ngaran pamaké pikeun database?"
  • jinja: {{ jinja }} - nosql notype nosense plasticine lemes. Éta aya dimana-mana, bahkan dimana anjeun henteu nyangka. Saeutik ngeunaan !!unsafe jeung yaml nikmat.

sumber: www.habr.com

Tambahkeun komentar