Basic ansible, sine quibus fabularum libri tui massam pastae erunt

Recensiones aliorum scriptorum Ansible Codicis multum facio et multum me scribo. In erroribus analysendis (sive aliorum hominum et meorum), necnon plurium colloquiorum, percepi errorem principalem quem usores Ansible faciunt - implicant res implicatas sine dominatu fundamentales.

Ad hanc universalem iniustitiam corrigendam, decrevi introductionem ad Ansible pro iis qui iam noverunt scribere. Hoc moneo, ne narratio hominum sit, hoc multum litterarum et sine imaginibus longum est.

Exspectatus gradus lectoris est aliquot milia linearum yamla iam scripta esse, aliquid iam in productione esse, sed quodammodo omnia perversa sunt.

nomina

The main error an Ansible user makes is not knowing what something is called. Si nomina nescis, quid documenta dicat non potes. Exemplum vivum: in colloquio, qui videbatur se multum scripsisse in Ansible non posse respondere quaestioni "quae elementa in fabula libri constant?" Et cum suggessisset "Responsum expectatum esse fabulae in fabula", commentarium damnativum "non utimur". Homines Ansible pro pecunia scribunt et fabula non utuntur. Utuntur quidem, sed quid sit nesciunt.

Incipiamus igitur ab aliquo simplici: quid dicitur? Fortasse hoc scis, vel fortasse non, quia non attendit cum documenta legis.

ansible-playbook facit playbook. Playbook fasciculus est cum extensione yml/yaml, cuius intus aliquid tale est:

---
- hosts: group1
  roles:
    - role1

- hosts: group2,group3
  tasks:
    - debug:

Iam intelleximus hunc totum fasciculum fabularum esse. Ostendere possumus ubi sint partes et ubi officia sint. Sed ubi est fabula? Et quid interest inter ludi et partes seu fabulas?

In documentis actum est. et requiro. Incipientes - quia nimis multum est et omnia simul non meministi. Expertum est, quia Β« levia sunt Β». Si expertus es, has paginas singulis sex mensibus semel saltem relege, et codice tuo classis prima fiet.

Sic memento: Playbook est index fabularum et import_playbook.
Haec una fabula est;

- hosts: group1
  roles:
    - role1

et haec quoque alia fabula;

- hosts: group2,group3
  tasks:
    - debug:

Quid est fabula? Quid est?

Fabula elementum est praecipuum pro fabularum libris, quod fabula et solum fabulae coniunguntur index munerum et/vel officiorum cum indice exercituum in quo exsecutioni mandandae sunt. In profunditatibus documentorum mentionem invenire potes delegate_to, , locus cinematographicorum cinematicorum, retis-cli-occasus speciales, acies salire, etc. Permittunt te leviter mutare locum ubi opera exercentur. Sed, oblitt. Singulae hae optiones ingeniosae valde proprios usus habent, et certe non sunt universales. Et loquimur de rebus fundamentalibus ut omnes sciant et utantur.

Si vis "aliquid" "alicubi" facere, fabula scribis. Non munus. Non est munus cum modulis et legatis. Accipe tu et scribe ludere. In quo, in exercitibus campi, ubi facere voles, et in muneribus/officiis - quid exequi.

Simplex, vox? Quomodo aliter fieri potest?

Una e notis momentorum cum homines hoc facere desiderant non per ludum est "munus quod omnia componit". Munus habere vellem, quod servitores primae speciei et ministri secundi generis configuraret.

archetypum est adipiscing. Munus vigilantiae velim habere quod vigilantia configurabit. Munus vigilantia tribuitur exercitibus vigilantia (secundum ludere). Sed evenit ut vigilantia sarcinas exercitui tradendas, quae vigilantia sumus, opus est. Cur non utimur delegatis? Etiam eget iptables configurare. delegare? Etiam scribere debes/config corrige pro DBMS ut vigilantia efficiat. delega! Et si vis deest, tunc legationem facere potes include_role in nested loop utens captiosam colum in indice circulorum, et intus include_role plus potestis facere delegate_to iterum. Et abeamus imus.

