{"id":87084,"date":"2020-07-03T13:42:34","date_gmt":"2020-07-03T11:42:34","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/osnovy-ansible-bez-kotoryh-vashi-plejbuki-komok-slipshihsya-makaron"},"modified":"2020-07-03T13:42:34","modified_gmt":"2020-07-03T11:42:34","slug":"osnovy-ansible-bez-kotoryh-vashi-plejbuki-komok-slipshihsya-makaron","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/osnovy-ansible-bez-kotoryh-vashi-plejbuki-komok-slipshihsya-makaron","title":{"rendered":"Az Ansible alapjai, amelyek n\u00e9lk\u00fcl a j\u00e1t\u00e9kk\u00f6nyveid egy ragacsos t\u00e9szta gomb\u00f3c lesz.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Sokat \u00edrok m\u00e1sok Ansible k\u00f3dj\u00e1r\u00f3l \u00e9s sokat \u00edrok \u00e9n magam is. A hib\u00e1k elemz\u00e9se sor\u00e1n (ak\u00e1r m\u00e1sok\u00e9, ak\u00e1r a saj\u00e1tjaim), valamint n\u00e9h\u00e1ny interj\u00fa alatt r\u00e1j\u00f6ttem, hogy a felhaszn\u00e1l\u00f3k legnagyobb hib\u00e1ja az, hogy bonyolult dolgokba v\u00e1gnak bele an\u00e9lk\u00fcl, hogy elsaj\u00e1t\u00edtan\u00e1k az alapokat.<\/p>\n<p><\/p>\n<p>A vil\u00e1gegyetem ezen igazs\u00e1gtalans\u00e1g\u00e1nak orvosl\u00e1s\u00e1ra \u00fagy d\u00f6nt\u00f6ttem, hogy \u00edrok egy bevezet\u0151t az Ansible-hez azok sz\u00e1m\u00e1ra, akik m\u00e1r ismerik. Figyelmeztetem, hogy ez nem egy k\u00e9zik\u00f6nyv \u00f6sszefoglal\u00e1s, hanem egy hossz\u00fa olvasm\u00e1ny, amely tele van bet\u0171kkel, de k\u00e9pek nincsenek benne.<\/p>\n<p><\/p>\n<p>A v\u00e1rhat\u00f3 olvas\u00f3i szint \u2014 m\u00e1r \u00edrt\u00e1l t\u00f6bb ezer sor yamlt, m\u00e1r van valami a produkci\u00f3ban, de \"valahogy minden ferde\".<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1>C\u00edmek<\/h1>\n<p><\/p>\n<p>A felhaszn\u00e1l\u00f3 Ansible legnagyobb hib\u00e1ja, hogy nem tudja, mi hogyan h\u00edvj\u00e1k. Ha nem tudod a neveket, nem tudod meg\u00e9rteni, ami a dokument\u00e1ci\u00f3ban van. Egy \u00e9l\u0151 p\u00e9lda: egy interj\u00fan a szem\u00e9ly, aki \u00e1ll\u00edt\u00f3lag sokat \u00edrt Ansible-lal, nem tudta megv\u00e1laszolni a k\u00e9rd\u00e9st, \"mib\u0151l \u00e1ll a playbook?\". \u00c9s amikor mondtam, hogy \"a v\u00e1lasz az, hogy a playbook play-ekb\u0151l \u00e1ll\", akkor \u00e9rkezett a megsemmis\u00edt\u0151 komment\u00e1r: \"mi ezt nem haszn\u00e1ljuk\". Az emberek p\u00e9nz\u00e9rt \u00edrnak Ansible-lal, \u00e9s nem haszn\u00e1lj\u00e1k a play-t. <em>Val\u00f3j\u00e1ban haszn\u00e1lj\u00e1k, de nem tudj\u00e1k, mi az.<\/em><\/p>\n<p><\/p>\n<p>Teh\u00e1t kezdj\u00fck a legegyszer\u0171bbt\u0151l: hogyan nevezik azt, ami van. Lehet, hogy tudod, de lehet, hogy nem, mert nem figyelt\u00e9l oda, amikor a dokument\u00e1ci\u00f3t olvastad.<\/p>\n<p><\/p>\n<p>Az ansible-playbook v\u00e9grehajtja a playbook-ot. A playbook egy yml\/yaml kiterjeszt\u00e9s\u0171 f\u00e1jl, amelyben valami ilyesmi van:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n- hosts: group1\n  roles:\n    - role1\n\n- hosts: group2,group3\n  tasks:\n    - debug:<\/code><\/pre>\n<p><\/p>\n<p>M\u00e1r meg\u00e9rtett\u00fck, hogy ez az eg\u00e9sz f\u00e1jl \u2014 a playbook. Meg tudjuk mutatni, hol vannak a szerepek (roles), hol a feladatok (tasks). De hol van itt a play? \u00c9s miben k\u00fcl\u00f6nb\u00f6zik a play a szerept\u0151l vagy a playbook-t\u00f3l?<\/p>\n<p><\/p>\n<p>Mindez benne van a dokument\u00e1ci\u00f3ban. \u00c9s ezt \u00e1ltal\u00e1ban kihagyj\u00e1k. A kezd\u0151k \u2014 mert ott t\u00fal sok van, \u00e9s nem tudod mindet egyszerre megjegyezni. A tapasztaltak \u2014 mert \"trivi\u00e1lis dolgok\". Ha tapasztalt vagy, olvasd \u00e1t ezeket az oldalakat legal\u00e1bb f\u00e9l\u00e9vente, \u00e9s a k\u00f3dod oszt\u00e1lyokkal jobb lesz.<\/p>\n<p><\/p>\n<p>Teh\u00e1t jegyezd meg: A playbook egy lista, amely play-b\u0151l \u00e9s <code>import_playbook<\/code>.<br \/>\nEz itt egy play:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">- hosts: group1\n  roles:\n    - role1<\/code><\/pre>\n<p><\/p>\n<p>\u00c9s ez is itt egy m\u00e1sik play:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">- hosts: group2,group3\n  tasks:\n    - debug:<\/code><\/pre>\n<p><\/p>\n<p>Mi is az a play? Mire val\u00f3?<\/p>\n<p><\/p>\n<p>A play a playbook kulcsfontoss\u00e1g\u00fa eleme, mert a play, \u00e9s csak a play k\u00f6ti \u00f6ssze a szerepek \u00e9s\/vagy feladatok list\u00e1j\u00e1t azokkal a hosztokkal, amelyeken v\u00e9gre kell hajtani \u0151ket. A dokument\u00e1ci\u00f3 m\u00e9lyebb r\u00e9tegeiben tal\u00e1lni lehet eml\u00edt\u00e9st a <code>delegate_to<\/code>, helyi lookup b\u0151v\u00edtm\u00e9nyek, h\u00e1l\u00f3zati cli-specifikus be\u00e1ll\u00edt\u00e1sok, jump-hostok stb. Ezek lehet\u0151v\u00e9 teszik a feladatok v\u00e9grehajt\u00e1s\u00e1nak hely\u00e9nek enyhe megv\u00e1ltoztat\u00e1s\u00e1t. De felejtsd el ezt. Mindegyik okos opci\u00f3 nagyon speci\u00e1lis alkalmaz\u00e1sokkal rendelkezik, \u00e9s biztosan nem univerz\u00e1lisak. Mi az alapvet\u0151 dolgokr\u00f3l besz\u00e9l\u00fcnk, amelyeket mindenki tudnia kell \u00e9s haszn\u00e1lnia kell.<\/p>\n<p><\/p>\n<p>Ha \"valamit\" szeretn\u00e9l v\u00e9grehajtani \"valahol\" \u2014 akkor play-t \u00edrsz. Nem szerepet. Nem szerepet modulekkal \u00e9s deleg\u00e1ltakkal. Te egyszer\u0171en \u00edrsz egy play-t. Amiben a hosts mez\u0151ben felsorolod, hogy hol v\u00e9gre kell hajtani, a roles\/tasks mez\u0151ben pedig azt, hogy mit kell v\u00e9grehajtani.<\/p>\n<p><\/p>\n<p>Egyszer\u0171, igaz? H\u00e1t hogyan lenne m\u00e1sk\u00e9nt?<\/p>\n<p><\/p>\n<p>Az egyik jellemz\u0151 megjegyz\u00e9s, amikor az emberek azt szeretn\u00e9k, hogy ezt ne play-en kereszt\u00fcl csin\u00e1lj\u00e1k, az a \"szerep, ami mindent be\u00e1ll\u00edt\". Azt szeretn\u00e9d, hogy legyen egy szerep, ami be\u00e1ll\u00edtja \u00e9s <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hu\/server\/dts-los-angeles\/\"   title=\"a szerver\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3633\">a szerver<\/a> az els\u0151 t\u00edpus\u00fa, valamint a m\u00e1sodik t\u00edpus\u00fa szervereket.<\/p>\n<p><\/p>\n<p>A klasszikus p\u00e9lda a monitoring. Szeretn\u00e9nk egy monitoring szerepet, amely be\u00e1ll\u00edtja a monitoringot. A monitoring szerepet a monitoring hosztokra rendelj\u00fck (a megfelel\u0151 play-ben). De kider\u00fcl, hogy a monitoringhoz csomagokat kell telep\u00edten\u00fcnk a monitorozott hosztokra. Mi\u00e9rt ne haszn\u00e1ln\u00e1nk deleg\u00e1ltat? \u00c9s meg kellene \u00e1ll\u00edtanunk az iptables-t. deleg\u00e1lt? \u00c9s sz\u00fcks\u00e9g van egy konfigur\u00e1ci\u00f3s f\u00e1jl \u00edr\u00e1s\u00e1ra\/m\u00f3dos\u00edt\u00e1s\u00e1ra az adatb\u00e1zis-kezel\u0151 sz\u00e1m\u00e1ra, hogy a monitoringot enged\u00e9lyezze. deleg\u00e1lt! \u00c9s ha kreat\u00edv \u00f6tleted t\u00e1mad, akkor egy be\u00e1gyazott deleg\u00e1ci\u00f3t is l\u00e9trehozhatsz <code>include_role<\/code> a csoportok list\u00e1j\u00e1n v\u00e9gzett okos sz\u0171r\u0151vel v\u00e9gzett be\u00e1gyazott ciklusban, bel\u00fcl <code>include_role<\/code> m\u00e9g lehet csin\u00e1lni <code>delegate_to<\/code> \u00fajra. \u00c9s kezd\u0151dik a\u2026<\/p>\n<p><\/p>\n<p>A j\u00f3 sz\u00e1nd\u00e9k \u2014 hogy legyen egyetlen monitoring szerep, ami \"mindent csin\u00e1l\" \u2014 a pokolba vezet minket, ahonnan a legt\u00f6bbsz\u00f6r egyetlen ki\u00fat van: mindent \u00fajra kell \u00edrni.<\/p>\n<p><\/p>\n<p>Hol t\u00f6rt\u00e9nt a hiba? Abban a pillanatban, amikor r\u00e1j\u00f6tt\u00e9l, hogy az \"x\" feladat v\u00e9grehajt\u00e1s\u00e1hoz az X hoston sz\u00fcks\u00e9ged van arra, hogy menj a Y hostra, \u00e9s ott v\u00e9gezd el az \"y\"-t, egyszer\u0171 gyakorlatot kellett volna v\u00e9grehajtanod: menj \u00e9s \u00edrj egy play-t, ami a Y hoston v\u00e9gzi az y-t. Ne \u00edrj hozz\u00e1 valamit az \"x\"-hez, hanem \u00edrj egyet null\u00e1r\u00f3l. M\u00e9g ha hardcoded v\u00e1ltoz\u00f3kkal is.<\/p>\n<p><\/p>\n<p>\u00dagy t\u0171nik, az el\u0151z\u0151 bekezd\u00e9sekben minden helyesen van megfogalmazva. De ez nem a te eseted! Mert te egy \u00fajrahaszn\u00e1lhat\u00f3 k\u00f3dot szeretn\u00e9l \u00edrni, amely DRY \u00e9s k\u00f6nyvt\u00e1r-szer\u0171, \u00e9s meg kell keresni a m\u00f3dj\u00e1t, hogyan tedd ezt.<\/p>\n<p><\/p>\n<p>Itt rejt\u0151zik egy \u00fajabb s\u00falyos hiba. Ez a hiba sz\u00e1mos projektet v\u00e1ltoztatott \u00e1t t\u0171rhet\u0151en meg\u00edrtb\u00f3l (lehetne jobb, de m\u0171k\u00f6dik, \u00e9s k\u00f6nnyen b\u0151v\u00edthet\u0151) egy teljes r\u00e9m\u00e1lomm\u00e1, amelyben m\u00e9g a szerz\u0151 sem tud eligibilis r\u00e9gi venni. M\u0171k\u00f6dik, de \u00f3vva intem, ha v\u00e1ltoztatni szeretn\u00e9l rajta.<\/p>\n<p><\/p>\n<p>Ez a hiba \u00edgy hangzik: a szerep \u2014 k\u00f6nyvt\u00e1ri funkci\u00f3. Ez az anal\u00f3gia annyi j\u00f3 kezdem\u00e9nyez\u00e9st t\u00f6nkretett, hogy szinte szomor\u00fa n\u00e9zni. A szerep nem k\u00f6nyvt\u00e1ri funkci\u00f3. Nem v\u00e9gezhet sz\u00e1m\u00edt\u00e1sokat, \u00e9s nem hozhat play szint\u0171 d\u00f6nt\u00e9seket. Eml\u00e9keztessetek, milyen d\u00f6nt\u00e9seket hoz a play?<\/p>\n<p><\/p>\n<p>K\u00f6sz\u00f6n\u00f6m, igazad van. A play d\u00f6nt\u00e9st hoz (pontosabban, inform\u00e1ci\u00f3t tartalmaz arr\u00f3l), hogy mely feladatokat \u00e9s szerepeket hajtsanak v\u00e9gre, \u00e9s mely hosztokon.<\/p>\n<p><\/p>\n<p>Ha ezt a d\u00f6nt\u00e9st a szerepre b\u00edzzuk, r\u00e1ad\u00e1sul m\u00e9g sz\u00e1m\u00edt\u00e1sokkal is, akkor egy nyomorult \u00e9letre k\u00e1rhoztatod magadat (\u00e9s azt, aki a k\u00f3dodat pr\u00f3b\u00e1lja megfejteni). A szerep nem hat\u00e1rozza meg, hogy hol hajt\u00f3dik v\u00e9gre. Ezt a d\u00f6nt\u00e9st a play hozza meg. A szerep azt teszi, amit mondtak neki, ott, ahol mondt\u00e1k.<\/p>\n<p><\/p>\n<p>Mi\u00e9rt vesz\u00e9lyes Ansible-lel programozni, \u00e9s miben jobb a COBOL, mint az Ansible, azt a v\u00e1ltoz\u00f3kkal \u00e9s jinja-val foglalkoz\u00f3 fejezetben fogjuk t\u00e1rgyalni. Egyel\u0151re annyit mondjunk el: minden sz\u00e1m\u00edt\u00e1sod olyan nyomot hagy, amely a glob\u00e1lis v\u00e1ltoz\u00f3k megv\u00e1ltoztat\u00e1s\u00e1b\u00f3l \u00e1ll, \u00e9s ezzel semmit nem tudsz tenni. Amint k\u00e9t \"nyom\" keresztezi egym\u00e1st \u2014 minden elment.<\/p>\n<p><\/p>\n<p>Megjegyz\u00e9s a figyelmeseknek: a szerep k\u00e9ts\u00e9gtelen\u00fcl befoly\u00e1solhatja a control flow-t. Van <code>delegate_to<\/code> \u00e9s vannak \u00e9sszer\u0171 alkalmaz\u00e1sai. Van <code>meta: end host\/play<\/code>. De! Ne feledj\u00fck, az alapokat tanuljuk? Elfeledkezt\u00fcnk a <code>delegate_to<\/code>. A legegyszer\u0171bb \u00e9s legszebb Ansible k\u00f3dr\u00f3l besz\u00e9l\u00fcnk. Amit k\u00f6nny\u0171 olvasni, k\u00f6nny\u0171 \u00edrni, k\u00f6nny\u0171 hibakeresni, k\u00f6nny\u0171 tesztelni \u00e9s k\u00f6nny\u0171 b\u0151v\u00edteni. Teh\u00e1t, m\u00e9g egyszer:<\/p>\n<p><\/p>\n<p><strong>a play, \u00e9s csak a play eld\u00f6nti, hogy mely hosztokon mi hajt\u00f3dik v\u00e9gre.<\/strong><\/p>\n<p><\/p>\n<p>Ebben a szakaszban tiszt\u00e1ztuk a play \u00e9s a szerep k\u00f6z\u00f6tti konfliktust. Most besz\u00e9lj\u00fcnk a tasks \u00e9s a role k\u00f6z\u00f6tti kapcsolatr\u00f3l.<\/p>\n<p><\/p>\n<h1>Feladatok \u00e9s Szerepek<\/h1>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg a play-t:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">- hosts: somegroup\n  pre_tasks:\n    - some_tasks1:\n  roles:\n     - role1\n     - role2\n  post_tasks:\n     - some_task2:\n     - some_task3:<\/code><\/pre>\n<p><\/p>\n<p>Tegy\u00fck fel, hogy foo-t kell k\u00e9sz\u00edtened. \u00cdgy n\u00e9z ki <code>foo: name=foobar state=present<\/code>. Hol kell ezt \u00edrni? a pre-ben? a post-ban? K\u00e9sz\u00edts\u00fcnk szerepet?<\/p>\n<p><\/p>\n<p>\u2026 \u00c9s hov\u00e1 t\u0171ntek a feladatok?<\/p>\n<p><\/p>\n<p>\u00dajra kezdj\u00fck az alapokkal \u2014 a play eszk\u00f6zzel. Ha nem ismeri ezt a t\u00e9m\u00e1t, nem tudja a play-t alapk\u00e9nt haszn\u00e1lni a tov\u00e1bbiakhoz, \u00e9s az eredm\u00e9nye \"ingatagg\u00e1\" v\u00e1lik.<\/p>\n<p><\/p>\n<p>A play eszk\u00f6z: hosts direkt\u00edva, mag\u00e1nak a play be\u00e1ll\u00edt\u00e1sai \u00e9s a pre_tasks, tasks, roles, post_tasks szekci\u00f3k. A t\u00f6bbi param\u00e9ter nem fontos most a play sz\u00e1m\u00e1ra.<\/p>\n<p><\/p>\n<p>A szekci\u00f3k sorrendje feladatokkal \u00e9s szerepekkel: <code>pre_tasks<\/code>, <code>roles<\/code>, <code>tasks<\/code>, <code>post_tasks<\/code>. Mivel a v\u00e9grehajt\u00e1s sorrendje k\u00f6z\u00f6tt <code>tasks<\/code> \u00e9s <code>roles<\/code> nem vil\u00e1gos, a legjobb gyakorlat szerint szekci\u00f3t adunk hozz\u00e1, <code>tasks<\/code>csak akkor, ha nincs <code>roles<\/code>, akkor megtiltjuk (403). <code>roles<\/code>, akkor minden kapcsol\u00f3d\u00f3 feladat a szekci\u00f3kba ker\u00fcl. <code>pre_tasks<\/code>\/<code>post_tasks<\/code>.<\/p>\n<p><\/p>\n<p>Csak az marad, ami szemantikailag tiszta: el\u0151sz\u00f6r <code>pre_tasks<\/code>, azt\u00e1n <code>roles<\/code>, azt\u00e1n <code>post_tasks<\/code>.<\/p>\n<p><\/p>\n<p>De m\u00e9g mindig nem v\u00e1laszoltunk a k\u00e9rd\u00e9sre: hova kellene \u00edrni a modulh\u00edv\u00e1st? <code>foo<\/code> Meg kell-e \u00edrni minden modulhoz egy teljes szerepet? Vagy jobb, ha van egy vastag szerep mindent lefedve? \u00c9s ha nem szerep, akkor hova \u00edrjunk \u2014 pre-be vagy post-ba?<\/p>\n<p><\/p>\n<p>Ha ezekre a k\u00e9rd\u00e9sekre nincs megalapozott v\u00e1lasz, az a hi\u00e1nyz\u00f3 intu\u00edci\u00f3 jele, teh\u00e1t ezek azok az \"ingatag alapok\". N\u00e9zz\u00fck meg. El\u0151sz\u00f6r egy ellen\u0151rz\u0151 k\u00e9rd\u00e9s: Ha van play-jel, akkor <code>pre_tasks<\/code> \u00e9s <code>post_tasks<\/code> (\u00e9s nincs sem task, sem role), akkor t\u00f6rt\u00e9nhet-e valami hiba, ha az els\u0151 feladatot a <code>post_tasks<\/code> v\u00e9g\u00e9re mozgatom? <code>pre_tasks<\/code>?<\/p>\n<p><\/p>\n<p>Term\u00e9szetesen a k\u00e9rd\u00e9s megfogalmaz\u00e1sa arra utal, hogy valami elromlik. De mi pontosan?<\/p>\n<p><\/p>\n<p>\u2026 Handler-ek. Az alapok olvas\u00e1sa fontos t\u00e9nyt t\u00e1r fel: minden handler flush&#8217;ol\u00f3dik automatikusan minden szekci\u00f3 ut\u00e1n. Teh\u00e1t, elv\u00e9gzik az \u00f6sszes feladatot, <code>pre_tasks<\/code>, majd az \u00f6sszes handler, ami notify volt. Ezt k\u00f6vet\u0151en v\u00e9grehajt\u00f3dnak minden szerep \u00e9s az \u00f6sszes handler, ami notify volt a szerepekben. Ut\u00e1na <code>post_tasks<\/code> \u00e9s azok handler-jei.<\/p>\n<p><\/p>\n<p>\u00cdgy ha egy feladatot \u00e1thelyez a <code>post_tasks<\/code> be. <code>pre_tasks<\/code>, teh\u00e1t potenci\u00e1lisan ezt v\u00e9grehajtja, miel\u0151tt a handler&#8217;t v\u00e9grehajtan\u00e1. P\u00e9ld\u00e1ul, ha a <code>pre_tasks<\/code> telep\u00edt\u00e9st \u00e9s konfigur\u00e1l\u00e1st v\u00e9gez, <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hu\/server\/\"   title=\"webszerver\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1155\">webszerver<\/a>, m\u00edg a <code>post_tasks<\/code> valami k\u00fcld\u00e9s\u00e9vel, akkor ennek a feladatnak a mozg\u00e1sa a <code>pre_tasks<\/code> ez oda vezethet, hogy a \"k\u00fcld\u00e9s\" pillanat\u00e1ban a szerver m\u00e9g nem indult el, \u00e9s minden elromlik.<\/p>\n<p><\/p>\n<p>Most n\u00e9zz\u00fck meg m\u00e9g egyszer, hogy mi\u00e9rt van sz\u00fcks\u00e9g\u00fcnk a <code>pre_tasks<\/code> \u00e9s <code>post_tasks<\/code>? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0443\u0436\u043d\u043e\u0435 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0445\u044d\u043d\u0434\u043b\u0435\u0440\u044b) \u0434\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u043e\u043b\u0438. \u0410 <code>post_tasks<\/code> seg\u00edteni fog nek\u00fcnk a szerepek teljes\u00edt\u00e9s\u00e9nek eredm\u00e9nyeivel (bele\u00e9rtve a handler-eket) val\u00f3 munk\u00e1ban.<\/p>\n<p><\/p>\n<p>Egy sz\u0151rsz\u00e1lhasogat\u00f3 Ansible szak\u00e9rt\u0151 azt fogja mondani, hogy van <code>meta: flush_handlers<\/code>, de mi\u00e9rt van sz\u00fcks\u00e9g\u00fcnk a flush_handlers-re, ha b\u00edzhatunk a szekci\u00f3k v\u00e9grehajt\u00e1si sorrendj\u00e9ben a play-ben? S\u0151t, a meta: flush_handlers haszn\u00e1lata v\u00e1ratlan probl\u00e9m\u00e1kat okozhat ism\u00e9tl\u0151d\u0151 handler-ekkel, furcsa figyelmeztet\u00e9seket okozhat a <code>when<\/code> sa-logic-subsets-canary-vs.yaml <code>block<\/code> stb. Min\u00e9l jobban ismeri az ansible-t, ann\u00e1l t\u00f6bb finoms\u00e1got nevezhet meg az \"okos\" megold\u00e1s sz\u00e1m\u00e1ra. Egy egyszer\u0171 megold\u00e1s \u2014 a term\u00e9szetes elv\u00e1laszt\u00e1s a pre\/roles\/post k\u00f6z\u00f6tt \u2014 nem okoz finoms\u00e1gokat.<\/p>\n<p><\/p>\n<p>\u00c9s most t\u00e9rj\u00fcnk vissza a 'foo'-hoz. Hov\u00e1 tegy\u00fck? A pre, post vagy roles k\u00f6z\u00e9? Nyilv\u00e1nval\u00f3an att\u00f3l f\u00fcgg, hogy sz\u00fcks\u00e9g\u00fcnk van-e a handler munk\u00e1j\u00e1nak eredm\u00e9nyeire a foo-hoz. Ha nincs, akkor a foo-t nem sz\u00fcks\u00e9ges sem a pre-be, sem a post-ba helyezni \u2014 ezeknek a szekci\u00f3knak k\u00fcl\u00f6n\u00f6s jelent\u00e9se van \u2014 a feladatok v\u00e9grehajt\u00e1sa a f\u0151 k\u00f3d t\u00f6mbje el\u0151tt \u00e9s ut\u00e1n.<\/p>\n<p><\/p>\n<p>Most a \"szerep vagy feladat\" k\u00e9rd\u00e9sre a v\u00e1lasz az, ami m\u00e1r van a play-ben \u2014 ha ott feladatok vannak, akkor a feladatok k\u00f6z\u00e9 kell \u00edrni. Ha vannak szerepek \u2014 szerepet kell k\u00e9sz\u00edteni (m\u00e9g ha csak egy feladatb\u00f3l is). Eml\u00e9keztetem, hogy a feladatok \u00e9s szerepek egyszerre nem haszn\u00e1lhat\u00f3k.<\/p>\n<p><\/p>\n<p>Az Ansible alapjainak meg\u00e9rt\u00e9se megalapozott v\u00e1laszokat ad, l\u00e1tsz\u00f3lag \u00edzl\u00e9sbeli k\u00e9rd\u00e9sekre.<\/p>\n<p><\/p>\n<h1>Feladatok \u00e9s szerepek (m\u00e1sodik r\u00e9sz)<\/h1>\n<p><\/p>\n<p>Most besz\u00e9lj\u00fck meg azt a helyzetet, amikor \u00e9ppen csak elkezded \u00edrni a playbookot. Azon dolgozol, hogy foo, bar \u00e9s baz legyen. Ez h\u00e1rom feladat, egy szerep vagy h\u00e1rom szerep? \u00d6sszefoglalva a k\u00e9rd\u00e9st: mikor kezdj\u00fck el szerepeket \u00edrni? Mi a c\u00e9lja szerepek \u00edr\u00e1s\u00e1nak, amikor feladatokat is \u00edrhatunk?\u2026 De mi is az a szerep?<\/p>\n<p><\/p>\n<p>Az egyik legnagyobb hiba (m\u00e1r besz\u00e9ltem err\u0151l) \u2014 azt felt\u00e9telezni, hogy a szerep olyan, mint egy f\u00fcggv\u00e9ny egy program k\u00f6nyvt\u00e1r\u00e1ban. Hogyan n\u00e9z ki egy \u00f6sszefoglal\u00f3 f\u00fcggv\u00e9ny le\u00edr\u00e1s? Bemeneti argumentumokat fogad, interakci\u00f3ba l\u00e9p az oldals\u00f3 okokkal, mell\u00e9khat\u00e1sokat gener\u00e1l, \u00e9s visszat\u00e9r egy \u00e9rt\u00e9kkel.<\/p>\n<p><\/p>\n<p>Most figyelem. Mi mindezeket el lehet v\u00e9gezni egy szerepben? Oldals\u00f3 hat\u00e1sokat l\u00e9trehozni \u2014 mindig k\u00e9rlek, ez az Ansible l\u00e9nyege \u2014 oldalhat\u00e1sok v\u00e9grehajt\u00e1sa. Oldals\u00f3 okokat birtokolni? Egyszer\u0171. De a \"\u00e9rt\u00e9ket \u00e1tadni \u00e9s visszaadni\" \u2014 itt viszont nem. El\u0151sz\u00f6r is, nem tud \u00e9rt\u00e9ket \u00e1tadni egy szerepnek. Glob\u00e1lis v\u00e1ltoz\u00f3t \u00e1ll\u00edthat be, amely \u00e9letciklusa a play-ig terjed a szerep vars szekci\u00f3j\u00e1ban. Glob\u00e1lis v\u00e1ltoz\u00f3t \u00e1ll\u00edthat be, amely \u00e9letciklusa a play-en bel\u00fcl van a szerepben. Vagy ak\u00e1r a playbook-\u00e9 is (<code>set_fact<\/code>\/<code>register<\/code>). De \"helyi v\u00e1ltoz\u00f3kat\" nem birtokolhat. Nem tud \"\u00e9rt\u00e9ket fogadni\" \u00e9s \"visszaadni\".<\/p>\n<p><\/p>\n<p>Ebb\u0151l k\u00f6vetkezik a legfontosabb: az Ansible-ben nem lehet olyat \u00edrni, ami mell\u00e9khat\u00e1sok n\u00e9lk\u00fcl m\u0171k\u00f6dik. A glob\u00e1lis v\u00e1ltoz\u00f3k megv\u00e1ltoztat\u00e1sa mindig mell\u00e9khat\u00e1s egy f\u00fcggv\u00e9ny sz\u00e1m\u00e1ra. P\u00e9ld\u00e1ul Rustban a glob\u00e1lis v\u00e1ltoz\u00f3 megv\u00e1ltoztat\u00e1sa \u2014 <code>unsafe<\/code>. Az Ansible-ben az egyetlen m\u00f3dszer a szerepk\u00f6r \u00e9rt\u00e9keinek megv\u00e1ltoztat\u00e1s\u00e1ra. Figyeljen a haszn\u00e1lt szavakra: ne \"\u00e9rt\u00e9ket \u00e1tadni a szerepk\u00f6rnek\", hanem \"megv\u00e1ltoztatni a szerepk\u00f6r \u00e1ltal haszn\u00e1lt \u00e9rt\u00e9keket\". A szerepk\u00f6r\u00f6k k\u00f6z\u00f6tt nincs elszigetelts\u00e9g. A feladatok \u00e9s a szerepk\u00f6r\u00f6k k\u00f6z\u00f6tt sincs elszigetelts\u00e9g.<\/p>\n<p><\/p>\n<p>\u00d6sszesen: <strong>a szerep nem f\u00fcggv\u00e9ny<\/strong>.<\/p>\n<p><\/p>\n<p>Mit is j\u00f3 a szerepk\u00f6rben? El\u0151sz\u00f6r is, a szerepk\u00f6rnek vannak alap\u00e9rtelmezett \u00e9rt\u00e9kei (<code>\/default\/main.yaml<\/code>), m\u00e1sodszor pedig a szerepk\u00f6rnek vannak tov\u00e1bbi k\u00f6nyvt\u00e1rai a f\u00e1jlok t\u00e1rol\u00e1s\u00e1ra.<\/p>\n<p><\/p>\n<p>Mi\u00e9rt j\u00f3k az alap\u00e9rtelmezett \u00e9rt\u00e9kek? Az\u00e9rt, mert Maslow piramis\u00e1nak meglehet\u0151sen torz priorit\u00e1si t\u00e1bl\u00e1zat\u00e1ban az Ansible eset\u00e9ben a szerepk\u00f6r alap\u00e9rtelmezett be\u00e1ll\u00edt\u00e1sai a legkev\u00e9sb\u00e9 priorit\u00e1sosak (kiv\u00e9ve az Ansible parancssori param\u00e9tereit). Ez azt jelenti, hogy ha alap\u00e9rtelmezett \u00e9rt\u00e9keket szeretn\u00e9l megadni an\u00e9lk\u00fcl, hogy agg\u00f3dnod kellene, hogy fel\u00fcl\u00edrj\u00e1k az \u00e9rt\u00e9keket az inventory vagy csoportv\u00e1ltoz\u00f3k, akkor a szerepk\u00f6r alap\u00e9rtelmezettjei jelentik az egyetlen helyes megold\u00e1st sz\u00e1modra. (Kicsit hazudok \u2013 van m\u00e9g <code>|d(your_default_here)<\/code>, de ha statikus helyekr\u0151l besz\u00e9l\u00fcnk \u2013 akkor csak a szerepk\u00f6r\u00f6k alap\u00e9rtelmezettjei sz\u00e1m\u00edtanak).<\/p>\n<p><\/p>\n<p>Mi m\u00e9g a j\u00f3 a szerepk\u00f6r\u00f6kben? Az, hogy saj\u00e1t k\u00f6nyvt\u00e1raik vannak. Ezek a k\u00f6nyvt\u00e1rak v\u00e1ltoz\u00f3khoz k\u00e9sz\u00fcltek, ak\u00e1r \u00e1lland\u00f3k (azaz a szerepk\u00f6rh\u00f6z sz\u00e1m\u00edtottak), ak\u00e1r dinamikusak (van egy ilyen mint\u00e1zat, vagy anti-mint\u00e1zat \u2013 <code>include_vars<\/code> egy\u00fctt a <code>{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml<\/code>.). Ezek k\u00f6nyvt\u00e1rak a <code>files\/<\/code>, <code>templates\/<\/code>. Ezenk\u00edv\u00fcl lehet\u0151v\u00e9 teszik, hogy a szerepk\u00f6r\u00f6k saj\u00e1t modulokat \u00e9s b\u0151v\u00edtm\u00e9nyeket rendelkezzenek (<code>library\/<\/code>). De a feladatok \u00e9s a playbook (amelyben ez mind szerepelhet) \u00f6sszehasonl\u00edtva az el\u0151ny csup\u00e1n annyi, hogy a f\u00e1jlok nem egy halomban, hanem t\u00f6bb k\u00fcl\u00f6n halomban tal\u00e1lhat\u00f3ak.<\/p>\n<p><\/p>\n<p>Egy m\u00e1sik r\u00e9szlet: lehet pr\u00f3b\u00e1lkozni olyan szerepk\u00f6r\u00f6k l\u00e9trehoz\u00e1s\u00e1val, amelyek \u00fajrahaszn\u00e1lhat\u00f3ak lesznek (galaxy-n kereszt\u00fcl). Miut\u00e1n megjelentek a gy\u0171jtem\u00e9nyek, a szerepk\u00f6r\u00f6k terjed\u00e9s\u00e9t majdnem elfelejthetj\u00fck.<\/p>\n<p><\/p>\n<p>Ez\u00e1ltal a szerepk\u00f6r\u00f6k k\u00e9t fontos tulajdons\u00e1ggal rendelkeznek: van alap\u00e9rtelmezettj\u00fck (ami egyedi jellemz\u0151) \u00e9s lehet\u0151v\u00e9 teszik a k\u00f3d strukt\u00far\u00e1z\u00e1s\u00e1t.<\/p>\n<p><\/p>\n<p>Visszat\u00e9rve az eredeti k\u00e9rd\u00e9shez: mikor haszn\u00e1ljunk feladatokat \u00e9s mikor szerepk\u00f6r\u00f6ket? A playbookban a feladatokat leggyakrabban vagy mint \"ragaszt\u00f3t\" a szerepk\u00f6r\u00f6k el\u0151tt\/ut\u00e1n, vagy mint \u00f6n\u00e1ll\u00f3 \u00e9p\u00edt\u0151elemeket haszn\u00e1lj\u00e1k (ekkor a k\u00f3dban nem kellene szerepk\u00f6r\u00f6ket alkalmazni). Egy halom norm\u00e1lis feladat a szerepk\u00f6r\u00f6kkel keverve egy\u00e9rtelm\u0171 rendetlens\u00e9g. Konkr\u00e9t st\u00edlust kell k\u00f6vetni - vagy feladatokat, vagy szerepk\u00f6r\u00f6ket. A szerepk\u00f6r\u00f6k elk\u00fcl\u00f6n\u00edtik az entit\u00e1sokat \u00e9s az alap\u00e9rtelmezett be\u00e1ll\u00edt\u00e1sokat, a feladatok pedig lehet\u0151v\u00e9 teszik a k\u00f3d gyorsabb olvas\u00e1s\u00e1t. \u00c1ltal\u00e1ban a szerepk\u00f6r\u00f6kben tal\u00e1lhat\u00f3 a \"stacion\u00e1riusabb\" (fontosabb \u00e9s bonyolultabb) k\u00f3d, m\u00edg a feladatok st\u00edlus\u00e1ban seg\u00e9dscriptet \u00edrnak.<\/p>\n<p><\/p>\n<p>Lehet\u0151s\u00e9g van az import_role haszn\u00e1lat\u00e1ra, mint feladatra, de ha ilyet \u00edrsz, akkor k\u00e9sz\u00fclj fel egy magyar\u00e1zatra a saj\u00e1t eszt\u00e9tikai \u00e9rz\u00e9ked sz\u00e1m\u00e1ra, hogy mi\u00e9rt akarod ezt tenni.<\/p>\n<p><\/p>\n<p>Egy apr\u00f3l\u00e9kos olvas\u00f3 azt mondhatja, hogy a szerepek import\u00e1lhatj\u00e1k egym\u00e1st, a szerepek k\u00f6z\u00f6tt lehet f\u00fcgg\u0151s\u00e9g a galaxy.yml-en kereszt\u00fcl, \u00e9s m\u00e9g ott van a f\u00e9lelmetes \u00e9s sz\u00f6rny\u0171 <code>include_role<\/code> \u2014 eml\u00e9keztetem, hogy az alap Ansible tud\u00e1st fejlesztj\u00fck, nem pedig a ritmikus gimnasztik\u00e1t.<\/p>\n<p><\/p>\n<h1>Handler-ek \u00e9s feladatok<\/h1>\n<p><\/p>\n<p>Besz\u00e9lj\u00fcnk meg m\u00e9g egy nyilv\u00e1nval\u00f3 dolgot: a handler-ek. Az \u0151 helyes haszn\u00e1latuk szinte m\u0171v\u00e9szet. Mi a k\u00fcl\u00f6nbs\u00e9g a handler \u00e9s a feladat k\u00f6z\u00f6tt?<\/p>\n<p><\/p>\n<p>Mivel a alapokat bontogatjuk, itt van egy p\u00e9lda:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">- hosts: group1\n  tasks:\n    - foo:\n      notify: handler1\n  handlers:\n     - name: handler1\n       bar:<\/code><\/pre>\n<p><\/p>\n<p>A szerepk\u00f6r\u00f6k handlerjei a rolename\/handlers\/main.yaml f\u00e1jlban tal\u00e1lhat\u00f3k. A handlereket a play \u00f6sszes r\u00e9sztvev\u0151je haszn\u00e1lhatja: a pre\/post_tasks aktiv\u00e1lhatj\u00e1k a szerepk\u00f6r handlerjeit, \u00e9s a szerepk\u00f6r h\u00edvhat handlereket a playb\u0151l. Azonban a \"cross-role\" handler h\u00edv\u00e1sok sokkal nagyobb wtf \u00e9rzetet keltenek, mint egy trivi\u00e1lis handler ism\u00e9tl\u00e9se. (Egy m\u00e1sik legjobb gyakorlat - pr\u00f3b\u00e1ljuk elker\u00fclni a handler nevek ism\u00e9tl\u0151d\u00e9s\u00e9t).<\/p>\n<p><\/p>\n<p>A f\u0151 k\u00fcl\u00f6nbs\u00e9g abban rejlik, hogy a feladat mindig v\u00e9grehajt\u00e1sra ker\u00fcl (idempotens m\u00f3don), azaz (plusz\/m\u00ednusz c\u00edmk\u00e9k \u00e9s <code>when<\/code>), m\u00edg a handler az \u00e1llapotv\u00e1ltoz\u00e1skor (notify csak akkor aktiv\u00e1l\u00f3dik, ha volt v\u00e1ltoz\u00e1s). Mi\u00e9rt is komoly ez? P\u00e9ld\u00e1ul, ha \u00fajra futtatjuk, \u00e9s nem volt v\u00e1ltoz\u00e1s, akkor a handler sem fog v\u00e9grehajt\u00f3dni. De mi\u00e9rt fordulhat el\u0151, hogy a handler-t kell v\u00e9grehajtani, amikor a gener\u00e1l\u00f3 feladatn\u00e1l nem volt v\u00e1ltoz\u00e1s? P\u00e9ld\u00e1ul az\u00e9rt, mert valami elromlott, \u00e9s volt v\u00e1ltoz\u00e1s, de a v\u00e9grehajt\u00e1s nem jutott el a handler-hez. P\u00e9ld\u00e1ul, mert a h\u00e1l\u00f3zat \u00e1tmenetileg le\u00e1llt. A konfigur\u00e1ci\u00f3 megv\u00e1ltozott, a szolg\u00e1ltat\u00e1s nem indult \u00fajra. A k\u00f6vetkez\u0151 futtat\u00e1sn\u00e1l a konfigur\u00e1ci\u00f3 m\u00e1r nem v\u00e1ltozik, \u00e9s a szolg\u00e1ltat\u00e1s a r\u00e9gi konfigur\u00e1ci\u00f3s verzi\u00f3val marad.<\/p>\n<p><\/p>\n<p>A konfigur\u00e1ci\u00f3val kapcsolatos helyzet megoldhatatlan (pontosabban, saj\u00e1t magunknak ki lehet tal\u00e1lni egy speci\u00e1lis \u00fajraind\u00edt\u00e1si protokollt f\u00e1jlf\u00e1jlokkal stb., de ez m\u00e1r nem a 'basic ansible' semmilyen form\u00e1ban). Viszont van egy m\u00e1sik gyakori t\u00f6rt\u00e9net: telep\u00edtett\u00fck az alkalmaz\u00e1st, \u00e9s r\u00f6gz\u00edtett\u00fck azt. <code>.service<\/code>-f\u00e1jlt, \u00e9s most szeretn\u00e9nk a <code>daemon_reload<\/code> \u00e9s <code>state=started<\/code>. \u00c9s a megfelel\u0151 hely erre, \u00fagy t\u0171nik, egy handler. De ha nem handlerk\u00e9nt haszn\u00e1ljuk, hanem feladatk\u00e9nt a feladatlapon vagy szerepk\u00e9nt, akkor minden alkalommal idempotens m\u00f3don fog v\u00e9grehajt\u00f3dni. M\u00e9g akkor is, ha a playbook felmondta a szolg\u00e1latot a k\u00f6zep\u00e9n. Ez egy\u00e1ltal\u00e1n nem oldja meg a restarted probl\u00e9m\u00e1t (nem szabad feladatot k\u00e9rni restarted attrib\u00fatummal, mivel ez elvesz\u00edti az idempotenci\u00e1t), de mindenk\u00e9ppen \u00e9rdemes state=started-re \u00e1ll\u00edtani, a playbookok \u00e1ltal\u00e1nos stabilit\u00e1sa n\u0151, mivel cs\u00f6kken a kapcsolatok \u00e9s a dinamikus \u00e1llapotok sz\u00e1ma.<\/p>\n<p><\/p>\n<p>A handler egy m\u00e1sik pozit\u00edv tulajdons\u00e1ga, hogy nem terheli a kimenetet. Ha nem t\u00f6rt\u00e9ntek v\u00e1ltoz\u00e1sok - nincsenek felesleges skipped vagy ok a kimenetben - k\u00f6nnyebb olvasni. Ez egyben negat\u00edv tulajdons\u00e1g is - ha elg\u00e9pel\u00e9st tal\u00e1l egy line\u00e1risan v\u00e9grehajtott feladatban az els\u0151 fut\u00e1skor, a handlereket csak akkor hajtj\u00e1k v\u00e9gre, ha v\u00e1ltoz\u00e1s t\u00f6rt\u00e9nt, teh\u00e1t bizonyos k\u00f6r\u00fclm\u00e9nyek mellett - nagyon ritk\u00e1n. P\u00e9ld\u00e1ul, els\u0151 alkalommal \u00f6t \u00e9v ut\u00e1n. \u00c9s term\u00e9szetesen ott el lesz g\u00e9pelve a n\u00e9v \u00e9s minden \u00f6sszeomlik. A m\u00e1sodik alkalommal pedig m\u00e1r nem lehet \u0151ket futtatni - hiszen nincs v\u00e1ltoz\u00e1s.<\/p>\n<p><\/p>\n<p>K\u00fcl\u00f6n \u00e9rdemes besz\u00e9lni a v\u00e1ltoz\u00f3k el\u00e9rhet\u0151s\u00e9g\u00e9r\u0151l. P\u00e9ld\u00e1ul, ha \u00e9rtes\u00edtesz egy ciklikusan v\u00e9grehajtott feladatot, akkor mi lesz a v\u00e1ltoz\u00f3kban? Elemz\u0151 \u00faton kital\u00e1lhat\u00f3, de nem mindig trivi\u00e1lis, k\u00fcl\u00f6n\u00f6sen, ha a v\u00e1ltoz\u00f3k k\u00fcl\u00f6nb\u00f6z\u0151 helyekr\u0151l \u00e9rkeznek.<\/p>\n<p><\/p>\n<p>\u00cdgy a handler-ek sokkal kev\u00e9sb\u00e9 hasznosak \u00e9s sokkal probl\u00e9m\u00e1sabbak, mint amilyennek t\u0171nnek. Ha valami sz\u00e9pen (felesleges bonyol\u00edt\u00e1sok n\u00e9lk\u00fcl) meg\u00edrhat\u00f3 handlerekkel, akkor jobb an\u00e9lk\u00fcl tenni. Ha sz\u00e9pen nem lehet, akkor ink\u00e1bb haszn\u00e1lj \u0151ket.<\/p>\n<p><\/p>\n<p>A figyelmes olvas\u00f3 joggal megjegyzi, hogy nem besz\u00e9lt\u00fcnk <code>listen<\/code>, hogy a handler \u00e9rtes\u00edthet egy m\u00e1sik handlert, hogy a handler tartalmazhat import_tasks-t (amely tartalmazhat include_role-t with_items-el), hogy a handler rendszer az Ansible-ben Turing-teljes, hogy az include_role-b\u00f3l sz\u00e1rmaz\u00f3 handlerek \u00e9rdekes m\u00f3don keresztezik a play-b\u0151l sz\u00e1rmaz\u00f3 handlereket stb. \u2014 ez mindegyiknyilv\u00e1nval\u00f3an nem \"alap\".)<\/p>\n<p><\/p>\n<p>B\u00e1r van egy bizonyos WTF, ami val\u00f3j\u00e1ban funkci\u00f3, \u00e9s amire eml\u00e9kezni kell. Ha a feladatot v\u00e9grehajtjuk <code>delegate_to<\/code> \u00e9s van \u00e9rtes\u00edt\u00e9se, akkor a megfelel\u0151 handler a <code>delegate_to<\/code>, teh\u00e1t azon a hoszton, amelyre a play ki van jel\u00f6lve, fog v\u00e9grehajt\u00f3dni. (B\u00e1r a handlernek term\u00e9szetesen lehet <code>delegate_to<\/code> is).<\/p>\n<p><\/p>\n<p>K\u00fcl\u00f6n szeretn\u00e9k p\u00e1r sz\u00f3t sz\u00f3lni az \u00fajrahaszn\u00e1lhat\u00f3 szerepekr\u0151l. A gy\u0171jtem\u00e9nyek megjelen\u00e9se el\u0151tt az volt az elk\u00e9pzel\u00e9s, hogy univerz\u00e1lis szerepeket k\u00e9sz\u00edthet\u00fcnk, amiket lehet <code>ansible-galaxy install<\/code> \u00e9s elment. Minden oper\u00e1ci\u00f3s rendszeren m\u0171k\u00f6dik, minden v\u00e1ltozatban, minden helyzetben. Nos, a v\u00e9lem\u00e9nyem: ez nem m\u0171k\u00f6dik. B\u00e1rmilyen szerep, amely t\u00f6meg t\u00e1mogat\u00e1ssal b\u00edr <code>include_vars<\/code>, 100500 eset t\u00e1mogat\u00e1sa a sarkalatos esetek bugjainak m\u00e9lys\u00e9geibe doomed. Ezeket mas\u00edroz\u00f3 tesztel\u00e9ssel lehet elt\u00fcntetni, de mint minden tesztel\u00e9s, vagy megvan a dekart-t\u00e9r szorzata a bemeneti \u00e9rt\u00e9keknek \u00e9s a tot\u00e1lis funkci\u00f3nak, vagy \"csak egyes forgat\u00f3k\u00f6nyveket fed\u00fcnk le\". V\u00e9lem\u00e9nyem szerint sokkal jobb, ha a szerep line\u00e1ris (cyclomatic complexity 1).<\/p>\n<p><\/p>\n<p>Min\u00e9l kevesebb az if (nyilv\u00e1nos vagy deklarat\u00edv \u2014 form\u00e1ban <code>when<\/code> vagy form\u00e1ban <code>include_vars<\/code> a v\u00e1ltoz\u00f3k halmaz\u00e1t tekintve), ann\u00e1l jobb a szerep. N\u00e9ha el kell \u00e1gazni, de hangs\u00falyozom, min\u00e9l kevesebb, ann\u00e1l jobb. Ez\u00e9rt \u00fagy t\u0171nik, hogy egy j\u00f3 szerep a galaxy (m\u0171k\u00f6dik!) sok <code>when<\/code> lehet, hogy kev\u00e9sb\u00e9 el\u0151ny\u00f6s, mint egy \"saj\u00e1t\" szerep \u00f6t feladatra. Az a pillanat, amikor a galaxy-val rendelkez\u0151 szerep jobb \u2014 amikor valamit kezdesz \u00edrni. Az a pillanat, amikor az rosszabb\u00e1 v\u00e1lik \u2014 amikor valami elt\u00f6rik, \u00e9s van egy gyan\u00fad, hogy ez a \"galaxy-szerepb\u0151l\" van. Megnyitod, \u00e9s ott \u00f6t include, nyolc task-lista \u00e9s egy halom <code>when<\/code>\u2018ok\u2026 \u00c9s ezzel foglalkozni kell. Az \u00f6t feladat line\u00e1ris list\u00e1jak\u00e9nt, amelyben igaz\u00e1b\u00f3l elromlani sem lehet.<\/p>\n<p><\/p>\n<h1>A k\u00f6vetkez\u0151 r\u00e9szekben<\/h1>\n<p><\/p>\n<ul>\n<li>Egy kicsit az inventory-r\u00f3l, csoportv\u00e1ltoz\u00f3kr\u00f3l, host_group_vars plugin-r\u00f3l, hostvars-r\u00f3l. Hogyan k\u00f6tj\u00fck \u00f6ssze a spagettit Gordiusi csom\u00f3v\u00e1. A v\u00e1ltoz\u00f3k terjedelme \u00e9s precedenci\u00e1ja, az Ansible mem\u00f3ria modellje. \"De hol is t\u00e1roljuk a felhaszn\u00e1l\u00f3nevet az adatb\u00e1zishoz?\".<\/li>\n<li><code>jinja: {{ jinja }}<\/code> - nosql notype nosense puha gyurma. Mindenhol ott van, m\u00e9g ott is, ahol nem sz\u00e1m\u00edtasz r\u00e1. Kicsit a <code>!!unsafe<\/code> \u00e9s \u00edzletes yaml-r\u00f3l.<\/li>\n<\/ul>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/508762\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042f \u0434\u0435\u043b\u0430\u044e \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0432\u044c\u044e \u0434\u043b\u044f \u0447\u0443\u0436\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 \u0410\u043d\u0441\u0438\u0431\u043b \u0438 \u043c\u043d\u043e\u0433\u043e \u043f\u0438\u0448\u0443 \u0441\u0430\u043c. \u0412 \u0445\u043e\u0434\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0448\u0438\u0431\u043e\u043a (\u043a\u0430\u043a \u0447\u0443\u0436\u0438\u0445, \u0442\u0430\u043a \u0438 \u0441\u0432\u043e\u0438\u0445), \u0430 \u0442\u0430\u043a \u0436\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439, \u044f \u043f\u043e\u043d\u044f\u043b \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0410\u043d\u0441\u0438\u0431\u043b\u0430 \u2014 \u043e\u043d\u0438 \u043b\u0435\u0437\u0443\u0442 \u0432 \u0441\u043b\u043e\u0436\u043d\u043e\u0435, \u043d\u0435 \u043e\u0441\u0432\u043e\u0438\u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e. \u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u043e\u0439 \u043d\u0435\u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0441\u0442\u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0410\u043d\u0441\u0438\u0431\u043b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87084","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042f \u0434\u0435\u043b\u0430\u044e \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0432\u044c\u044e \u0434\u043b\u044f \u0447\u0443\u0436\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 \u0410\u043d\u0441\u0438\u0431\u043b \u0438 \u043c\u043d\u043e\u0433\u043e \u043f\u0438\u0448\u0443 \u0441\u0430\u043c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/osnovy-ansible-bez-kotoryh-vashi-plejbuki-komok-slipshihsya-makaron\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b Ansible, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0430\u0448\u0438 \u043f\u043b\u0435\u0439\u0431\u0443\u043a\u0438 \u2014 \u043a\u043e\u043c\u043e\u043a \u0441\u043b\u0438\u043f\u0448\u0438\u0445\u0441\u044f \u043c\u0430\u043a\u0430\u0440\u043e\u043d | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042f \u0434\u0435\u043b\u0430\u044e \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0432\u044c\u044e \u0434\u043b\u044f \u0447\u0443\u0436\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 \u0410\u043d\u0441\u0438\u0431\u043b \u0438 \u043c\u043d\u043e\u0433\u043e \u043f\u0438\u0448\u0443 \u0441\u0430\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/osnovy-ansible-bez-kotoryh-vashi-plejbuki-komok-slipshihsya-makaron\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-03T11:42:34+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-03T11:42:34+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Az Ansible alapjai, n\u00e9lk\u00fcl\u00f6zhetetlenek, k\u00fcl\u00f6nben a playbookjaid \u2014 egy rak\u00e1s \u00f6sszetapadt t\u00e9szta | ProHoster","description":"Sok Ansible k\u00f3dot ellen\u0151rz\u00f6k \u00e9s sokat is \u00edrok.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/osnovy-ansible-bez-kotoryh-vashi-plejbuki-komok-slipshihsya-makaron","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0441\u043d\u043e\u0432\u044b Ansible, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0430\u0448\u0438 \u043f\u043b\u0435\u0439\u0431\u0443\u043a\u0438 \u2014 \u043a\u043e\u043c\u043e\u043a \u0441\u043b\u0438\u043f\u0448\u0438\u0445\u0441\u044f \u043c\u0430\u043a\u0430\u0440\u043e\u043d | ProHoster","og:description":"\u042f \u0434\u0435\u043b\u0430\u044e \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0432\u044c\u044e \u0434\u043b\u044f \u0447\u0443\u0436\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 \u0410\u043d\u0441\u0438\u0431\u043b \u0438 \u043c\u043d\u043e\u0433\u043e \u043f\u0438\u0448\u0443 \u0441\u0430\u043c.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/osnovy-ansible-bez-kotoryh-vashi-plejbuki-komok-slipshihsya-makaron","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-03T11:42:34+00:00","article:modified_time":"2020-07-03T11:42:34+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87084","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:58:53","updated":"2026-02-22 15:29:30","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/87084","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=87084"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/87084\/revisions"}],"predecessor-version":[{"id":162161,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/87084\/revisions\/162161"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=87084"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=87084"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=87084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}