Bonum votum - unum munus vigilantiam habere, quod "omnia facit" - in integrum nos ducit infernum, ex quo saepissime unus est exitus: omnia ex integro scribere.

Ubi hic error accidit? Nunc inveneris facere negotium "x" in exercitum X te ad exercitum Y et fac "y" ibi, facere simplex exercitium: vade et scribe ludum, quod in exercitum Y facit y. Noli aliquid "x" addere, sed de integro illud scribe. Etiam varius magna magna.

Videtur quod omnia in superioribus paragraphis recte dicantur. Sed hoc non est causa tua! Quia vis scribere codicem reusable qui est aridum et quasi bibliothecam, et debes quaerere modum quomodo fiat.

Hic est ubi alius latet gravis error. Error, qui multa incepta a tolerabiliter scriptis (potest melius, sed omnia opera et facile finire) in horrorem prorsus convertit, quod etiam auctoris instar non potest. Operatur, sed absit ut aliquid mutes.

Error est: munus bibliothecae munus est. Haec analogia tot initia bonorum perdidit ut solum triste spectaculum. Munus est bibliothecae munus non est. Calculationem facere non potest, et ludi graduum iudicia facere non potest. Admone me quae iudicia fabula facit?

Gratias ago, recte dicis. Fabula consilium facit (depressius, notitias continet) circa quae munera et munera exerceant in quibus exercitus.

Si munus, et etiam calculis hoc consilium delegas, te ipsum (et is qui codicem tuum dividere conabitur) miserae vitae perdis. Munus non iudicat ubi agitur. Haec sententia a fabula facta est. Partes facit quod suus 'dixit, ubi nuntiatum est.

Cur periculosum est propositum in Ansible et quare COBOL melius est quam Ansible in capitulo de variabilibus et jinja loquemur. Nunc enim unum dicamus - singula calculi tui vestigium indelebile mutationum in global variabilium relinquit, et nihil de eo facere potes. Simul ac duo "vestigia" intercisa sunt, omnia transierunt.

Nota pro fastidio: munus certe potest influxum moderari. Eat delegate_to et rationabiles usus habet. Eat meta: end host/play. Sed! Memento basics docemus? oblitus circuitum delegate_to. Loquimur de simplicissima et pulcherrima codice Ansible. Quod est facile legere, facile scribere, facile est debug, facile probare et facile perficere. So, Iterum ;

fabula et sola fabula decernit, in quibus virtutibus quid agitur.

In hac sectione de oppositione ludi et partes egimus. Nunc de officiis nobis partes relationis dicamus.

Munia et muneribus

Attende fabula:

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

Dicamus te foo facere opus. Et spectat sicut foo: name=foobar state=present. Ubi haec scribam? in pre? poft? Partes creare?

... Et ubi officia ibimus?

Incipimus a basics iterum - fabrica fabulae. Si in hac re natare non potes, fabula omnium rerum fundamento uti non potes, et eventum tuum "labilis" erit.

Ludere fabrica: exercituum directiva, occasus pro ludo ipsius et pre_tasks, munia, partes, sectiones post_operationes. Reliquae fabulae parametri nunc nobis non sunt magni momenti.

Ordo sectionum earum cum muneribus et muneribus; pre_tasks, roles, tasks, post_tasks. Cum semantically intercedit ordo executionis tasks ΠΈ roles non liquet, optima exercitia dicunt nos sectionem adjicere tasksTantum si non roles... Si est roles, Ρ‚ΠΎ всС ΠΏΡ€ΠΈΠ»Π°Π³Π°ΡŽΡ‰ΠΈΠ΅ΡΡ таски ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² сСкции pre_tasks/post_tasks.

Reliquum est ut omnia semantically perspicua sint: primum pre_tasksergo rolesergo post_tasks.

Sed adhuc quaestionem non respondimus: ubi est modulus vocatus? foo scribere? Num integrum munus pro singulis modulis scribere oportet? An melius est omnia habere partes crassas? Et si non munus, ubi scribam - in pre vel post?

Si ad has quaestiones nihil rationabiliter respondetur, hoc signum est defectus intuitionis, id est, ipsa labilis fundamenta. Sit instar est. Primo, quaestio securitatis: si fabula est pre_tasks ΠΈ post_tasks (nec desunt functiones vel functiones), tum aliquid frangere potest, si primum munus exsequar post_tasks Ego movebo usque ad finem pre_tasks?

Nempe tenorem quaestionis innuit, ut infringat. Sed quidnam?

Tracto ... . Legens basics ostendit rem magni momenti: omnes tracto statim post singulas partes rubescunt. Illae. omnia opera from * pre_taskstunc omnes tracto notificantur. Tunc omnes partes et omnes tracto qui in muneribus notificabantur exsecuti sunt. Post post_tasks et earum tracto.

Ita, si negotium trahunt a post_tasks Π² pre_tasksergo potentia exequeris illud antequam tracto interficiatur. exempli gratia, si in pre_tasks Servo interretiali inauguratus et configuratus est, et post_tasks aliquid ei mittitur, hoc negotium in sectionem transferet pre_tasks eo ducet quod in tempore "mittendi" ministri nondum currendi erunt et omnia frangentur.

Nunc iterum cogitemus, quid opus est? pre_tasks ΠΈ post_tasks? Exempli gratia, ad complendum omnia necessaria (including tracto) antequam munus impleat. A post_tasks permittet nos operari cum eventibus muneribus exsecutionis (including tracto).

Astutus Ansible quid sit peritus narrabit. meta: flush_handlerssed quid opus est cauponibus, si in ludo exsecutionis ordinem sectionum inniti possumus? Usus autem meta: flush_handlers inopinata nobis res dare potest cum duplicatis tracto, novis monitis nobis adhibitis. when Ρƒ block etc. Quo melius scis ansible, eo magis solutionem "dolosam" nominare potes. Et solutio simplex - naturali divisione inter prae/roles/post usus - nuances non causat.

Et ad nostrum foo. Ubi eam ponerem? In pre, stipes vel muneribus? Patet, hoc pendet an eventus tracto pro foo indigeamus. Si ibi non sunt, foo non indiget ut in utraque praeeminentia vel post- ponantur β€” hae sectiones peculiarem significationem habent β€” muneribus ante et post agmen codicis exsequentes.

Nunc responsio quaestioni "munus vel negotium" descendit ad id quod iam in ludo est - si officia ibi sunt, necesse est eas ad munera addere. Si partes sunt, munus (etiam ab uno opere) creare debes. Admoneo me tibi munera et munera non simul esse adhibita.

Intellectus basics of Ansible responsiones rationabiles praebet quaestionibus quasi gustus.

Munera et munera (pars duarum)

Nunc de condicione rem agamus cum iam incipis fabularum scribere. Opus foo, bar et praedare. Haec tria sunt opera, unum munus vel tres partes? Ad quaestionem summandam: in quo puncto partes scribere incipis? Quid est munus scribere cum opera scribere potes?... Quid est munus?

Unus ex maximis erratis (de hoc iam locutus sum) putare est munus esse simile functionis in bibliotheca programmatis. Quid munus genericum genus simile? Argumenta initus acceptat, causas laterales interact, effectus latus facit et valorem reddit.

Nunc attende. Quid inde fieri potest in partes? Semper gratissimum es vocare effectus latus, haec est essentia totius Ansible - latus effectus creare. Habetne latus causas? Elementarium. Sed cum "pretium habe et redde" - id est ubi non operatur. Primum, ad munus transire non potes. Global variabilis ratiocinationem facere potes cum vita sua ludi in sectione variarum partium pro munere. Global variabilis vita in ludo intra munus facere potes. Aut etiam cum vita playbooks (set_fact/register). Sed "variabilitates locales" habere non potes. "Accipere" et "redere" non potes.

Summa sequitur ex hoc: non potes scribere aliquid in Ansible sine effectu laterali. Mutationes global variabiles semper effectus lateris pro functione sunt. In Rust, exempli gratia, mutabilis globalis variabilis est unsafe. Et in Ansible unica est methodus movere valores pro munere. Nota verba adhibita: non "valorem obtine ad partes", sed "muta valores qui partes utitur". Nulla inter munera solitudo est. Solitudo nulla est inter officia et munera.

summa munus non est munus.

Quod bonum est circa partes? Primum, munus habet valores default (/default/main.yaml) secundo, munus habet directoria additamenta ad thesauros recondendi.

Quae sunt beneficia valorum default? Quia in pyramide Maslow, tabula Ansible magis distorta prioritatum variabilium, partes defaltae sunt infimae-prioritatis (minus parametri lineae mandatum Ansible). Hoc significat quod, si debes providere valoribus default et non sollicitas eos summopere valores ab inventario vel coetus variabilium, tunc partes defaltae solum ius loci tibi sunt. (Iaco paulo - plura sunt |d(your_default_here)sed si de stationariis locis loquamur, tantum partes defaltae.

Quid aliud magnum de muneribus? quia catalogi suos habent. Haec directoria sunt variabilium, tam constantium (i.e. ratione partium) et dynamicorum (vel exemplar vel exemplar anti-statuum est. include_vars apud {{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml.). Haec sunt directoria pro files/, templates/. Etiam, modulos tuos et plugins habere tibi permittit (library/). Sed, prae operibus in fabularum libris (quod etiam hoc totum habere potest), hoc tantum beneficium est, quod fasciculi non in unum acervum, sed plures acervos separatos profunduntur.

Unum specialius: muneribus creare potes quae reuse (via galaxia) in promptu erunt. Adveniente collectionibus, munus distributio paene oblita considerari potest.

Ita partes duae notae magni momenti sunt: ​​defaltam habent (unicam notam) et te codicem tuum conformare permittunt.

Revertentes ad quaestionem originalem: quando operas facere et quando munera facere? Negotium fabularum frequentius adhibentur vel ut "glutine" ante/post functiones, vel sicut elementum aedificium independentium (tunc nullae functiones in codice debent). Rogus functionum normalium cum muneribus mixtus est indubitata pigritia est. Stylo specifico inhaerere debeas - vel munus vel munus. Munera praebent separationem entium et defectuum, munera permittunt te citius codicem legere. Plerumque, plus "stationarius" (maximus et multiplex) in muneribus ponatur, et scripta auxiliaria in stilo activitatis conscribantur.

Potest import_role facere negotium, sed si hoc scribes, paratus est ad sensum tuum exponere pulchritudinis cur hoc facere velis.

Astutus lector dicere potest muneribus, muneribus, clientelas per galaxy.yml habere posse, ac etiam terribilis et terribilis est. include_role β€” Admoneo te nos in Ansible basic artes emendare, non in gymnastica figura.

Tracto et operibus

Alterum evidens tractemus: tracto. Sciens recte uti fere ars est. Quid interest inter tractum et trahat?

Cum meminimus basics, hic est exemplum:

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

Tractatores munus in rolename/handlers/main.yaml locantur. Tractatores rummage inter omnes participes fabulae: pre/post_tasks munus tracto trahere possunt, et munus tracto e fabula trahere potest. Attamen "trarium" vocat tractoriis multo plus wtf quam iteratio trivialis tractatoris. (Aliud elementum usuum optimorum est tentare nomina tracto non repetere).

Praecipua differentia est, quod munus semper exercuit (idempotenter) (plus/minus tags et) when) et tracto - mutatione status (notificamus ignes si mutatum est). Quid est hoc, Pythi? Verbi gratia, hoc quod cum sileo, si nulla mutatur, tunc tracto non erit. Quid fieri potest ut tracto opus sit, cum nulla mutatio in generante opus sit? Exempli causa, quia aliquid fregit et mutatur, sed tracto supplicium non attigit. Exempli gratia, quia tempus retis descendit. Mando mutata est, ministerium non restarted. Proximo tempore quo incipias, config non iam mutatur, et religio manet cum antiqua versione config.

Res cum config solvi non potest (protocollum fasciculi fasciculi etc., pressius excogitare potes specialem sileo, sed hoc iam non est "ansible ansible" in aliqua forma. Sed alia est fabula vulgaris: nos applicationes instituimus, notavimus .service-file, et nunc volumus daemon_reload ΠΈ state=started. Locus autem naturalis hic videtur esse tractor. Si autem non tracto, sed negotium in fine exactoris vel functionis, tunc idempotenter exequetur omni tempore. Etiamsi playbook medio fregit. Hoc problema restarted omnino non solvit (officium cum attributo restarted facere non potes, quia idem potentia amittitur), sed certum pretium est facere statum=incepit, altiore stabilitas ludorum crescit, quia numerus nexuum et status dynamicus decrescit.

Alia proprietas affirmativa tracto est quod output non impedit. Nullae mutationes erant - nullae praetermittendae sunt vel ok in output - facilior lectu. Est etiam proprietas negativa - si typo in primo cursu linearly inveneris, tunc tracto exsecutioni mandabitur nisi mutato, i.e. in quibusdam conditionibus β€” very rarely. Ut primum in vita mea post quinquennium. Et sane in nomine typo erit et omnia frangentur. Et si secundo non currunt, non est mutandum.

Separatim loqui debemus de variabilium disponibilitate. Exempli causa, si per ansam renunties, quid erit in variabilibus? Conicere potes analytice, sed non semper leve est, praesertim si variabiles ex diversis locis veniunt.

... Sic tracto multo minus utilia sunt et multo magis inconvenientia quam videntur. Si aliquid pulchre (sine frills) sine tracto scribere potes, melius est sine illis facere. Si pulchre non operatur, melius est cum illis.

Lector corrosivus recte notat nos non disputasse listenquod tracto notificare potest pro alio tracto, quod tracto import_tasklas includere potest (quae includere_role cum with_items potest), quod tracto systematis in Ansible est Turing-completum, quod tracto ab include_role intersecet curiose cum tracto ab ludo; .d. - Haec omnia plane non sunt Β« basics Β»).

Etsi una specifica WTF est, quae actu pluma est, quam meminisse debes. Si opus sit, supplicium est delegate_to et certiorem faciat, tunc tractator sine correspondente exsecutus est delegate_to, i.e. in exercitu ubi fabula assignatur. (Quamvis tracto, utique, habere potest delegate_to Eadem).

Seorsim pauca de reusable muneribus dicere volo. Antequam collectiones apparuerunt, idea erat quod partes universales facere posses quae esse possent ansible-galaxy install et ivit. Opera in omnibus OS omnium variantium in omnibus adiunctis. Ita mea sententia: non opus est. Munus aliquod cum massa include_vars100500 casuum sustentans, caduco casuum angulis minorum casuum moriturus est. Obtegi possunt ingenti probatione, sed sicut cum quavis probatione, vel cartesianum productum valorum inputationis et functionis totalis, vel "sponsiones singulas obtectas". Mea sententia multo melius est si munus est linearis (complexitas cyclomatica I).

Pauciora ifs (declarativa vel expressa - in form when seu forma include_vars by set of variables) meliore munere. Aliquando ut ramos habeas, sed, inquam, quo pauciores, eo melius. Ita videtur quasi munus bonum cum galaxia (operatur!) cum fasciculo when minus potior sit quam munus "proprium" ex quinque operibus. Tempus quo munus cum galaxia melius est cum aliquid scribere incipis. Momentum cum ingravescit est cum aliquid frangit et suspicionem habes quod est ob munus "galaxia". Hoc aperis, et quinque inclusiones sunt, octo schedae negotium et acervus whenov... Et hoc nobis instar est. Pro 5 pensa, in quibus nihil est indicem linearem frangere.

In partibus sequentibus

  • Paulo de inventario, variabilium circulo, host_group_vars plugin hostvars. Quomodo ligare nodum Gordianum cum spaghetti. Scopus et praelatio variabilium, exemplar Ansible memoriae. "Ubi ergo condimus usoris pro database?"
  • jinja: {{ jinja }} - nosql notypum nasum molle plasticinum. Vbique, etiam ubi non speras. Paulo de !!unsafe et delectamentum yaml.

Source: www.habr.com